让MacOS样式的热键在GNU/Linux中工作

2020-09-11 21:19:25

这些年来,我用过所有的操作系统。有时一下子就全完了。最近,我开始使用Linux作为我的主要桌面操作系统。我需要的一切都在Linux上本地运行,而且因为我完全控制了我的环境,所以从来没有因为强制更新而停机的情况。毕竟,这是我的桌面,所以我真的要放弃Windows了,在Windows中,Ctrl键修饰模式与Linux大同小异。尽管如此,我还是不想在这种新配置上妥协,而且我的Macbook中缺少了一样我真正想要的东西。

当然,我说的是Command键,或者更通俗地说,就是Apple键,以及MacOS内置的所有快捷键和热键,这些都让使用它变得非常有趣。

是人们常说的带给GNU/Linux积极方面的东西。然而,这真的是真的吗?以我手头的问题为例:更改所有程序的复制/粘贴热键。事实上,有些任务在它们的范围内是如此之大,几乎没有用户能够完成它们。至少在没有大量上下文知识的情况下是不会的。

在Linux中获取MacOS风格的热键实际上是一项极其困难的任务。尤其是当您希望避免通过在每个应用程序的基础上将一些密钥绑定到其他密钥来避免伪造它时。

事实是,我只是厌倦了在切换到终端时不小心发送信号,然后在切换到终端时不小心触发了错误的事情。我刚刚习惯了不用在MacOS的程序之间来回切换我的大脑。它是真正让我的Macbook Pro使用起来更舒适的东西之一。

我的第二个原因很简单,Command/Meta就在空格键旁边,我只是喜欢手的伸展跨度更短。

在大多数情况下,为Linux编写的GUI应用程序倾向于以一种非常固执己见的方式对热键可以和应该是什么做出很多假设。某些类型的程序需要完全自定义(如代码编辑器),而其他类型的程序(如浏览器)则倾向于强制使用某些热键。桌面管理器确实提供了他们自己的热键绑定。例如,大多数基于KDE的应用程序将使用您在KDE系统设置中的设置来设置热键。同时,在Gnome中,您可以使用dbind来设置键绑定。

当然,剪切/复制/粘贴是不够的。在使用Command+V粘贴内容之后,立即使用CTRL+T打开新选项卡,这实际上是相当不和谐的。事实上,如果你沿着这条路走下去,你最终将不得不重新定义你的热键。所有的一切。同样不幸的是,如今的应用程序对用户设置极为敌视。

尽管我面前有很多障碍,我还是决定试着让它行得通。

我做的第一件事就是换左Alt键,然后把Meta键留在我的键盘上。使用KDE GUI(简称系统设置)使用键盘映射配置实际上很容易做到这一点。这只是为了让我的普通windows键盘把按钮放在真正的Mac键盘应该有的位置。如果你有一个真正的苹果布局键盘,这些都不是必要的。此设置仅在我的X会话中处于活动状态,因此任何替代TTY都将恢复到我的库存布局。如果我有一个真正的苹果布局键盘,那么这根本不是必需的。

$cat kxkbrc [布局] 显示名称= LayoutList=我们 布局循环计数=-1 型号=pc101 OPTIONS=ALTWIN:SWAP_LALT_LWIN ResetOldOptions=true ShowFlag=False ShowLabel=true ShowLayoutIndicator=true ShowSingle=False SwitchMode=全局 USE=TRUE。

现在,有了这个设置,我就可以在我的桌面会话中伪造与真实MacOS键盘相同的键映射。到目前一切尚好。现在,我手动更改了代码编辑器、终端应用程序中的所有热键,甚至在我刚才提到的系统设置应用程序中,为所有KDE应用程序设置全局热键。这需要一些时间,但在大多数情况下是非常直接的。

虽然这适用于KDE应用程序,但我也必须对基于GTK+的程序进行此更改。幸运的是,这也涵盖了Chrome、Discord、Elements和其他一些我经常使用的基于电子的程序。

我很幸运,VSCode让我改变了一切,但非常烦人的是,我必须为我想使用的每个地方重做所有基于系统的热键,比如将光标设置为行的开始(在MacOS中,这是Meta+左箭头)。

一些网站也使用Meta+C,例如在Github中,点击Meta+C实际上会获得焦点,并在线程中将你带到Add Comment UI,所以有时在Github.com上,即使Firefox设置为使用Meta+C来复制我实际上无法使用热键的内容,因为网站会覆盖它。

@BINDING-SET GTK-超级剪切-复制-粘贴 { 绑定";<;超级&>x";{";剪贴板";()}; 绑定";<;超级&>c";{";copy-clipboard";()}; 绑定";<;超级&>v";{";粘贴-剪贴板";()}; 绑定";<;超级&>a";{";SELECT-ALL";(1)}; 绑定";<;超级&>z";{";撤消";()}; } *{ -GTK-KEY-BINDINGS:GTK-Super-Cut-Copy-Paste }

我可能会添加更多内容,但就目前而言,这让我在大多数GTK+应用程序中达到了我想要的程度。请注意,如果您计划运行任何设计为以root身份运行的使用GTK+的程序(如GParted),您还应该将此配置文件链接或复制到root帐户主目录。

所以最终还是有可能的。除了一个项目外,我所有的项目都能达到我想要的效果。但这是一种巨大的痛苦。即使有文档,也很难弄清楚哪些设置在Linux环境中起什么作用。例如,GTK+2.0和GTK+3.0的文档通常都存在,但是当他们想要涵盖环境中的所有程序时,没有一个全面的最佳实践指南来说明应该做什么。

Linux生态系统可以而且应该做得更好。做任何你想做的事情的能力是一把双刃剑,即使你在理论上可以改变事情,但在实践中,有时改变事情是如此繁重,以至于在这个过程中保持理智本身就是一项任务。

因此,如果您是Linux用户空间开发人员,请在启动期间探测环境时检查GTK+2.0(~/.gtkrc-2.0)、GTK+3.0(~/.config/gtk-3.0/gtk.css)和KDE全局快捷方式配置(~/.config/kdeslobals),以便人们可以为他们的桌面环境选择自己的热键,或者只需使用每个热键的C库并使用存在的热键。

更好的是,如果您是已经支持MacOS、Linux和Windows的各种输入法的开发人员,您只需为用户提供切换即可。

对于Linux桌面环境来说,同意一个标准的热键配置文件将是有益的,它允许用户在他们认为合适的时候绑定密钥,而不是摇摇晃晃地从一个奇怪的键绑定配置到另一个奇怪的键绑定配置,而没有集中化的说法。