平衡点
2014/08/22
_ less の syntax highlight に pygments を使う
今迄は GNU Source-highlight を使っていたのだけれども, 試しに Pygments を使ってみたら 予想以上に良い感じだったので, のりかえてみた.
やった事は単純で pygmentize-lessfilter を
# source: sh
#!/bin/sh
if [ "$?" -eq "0" ]; then
pygmentize -g -O "style=native,encoding=$(nkf -g $1)" $1 | nkf -w
else
exit 1
fi
なんて作成しておいて, ~/.zshrc で
# source: sh
LESSCHARSET=utf8
LESS='-R'
if ( whence pygmentize >/dev/null ) && ( whence nkf > /dev/null ) ; then
LESSOPEN="| pygmentize-lessfilter %s"
fi
としただけ.
最初は LESSOPEN で nkf -w 通して pygmentize に直接渡そうと考えてみたのだけれど, ファイル名が無いと syntax highlight する言語の判定に失敗することがあって, 結局別スクリプトにしてみた.
結構綺麗で良いと思う. 出力結果をカスタマイズしたいなら, 適当に style を書いたら良いかと.
似た様な話→ man をカラフルに
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 が酷い事になりました
というわけで, じたばたしてみたり
tumx は UTF-8の文字列の文字幅について独自のテーブルを持っています. なので対応としては
- tmux を wcwidth を見に行くように修正する
- locale の修正: 曖昧文字幅を 2 に決め打ちする,
もしくは fumiyas/wcwidth-cjk で 2 文字幅にする
とします.
システムの locale を弄るのはちょっと抵抗があるので, fumiyas/wcwidth-cjk をありがたく使わせて頂くことにしました.
tmux の修正
tmux の修正は PKGBUILD/tmux at master - silenvx/PKGBUILD にあるパッチを使わせて頂きました.
- Debian のソースパッケージを持ってきて
- quilt impot で patch を取り込んで
- dch -n で debian/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
でおしまいです. あとは tmux を wcwidth-cjk 経由で起動すれば良いです.
aptitude や alsamixer の罫線が気になるでしょうから, tmux の設定ファイルには
set-environment -g NCURSES_NO_UTF8_ACS 0
を追記しておくと良いでしょう
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 あたりの設定ですかね...