mlterm<->Xでの快適コピペ環境

PCの中では、当然Emacsが鎮座しているのですが、その他にもいろいろと立ちあげていまして、その中の一つがzsh on tmux on mlterm(ややこしい)です。 一時期、シェルもEmacsだろとか考えていた時期もありましたが、やはりzsh便利すぎなので、結局zshに落ちついています。
ただ、ここで困っていたのが、mltermとX上のアプリ間でのコピペでした。 うまくできなかったり、できたとしてもマウスを使わないとできなかったりとか悲しいことばかりです。
コピペを使わない人がいるはずもなく、先人達もいろいろと提案されています。
X環境のクリップボードやOS Xのペーストボードとtmuxのバッファを連携する方法 – Dマイナー志向
tmux のコピーモードを使ってみる – ようへいの日々精進 XP
ただ、どれも少し手間がかかります。コピペなどしょっちゅうする作業なので、あまり手間はかけたくないものです。
というわけで、マウスレスで手間のかからないコピペ環境をmlterm(上のtmux)<->Xで作ってみたので紹介します。
X->mlterm (mltermの設定)
~/.mlterm/key に次のように書いておけばCtl+y でPRIMARYの内容をmltermにペーストすることができます。
# Ctl+y で PRIMARY の内容をペーストする Control+y=INSERT_SELECTION
mlterm->X (tmux, mltermの設定)
tmuxにはもともとcopy-modeが備わっています。このcopy-modeを使えば、マウスレスなコピペが可能になるはずです。
ただ、コピーした内容をX環境にも伝播させる必要があります。これにはmltermが対応している制御シーケンスのOSC52を使うこととします。
リモートの tmux でコピーした内容のローカルのクリップボードへの反映 | doda’s blog
.tmux.confには次のように書いておきます。
#コピーモードのキーバインドを設定 bind y copy-mode # OSC52に対応させる set-option -ag terminal-overrides ",mlterm:Ms=\\E]52;%p1%s;%p2%s\\7"
~/.mlterm/mainにも次のように書いておきます
##OSC52に対応させる allow_osc52=true
これで、tmuxのコピーモードでコピーした内容がクリップボードにも渡されます。
PRIMARYをCLIPBOARDと同期させる
X環境はコピペのためにPRIMARY、SECONDARY、CLIPBOARDと3つもバッファを持っています。mltermはPRIMARYしか使っていないのですが、PRIMARYはペーストに中クリックしか使えなかったり不便極まりないので、CLIPBOARDにもその内容を同期させます。
同期には autocutsel
というツールを使います。
debianやArchLinuxではパッケージになっているようですので、比較的簡単に導入できるかと思います。
インストールが完了したら、.xinitrcあたりに以下のように書いといて autocutsel
による同期が自動的に始まるようにしておきます。
if [ -x /usr/bin/autocutsel ]; then autocutsel -selection CLIPBOARD -fork autocutsel -selection PRIMARY -fork fi
これでまたひとつマウスが文鎮に近づきました。
Appendix:Emacsとクリップボードバッファ
EmacsでPRIMARY、CLIPBOARDにコピーするには次のようにしておくと良いみたいですよ。
(setq x-select-enable-clipboard t) (setq x-select-enable-primary t))
-
前の記事
Org-modeのディレクトリへのリンクをDiredで開きたい 2014.04.21
-
次の記事
設定したキーバインドをHelmインターフェイスで見るhelm-bind-key 2014.10.12