X11 中真正的复制/粘贴快捷键重新映射

X11 中真正的复制/粘贴快捷键重新映射

我可以使用CMD-CCMD-V来触发 X11 剪贴板功能吗?

我不想重新映射CMD发送CTRL。这不仅仅是关于人体工程学和肌肉记忆。现有的答案似乎忽略了一个事实,即它^C是一个有效、有用的字符,对许多程序来说都有自己的含义。我想将窗口管理器命令(如复制/粘贴)绑定到键组合上,在流行的程序中,如 Vim 和 Emacs,已经有几十年的约定俗成。比如CMD-C

我希望我的CTRL钥匙继续做它的设计目的是什么

  • CTRL-C应该继续^c向我的终端发送一个字符来终止进程
  • CTRL-V应该继续发送一个^v字符(Vim 中的转义序列)
  • CTRL-X应该继续发送一个^x字符(vim 的“count从光标下的数字中减去”键)

我想使用该CMD键向我的窗口管理器发送命令:

  • CMD-C应该将突出显示的文本/对象设置为 X11CLIPBOARD选择。
  • CMD-V应该从 X11CLIPBOARD缓冲区粘贴 - 无论里面有什么 - 到活动目标中,就像CTL-V在几乎每个 X 应用程序中默认执行的编辑->粘贴一样。

MacOS 的系统级快捷键确实很好用。虽然需要一些肌肉记忆调整,但现在我意识到我可以向应用程序发送实际的控制字符,我再也不会回到过去了。

我可以配置我的 Linux 机器来做同样的事情吗,至少对于复制和粘贴来说?最大的症结是复制CTRL-C/CTRL-V粘贴的 / 与 vim 键绑定冲突,但通常我想将终端控制字符与窗口管理器命令序列分开。

有点有用的文档Jamie Zawinski 的网站上介绍了 X11 处理复制/粘贴缓冲区的底层机制。这正是我想要直接用键盘控制的功能。我该如何配置它?

答案1

这是一个难题,因为 Linux 上的许多应用程序都试图巧妙地处理这个问题,并在其端重新实现逻辑。还因为 X11 中的剪贴板概念更广泛,并且有多个具有不同行为的剪贴板。

我的设置包括使用键绑定守护程序并在使用CMD-C时执行命令CMD-V。到目前为止,唯一的缺点是CMD-V要求用户V先释放才能应用粘贴。因此,您无法“按住重复”它,也不能CMD先释放(一开始可能会欺骗您的肌肉记忆)。

首先,创建一个如下脚本:

#!/bin/bash
active_window_id=$(xdotool getactivewindow)
active_window_pid=$(xdotool getwindowpid "$active_window_id")
process=$(cat /proc/$active_window_pid/comm)
if [[ "$process" == "xterm" ]]; then
  xdotool key Control_L+Shift_L+v
else
  xdotool key --clearmodifiers Control_L+v
fi

然后,有效配置文件的示例为xbindkeys

"xsel -po|xsel -bi"
  Mod4+c

"/path/to/your/script.sh"
  Release+Mod4+v

有效配置文件的示例sxhkd

super + c
  xsel -po|xsel -bi

@super + v
  /path/to/your/script.sh

您还可以使用 WM 配置来映射命令,并映射其他命令,例如CMD+A“全选”、CMD+X剪切等等。

相关内容