我可以使用CMD-C
和CMD-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
剪切等等。