UI元素是否显示定制
- 在when语句中使用context keys控制UI元素的启用或者禁用,比如菜单的启用或者禁用
- 示例
js
// 注册消息右键菜单
ksxz.ui.registerMenuItem({
id: 'msg-contextmenu-test',
parentId: 'msg-contextmenu',
name: '打印消息体',
order: 30,
// 例如:当前处于群聊,并且当前聚焦的消息是文本消息时,显示该右键菜单
when: 'activeChatType ===2 && focusedMessageType === 0',
command: 'docs.msg.contextmenu.test'
})运算符
- when语句可以由 context keys 组成(例如,activeChatType),也可以使用各种运算符来表达更细微的 UI 状态。
逻辑运算符
- 逻辑运算符允许组合简单的上下文键,或者当子句表达式包含其他逻辑、相等、比较、匹配、in/not in 运算符或带括号的表达式时。
| Operator | Symbol | Example |
|---|---|---|
| Not | ! | "!editorReadonly" 或 "!(editorReadonly 丨丨 inDebugMode)" |
| And | && | "textInputFocus && !editorReadonly" |
| Or | 丨丨 | "isLinux 丨丨 isWindows" |
- 关于逻辑运算符优先级的注意事项:下表按优先级从高到低的顺序列出了运算符。示例:
| Written as | Interpreted as |
|---|---|
!foo && bar | (!foo) && bar |
!foo 丨丨 bar | (!foo) 丨丨 bar |
foo 丨丨 bar && baz | foo 丨丨 (bar && baz) |
!foo && bar 丨丨 baz | (!foo && bar)丨丨baz) |
!(foo丨丨bar) && baz | !(foo 丨丨 bar) && baz |
相等运算符
- 您可以检查上下文键的值是否与指定值相等。请注意,右侧是一个值,而不是上下文键,这意味着它不会在上下文中查找。
- 注意
- 如果右侧的值是一个包含空格的字符串,则必须用单引号将其括起来。
==与===具有有相同的行为,!=与!==具有与相同的行为。
| Equality | == | "foo === 'docs'" |
|---|---|---|
| Inequality | != | "activeChatType !== 2" |
比较运算符
- 您可以将上下文键的值与数字进行比较。请注意,运算符的左侧和右侧必须用空格分隔,
- 示例:使用
foo < 1,而不能用foo<1
| Greater than | > , >= | "count >= 1" but not "count>=1" |
|---|---|---|
| Less than | < , <= | "count < 1" but not "count<1" |
匹配运算符
- when 语句中提供一个匹配运算符(=~),支持正则匹配。=~会将右侧视为正则表达式文本,并与左侧的上下文值匹配。
- =~运算符的右侧遵循与 JavaScript 中的正则表达式相同的规则。
| Matches | =~ | "activeChatType =~ /^[12]$/" |
|---|
- 例如:
myContextKey =~ /baz/si
'in' 和 'not in' 条件运算符
- in操作用用于判断一个 contextKey 的值是否在另一个 contextKey 的值中。例如我们要注册一个右键菜单项,该菜单项需要在当前聚焦的消息的类型是指定的消息类型时才会启用。
| In | in | "focusedMessageType in ext.supportMessageTypes" |
|---|---|---|
| Not in | not in | "activeChatType not in ext.supportMessageTypes" |
- 确定哪些消息类型应该支持该菜单,转换为数组,例如: [ 0, 1, 2 ];
- 插件可以使用
setContext command将数组设置到 context 中:
js
ksxz.commands.executeCommand('setContext', 'ext.supportMessageTypes', [
0,
1,
2
]);
// or
ksxz.commands.executeCommand('setContext', 'ext.supportMessageTypes', {
docs: 6,
normal: 0,
bar: false
});- 在注册右键菜单的 when 语句中使用 in 操作符:
js
// 注册消息右键菜单
ksxz.ui.registerMenuItem({
id: 'msg-contextmenu-test',
parentId: 'msg-contextmenu',
name: '打印消息体',
order: 30,
when: 'focusedMessageType in ext.supportMessageTypes',
command: 'docs.msg.contextmenu.test'
})可用的 context keys
| ContextKey | True when | 值 | 添加时间 | |
|---|---|---|---|---|
| 消息相关 | focusedMessageType | 被聚焦的消息的类型 | num EMsgType | 2023.7.26 |
| 消息相关 | focusedMessageCustomizeType | 被聚焦的自定义消息的自定义类型 | 字符串类型,值由插件自定义 | 2023.10.11 |
| 会话相关 | activeChatType | 当前会话的类型 | enum EChatType | 2023.7.26 |
| 操作系统相关 | isMac | 操作系统是否为macOS | boolean | 2023.7.26 |
| 操作系统相关 | isLinux | 操作系统是否为Linux | boolean | 2023.7.26 |
| 操作系统相关 | isWindows | 操作系统是否为Windows | boolean | 2023.7.26 |
| 操作系统相关 | isWeb | 操作系统是否为浏览器 | boolean | 2023.7.26 |