tput – 端末入力で遊ぶ

wget のプログレスバーや, lynx, w3m などの CUI ブラウザ、NetHack などの CUI ゲームなどのように、CUI 画面内の一部だけを動的に書き換える、という処理を実装する方法をメモしておきます。
 
基本として、CUI の描画方法を制御するには特定のキーコードに割り当てられている画面描画の処理命令を利用します。
標準出力に出力された時点で命令が実行されるので、制御コードを知ってさえいれば echo だけで画面描画が実現できてしまいます。次のように入力すると画面をクリアします。

$ echo \


capname については man terminfo の Cap-Name を参照。
例:

% zmodload zsh/terminfo
% echoti setaf 2
% echo Hello,world
Hello,world

参考: http://d.hatena.ne.jp/lurker/20061121
 
・tput
zsh 以外のシェルからでも使える汎用プログラム。Curses や NCurses に含まれています。なお、FreeBSD に最初から含まれている /usr/bin/tput は Curses 版です。
Curses 版の書式 (FreeBSDなど):

$ tput <TCapCode> [ 引数… ]

TCapCode については man termcap の TCapCode を参照。
 
NCurses 版の書式 (FreeBSD ports や Linux など):

$ tput <CapName>

CapName については man terminfo の Cap-Name を参照。
curses よりこちらのほうが一般的です。

curses tput の例:
15 行 20 文字目に文字列 OK を書き込む。

$ tput sc; tput cm 20 15; tput al;echo OK; tput rc

文字に下線を入れる

$ tput us ; echo hello; tput ue

Ncurses tput の例:
文字の色を赤に。

$ tput setaf 1

白に戻す。

$ tput setaf 9

参考: http://www.ibm.com/developerworks/jp/linux/aix/library/au-learningtput/index.html