BashとX11の間でクリップボードを共有する

BashとX11の間でクリップボードを共有する

存在するこのスレッド上の答えは、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

シェルで素敵な作業を行うには、ラインエディタとスクリプト言語の統合をより良い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長さは2文字を超えることはできません。私はbash 4.2がより長いプレフィックスのいくつかのケースを修正したと思いますが、まだ詳細を調べていません。

おすすめ記事