V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vevlins
V2EX  ›  Electron

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

  •  
  •   vevlins · 2020-05-11 15:57:00 +08:00 · 1983 次点击
    这是一个创建于 1438 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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');
    		}
    

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

    3 条回复    2020-05-11 17:03:45 +08:00
    geelaw
        1
    geelaw  
       2020-05-11 16:17:17 +08:00   ❤️ 1
    注释里提示了是助记按键,即键盘快捷方式。

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

    举个例子,在 Windows 上打开记事本,然后按 Alt+O 再按 F 可以打开字体对话框。
    vevlins
        2
    vevlins  
    OP
       2020-05-11 16:33:46 +08:00
    @geelaw 还是不太明白, &&Paste 在屏幕上实际显示 Paste,也没有显示快捷键提示,像 Cu&&t 看起来就更奇怪了,这个快捷键如何触发呢?
    geelaw
        3
    geelaw  
       2020-05-11 17:03:45 +08:00   ❤️ 1
    @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 进行回答,无论是否有下划线。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5670 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:26 · PVG 10:26 · LAX 19:26 · JFK 22:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.