日記です.
Macだとデスクトップのカスタマイズに制限がありすぎて、デスクトップの右上(ステータスメニューみたいなところ)に好きな文字列を表示させるのすらつらい. ターミナルならいつも開いているので、その中に表示させることにする. ターミナルの中で GNU screen を開いてその中で zsh がいつも起動している. GNU screen の表示は必要最小限にすると決めているので zsh の中に表示することにする. となるとプロンプトをいじる. zsh のプロンプトには普通の PROMPT
と、右端に寄せて表示してくれる RPROMPT
とがある. わたしは RPROMPT
は使ってこなかった. 理由としては、ごちゃごちゃさせたくないのと、ターミナルの上でテキストコピーさせると、 RPROMPT
が表示されていると、大量に並んだスペース記号のあとに PROMPT
の中身まで一緒にコピーされてしまうから.
そこでタイトルのようにする. 見たいときだけ C-o
で一時的に表示してすぐ消すという使い方ができる.
書いてて本当に便利なのか疑問が生じてきた. 一週間くらい使ってみて感想を書きます.
以下コード
# .zshrc
rprompt-toggle() {
if [ -z "$RPROMPT" ]; then
TWITTER=$( cat ~/.twurlrc | grep -A 1 default_profile | tail -1 | sed 's/ *- *//g' ) # ログインしてるアカウント
RPROMPT="@$TWITTER"
else
RPROMPT=
fi
zle reset-prompt
}
zle -N rprompt-toggle
bindkey "^O" rprompt-toggle
上に書いたのはやっぱ不便そう.消すのを忘れたままコマンドを実行したりすると、表示が残るのが嫌だ. あと、zsh を起動したてだと C-o
押しても RPROMPT が表示されない. reset-prompt
が効いてないように見える.
というわけで、表示する箇所はただ一箇所なのがいい. 幸運にも私は基本的にいつも GNU screen を使っていて、一番したの行のステータスライン、つまり hardstatusline をいつも表示させている. いつもはここには、開いているウィンドウの番号の名前の一覧を並べてるだけだが、この右端に、任意の文字列を表示させるための小窓を設けることにする.
# .screenrc
# before
hardstatus alwayslastline '%-w%{=b dR}%n %t%{-}%+w`
# after
hardstatus alwayslastline '%-w%{=b dR}%n %t%{-}%+w%=%1`'
%=
はめいっぱい広げるためのスペーサー. %1`
が今回追加した部分. いわば小窓であるが、backtick という screen の機能.
backtick の 1番を登録する
# .screenrc
backtick 1 0 2 bash -c "[ -f /tmp/screen.memo.txt ] && tail -1 /tmp/screen.memo.txt"
このコマンドは次のように読む. 「backtick の 1番を登録する. 起動してから 0 秒後に 2 秒毎に次のコマンドを実行する. bach -c "..."
.」
というわけで、 /tmp/screen.memo.txt
というファイルが存在すれば、その一番最後の行を出力する.
ここからは zsh の設定.
# .zshrc
toggle-screen-memo() {
FILE=/tmp/screen.memo.txt
if [ -f $FILE ]; then
rm $FILE
else
TWITTER=$( cat ~/.twurlrc | grep -A 1 default_profile | tail -1 | sed 's/ *- *//g' )
echo "@$TWITTER" > /tmp/screen.memo.txt
fi
}
zle -N toggle-screen-memo
bindkey "^O" toggle-screen-memo
C-o
を押すと、表示させたいものを /tmp/screen.memo.txt
に書き込むか、または消す (トグル式). ただしこれは zsh のプロンプト待機状態でしか発動しない. この処理も GNU screen 側でやって、任意のタイミングで発動させたいが、やり方がわからない.