electron 中 nls.localize({ key: 'miUndo', comment: ['&& denotes a mnemonic'] 这种"&&"是什么用处?

2020-05-11 15:57:00 +08:00
 vevlins

https://github.com/ysmhsla/myeditor/blob/8076a19fdcab7e1fc1707952d652f0bb6c6db331/src/vs/code/electron-main/menus.ts

		if (isMacintosh) {
			undo = this.createDevToolsAwareMenuItem(nls.localize({ key: 'miUndo', comment: ['&& denotes a mnemonic'] }, "&&Undo"), 'undo', devTools => devTools.undo());
			redo = this.createDevToolsAwareMenuItem(nls.localize({ key: 'miRedo', comment: ['&& denotes a mnemonic'] }, "&&Redo"), 'redo', devTools => devTools.redo());
			cut = this.createRoleMenuItem(nls.localize({ key: 'miCut', comment: ['&& denotes a mnemonic'] }, "Cu&&t"), 'editor.action.clipboardCutAction', 'cut');
			copy = this.createRoleMenuItem(nls.localize({ key: 'miCopy', comment: ['&& denotes a mnemonic'] }, "&&Copy"), 'editor.action.clipboardCopyAction', 'copy');
			paste = this.createRoleMenuItem(nls.localize({ key: 'miPaste', comment: ['&& denotes a mnemonic'] }, "&&Paste"), 'editor.action.clipboardPasteAction', 'paste');
		} else {
			undo = this.createMenuItem(nls.localize({ key: 'miUndo', comment: ['&& denotes a mnemonic'] }, "&&Undo"), 'undo');
			redo = this.createMenuItem(nls.localize({ key: 'miRedo', comment: ['&& denotes a mnemonic'] }, "&&Redo"), 'redo');
			cut = this.createMenuItem(nls.localize({ key: 'miCut', comment: ['&& denotes a mnemonic'] }, "Cu&&t"), 'editor.action.clipboardCutAction');
			copy = this.createMenuItem(nls.localize({ key: 'miCopy', comment: ['&& denotes a mnemonic'] }, "&&Copy"), 'editor.action.clipboardCopyAction');
			paste = this.createMenuItem(nls.localize({ key: 'miPaste', comment: ['&& denotes a mnemonic'] }, "&&Paste"), 'editor.action.clipboardPasteAction');
		}

比如这里很多 &&,到底啥意思?

1990 次点击
所在节点    Electron
3 条回复
geelaw
2020-05-11 16:17:17 +08:00
注释里提示了是助记按键,即键盘快捷方式。

很多菜单项、命令按钮的某个字母下会有一个下划线,这表示使用 那个字母 的按键或者 Alt+那个字母 可以激活那个菜单项、命令按钮。

举个例子,在 Windows 上打开记事本,然后按 Alt+O 再按 F 可以打开字体对话框。
vevlins
2020-05-11 16:33:46 +08:00
@geelaw 还是不太明白, &&Paste 在屏幕上实际显示 Paste,也没有显示快捷键提示,像 Cu&&t 看起来就更奇怪了,这个快捷键如何触发呢?
geelaw
2020-05-11 17:03:45 +08:00
@vevlins 因为最近的 Windows (大概是 Windows Vista 或者 7 开始的)默认不显示提示。这个技能也不是那么久远的故事,感觉我在回答电脑操作 101 。

Cut 的触发方式自然是按 T,例如在 VSCode 里面,打开 Edit 菜单后按 T,会在 Cut 和 Toggle Line Comment 之间反复切换高亮项,在切换到 Cut 后按 Enter 就可以触发,这是因为 Toggle Line Comment 的快捷方式也是 T ;如果是 Copy,因为 Edit 里面只有 Copy 的快捷方式是 C,所以按 C 会直接触发。

如果你使用 Alt+E 打开 Edit 菜单,则无论什么设置都会显示每个菜单项的快捷方式,这里的逻辑是用户明显表达了使用键盘导航的意愿。

如果你想永远显示快捷方式的下划线,可以在 Windows 的 Settings | Ease of Access | Keyboard 里打开 Underline access keys when available 。

同理,标准的 Yes/No 对话框可以按 Y 或者 N 进行回答,无论是否有下划线。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670590

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX