設定フラグを使用せずに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にテキストを追加し、CtrlXorgUのマウス(中央クリック)ペーストバッファに切り取る方法は何ですか?

答え1

関数はその行をクリップボードにコピーします。

Ctrl + C / Ctrl + Vクリップボードの代わりにマウスペーストバッファを使用するには、xselこの-bオプションなしで実行してください。

コピーせずに切り取るには、後でテキストを削除してください。READLINE_LINE空の文字列に設定してください。

Bashが提供する端末設定は、stty独自のキーバインディングよりも優先されます。私は主に端末の設定を尊重することが目的だと思います。BackSpaceを送信^Hする^?stty -aしかし、より一般的には、これはbashにリストされているすべての文字(たとえば、、、、、、、および)の^Cキー^Dバインディング^Hがデフォルトで使用されていないことを意味します。リバインドする制御文字のsttyを設定解除する必要があります。^Q^S^W^Z^\^?

~/.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 …を実行すると機能します。

関連情報