如何*不*使用设置标记在 bash 和 X11 之间共享鼠标粘贴缓冲区(不是剪贴板)?

如何*不*使用设置标记在 bash 和 X11 之间共享鼠标粘贴缓冲区(不是剪贴板)?

有一个相关的答案(下面的链接),但这需要设置标记。Ctrl+U工作方式不同。\Cu或者\C-u不能只是替换\eW(下面的代码)。

这是什么在 bash 和 X11 之间共享剪贴板建议。

if [[ -n $DISPLAY ]]; then
  copy_line_to_x_clipboard () {
    printf %s "$READLINE_LINE" | xsel -ib
  }
  bind -x '"\eW": copy_line_to_x_clipboard'
fi

所以问题是:如何在 bash 中添加Ctrl+U将其剪切到 Xorg 的鼠标(中键单击)粘贴缓冲区的文本?

答案1

您的函数会将行复制到剪贴板。

要使用鼠标粘贴缓冲区而不是 Ctrl+C/Ctrl+V 剪贴板,请xsel在不使用该-b选项的情况下运行。

要剪切而不是复制,请随后删除文本:设置READLINE_LINE为空字符串。

Bash 提供的终端设置stty优先于它自己的键绑定。我猜其目的主要是遵守终端的设置BackSpace 是否发送^H^?,但更一般地说,这意味着默认情况下不会使用bash 列出的所有字符stty -a(即^C^D^H^Q^S^W^Z和)的键绑定。您需要取消要重新绑定的控制字符的 stty 设置。^\^?

~/.bashrc这对我来说适用于 Ubuntu 16.04 上的 bash 4.3 中的以下代码。

if [[ -n $DISPLAY ]]; then
  stty kill ''
  copy_line_to_x_clipboard() {
    printf %s "$READLINE_LINE" | xsel -i;
    READLINE_LINE= READLINE_POINT=0
  };
  bind -x '"\C-u": copy_line_to_x_clipboard';
fi

如果我只是将其粘贴到命令行中,它就不起作用:我得到了您在评论中提到的效果,即按^Uinserts aliteral ^U。如果我运行stty kill '', 然后bind -x …在后续命令中运行,它就会起作用。

相关内容