Bash on Windows のtmux+emacsでクリップボードでコピペ

Bash on Windowsでemacsを使ってますが、emacsのyank(Ctrl+wとか)とTerminal(urxvt)やWindows側とクリップボードが共有できなく困っていました。

デフォルトの状態は、WindowsのクリップボードはBoWへ共有できていて、

  • Windowsでコピーしたものをurxvtへ貼り付けは「Shift+Ins」で貼り付けできる
  • urxvtでマウス選択したものはWidndowsで「Ctrl+v」で貼り付けできる

できないのは、

  • urxvt上のemacsのyank(Ctrl+w)とかが、Windowsやurxvt上のbashなどに貼り付けれない

です。

ちなみに、私のemacsはurxvt上で動かすemacs-nox版です。GUI版はこの悩みは起きないかもしれません。

なくてもこまらないけど使いにくいので、やり方を調べました。

こちらも参照ください。

xselをインストールする

xselはクリップボードを操作するコマンドです。インストールは下記です。

[~] $ sudo apt install xsel

emacsの設定

init.elへ書きを追加します。

;; クリップボードと同期
(setq interprogram-paste-function
      (lambda ()
    (shell-command-to-string "xsel -b -o")))
(setq interprogram-cut-function
      (lambda (text &optional rest)
    (let* ((process-connection-type nil)
           (proc (start-process "xsel" "*Messages*" "xsel" "-b" "-i")))
      (process-send-string proc text)
                 (process-send-eof proc))))

これで、emacs上でCtrl+wやM-wした文字列をWindowsやurxvt上に貼り付けれるように、逆のパターンもできるようになりました。

tmuxだとこれでも駄目

tmuxを使っている状態でemacsを動かすとemacsのCtrl+wとかM-wの結果がurxvtのbashに貼り付けれません。

tmux側の設定を変える必要があります。tmux.confに書きを加えます。

# for emacs
unbind -t emacs-copy M-w
unbind -t emacs-copy C-w
bind-key -t emacs-copy M-w copy-pipe "xsel -bi"
bind-key -t emacs-copy C-w copy-pipe "xsel -bi"

これで大まか大丈夫ですが、urxvt上でマウス選択した文字列がemacsのCtrl+yで貼り付けれません。Shift+Insで貼り付けることはできるて、emacs、urxvt、Windows間をコピペできるようになったので、とりあえずここまでにします。
上記はできるようになっていました。

環境構築まとめ記事へのリンク

Bash on Windows の他のネタを纏めています。参考になれば嬉しいです。

↓↓↓環境構築まとめページはこちら↓↓↓
【保存版】Bash on Windowsの環境構築のまとめ

シェアする

  • このエントリーをはてなブックマークに追加

フォローする