在这个线程最上面的答案显示了如何将先前在 gnome 终端上用鼠标选择的文本复制到 X11 中的剪贴板。
我的问题是:假设我使用 bash 设置标记从终端复制一段文本并复制键盘快捷键(即set-mark
+ M-w
)。可以和X11共享这个剪贴板吗?
编辑:在原来的问题中,我谈到了与 GNOME 共享剪贴板,但正如 Gilles 在下面指出的那样,GNOME 没有专门有剪贴板(它对 X 来说是通用的),所以我更新了这个问题。
答案1
Bash 的剪贴板是 bash 内部的,bash 不连接到 X 服务器。
M-w
您可以做的就是更改将选择内容复制到 X 剪贴板以及 bash 的内部剪贴板的含义。然而 bash 的集成相当松散,我认为没有办法从 bash 代码访问区域信息或剪贴板。您可以进行键绑定以将整行复制到 X 剪贴板。²
if [[ -n $DISPLAY ]]; then
copy_line_to_x_clipboard () {
printf %s "$READLINE_LINE" | xsel -ib
}
bind -x '"\eW": copy_line_to_x_clipboard'
fi
如果您想在 shell 中做一些奇特的事情,请切换到 zsh,它(除其他优点外)在行编辑器和脚本语言之间具有更好的集成。
if [[ -n $DISPLAY ]]; then
x-copy-region-as-kill () {
zle copy-region-as-kill
print -rn -- "$CUTBUFFER" | xsel -ib
}
x-kill-region () {
zle kill-region
print -rn -- "$CUTBUFFER" | xsel -ib
}
zle -N x-copy-region-as-kill
zle -N x-kill-region
bindkey '\C-w' x-kill-region
bindkey '\ew' x-copy-region-as-kill
fi
1
Gnome 没有专门的剪贴板,这对于 X 来说是通用的。
2
从 bash 4.1 开始,按键解析代码中存在一个错误:绑定的按键序列bind -x
可能不超过两个字符长。我认为 bash 4.2 修复了一些较长前缀的情况,但不是全部;具体细节我还没有研究过。
答案2
@Gilles 已经给出了一个很好的答案。我只想提一下 的存在xclip
,这也是将终端输出复制到 X 剪贴板的非常有用的方法,只需将任何内容通过管道传输到其中即可:
$ cat /etc/passwd | xclip