【问题标题】:How to get platform specific info for shortcuts?如何获取快捷方式的平台特定信息?
【发布时间】:2018-05-07 17:21:22
【问题描述】:

如何获取特定于平台的快捷方式或特定进程的键绑定?

例如,我如何获得 Windowscopying 的快捷方式是 Ctrl + C 的信息? (如果可能的话,我想要所有标记语言的信息)我的意思是文本编辑和文件管理器的使用,并且还想知道它们是否是独立的。

【问题讨论】:

  • 不是Ctrl + C通用吗???
  • 我真的怀疑除了“你不能”之外,你的问题是否有一般的答案。
  • @ibrahimmahrir:不,它不是通用的。看看大敌 vi(1)emacs(1)
  • @cdarke 鉴于此以及 Windows 有 vi 的事实......这个问题变得毫无意义,因为没有“用于复制的 Windows 快捷方式”。
  • 每个应用程序都定义了自己的文本编辑快捷方式,这不是操作系统设置。至于文件管理器,使用标准的资源管理器快捷方式(Ctrl + C 等)是非常安全的,因为其他的都是基于它的。然后你可以有一个“例外”列表来处理你可能遇到的任何不像 Explorer 的行为。

标签: javascript python language-agnostic keyboard-shortcuts key-bindings


【解决方案1】:

如果我理解你,你想重写浏览器的系统命令。在浏览器中,所有进程在某个事件后开始。您可以复制文本,如果您使用复制命令:document.execCommand('copy');并且您可以重写除paste 之外的所有事件。 示例:

 document.addEventListener('keydown', (ev) => {
        if(ev.keyCode === 67 && ev.ctrlKey === true) { // ctrl+c
          console.log(ev);
         ev.preventDefault();//block default action of browser
        }
    });

并触发复制:

 document.addEventListener('keydown', (ev) => { //ctrl+z
        if(ev.keyCode === 90 && ev.ctrlKey === true) {
          console.log(ev);
          document.execCommand('copy');
          ev.preventDefault();
        }
    });

全部执行命令:https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand

【讨论】:

    【解决方案2】:

    要扩展我上面的评论,您需要检查 evt.metaKey 以捕获标准 macOS 快捷方式,这些快捷方式使用与 Windows 相同的字母键进行基本的剪切/复制/粘贴/撤消(X/C/V/Z ),但与不同的命令 (⌘) 修饰键结合使用。

    在大多数情况下,如果 Mac 用户可以使用他们的控制键以及命令键作为快捷方式,这并没有什么坏处,因此最简单的解决方案是同时检查两者。这是上一个答案中修改后的代码:

    document.addEventListener('keydown', (ev) => {
      if (ev.keyCode === 67 && (ev.ctrlKey || ev.metaKey)) { // Copy shortcut
        console.log(ev);
        ev.preventDefault(); // block default action of browser
      }
    });
    

    在 Windows 系统上,您可能永远不会看到 metaKey 为真的键盘事件,因为据我所知,任何使用 Win 键 (⊞) 的按键,理论上映射到 metaKey,将在网络浏览器有机会看到它之前被 Windows 拦截。

    如果您想了解更多关于按键事件和修饰键的信息,我在这里整理了一个快速的 CodePen:https://codepen.io/kshetline/pen/MWmKrPM?editors=1010

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多