平衡点


2014/08/23

_ tmux の設定(1/n)

始めに

今更ですが GNU Screen から tmux へ移行しました.

移行できなかった最大の理由は, 古いサーバでのエンコーディング. 未だに UTF-8 じゃないサーバで作業する必要があったりして, screen では window ごとに

# encoding の切りかえ
bind 'U' eval "encoding utf8" "stuff 'export LANG=ja_JP.UTF-8\012'"
bind 'u' eval "encoding utf8" "stuff 'export LANG=ja_JP.UTF-8\012'"
bind 'E' eval "encoding euc" "stuff 'export LANG=ja_JP.eucJP\012'"
bind 'e' eval "encoding euc" "stuff 'export LANG=ja_JP.eucJP\012'"
# term の切り替え
bind 'X' eval "term xterm-256color" "stuff 'export TERM=xterm\012'"
bind 'S' eval "term screen-256color-bce" "stuff 'export TERM=screen-256color-bce\012'"

なんて事をしていました.

もはやそういうサーバも少なくなったので(まだあるんですが), 弄れる所は全部 tmux にしてしまおうかな, という気持で気軽に乗り換えてみたらだいぶハマったので, 書いておきます.

ambiguous width characters

UTF-8 環境でターミナル上で日本語を表示する際に嵌るのは ambiguous width characters ですよね? 実際, tmux を設定してみたら emacs on tmux の SKK が酷い事になりました *1

というわけで, じたばたしてみたり

tumx は UTF-8の文字列の文字幅について独自のテーブルを持っています. なので対応としては

もしくは fumiyas/wcwidth-cjk で 2 文字幅にする

とします.

システムの locale を弄るのはちょっと抵抗があるので, fumiyas/wcwidth-cjk をありがたく使わせて頂くことにしました.

tmux の修正

tmux の修正は PKGBUILD/tmux at master - silenvx/PKGBUILD にあるパッチを使わせて頂きました.

  • Debian のソースパッケージを持ってきて
  • quilt impot で patch を取り込んで
  • dch -ndebian/changelog 修正して
  • debuild -rfakeroot -uc -us -tc

できたパッケージを修正しておしまい, です.

wcwidth-cjk

fumiyas/wcwidth-cjk 参照のこと. 私は /usr/local/stow 以下に install して管理してます.

  • git clone https://github.com/fumiyas/wcwidth-cjk && cd wcwith-cjk
  • make && make install prefix=/usr/local/stow/wcwidth-cjk
  • cd /usr/local/stow && stow wcwidth-cjk

でおしまいです. あとは tmuxwcwidth-cjk 経由で起動すれば良いです.

aptitudealsamixer の罫線が気になるでしょうから, tmux の設定ファイルには

set-environment -g NCURSES_NO_UTF8_ACS 0

を追記しておくと良いでしょう *2

sticky weechat

Screen の時の様に 常に画面の下に weechat を表示させておきたいのですが, tmux には sticky pane みたいな概念がありません.

を参考に, 適当な shell script をでっちあげてみました.

# source: sh
 #! /bin/sh
 tmp=$HOME/.tmux/weechat.tmp
 current_weechat_window=`tmux lsp -a -F "#I: #T" | grep weechat | cut -d":" -f 1`
 current_weechat_pane=`tmux lsp -a -F "#P: #T" | grep weechat | cut -d":" -f 1`
 current_active_window=`tmux lsw | grep active | cut -d":" -f 1`
 current_active_pane=`tmux lsp | grep active | cut -d":" -f 1`

 if [ ${current_weechat_window} -ne ${current_active_window} ] ; then
     tmux join-pane -l 12 -s :${current_weechat_window}.${current_weechat_pane} -t :${current_active_window}
     tmux select-pane -t 0
 else
     if [ -e $tmp ] ; then
         tmux resize-pane -t ${current_weechat_pane} -Z
         rm -f $tmp
     else
         tmux resize-pane -t ${current_weechat_pane} -Z
         tmux select-pane -t 0
         touch $tmp
     fi
 fi

これを適当なキーにバインドしておくと,

  • 今いる window に weechat の pane を持ってくる
  • 同じキーで, 全画面と下部はりつきを toggle する

なんて事ができるようになります. 私は - にバインドして, weechat の表示をトグルしてます.

そんなこんなで

まだ慣れてないので, 今後もジタバタすると思いますが, weechat の表示が全然崩れないので, だいぶ満足度が上がりました.

次は tmuxinator/tmuxinator あたりの設定ですかね...

参考文献

*1 まわりの人々はそんな事が無いみたいで, ちょっと悲しいのですが. なんでかなぁ...

*2  aptitude 用に /etc/sudoers に Defaults> env_keep = NCURSES_NO_UTF8_ACS を追加していたりします.


連絡先など
最近の日記
一覧
Back to Top ▲