〜2012年4月中旬〜
端末のタイトルを書き換える。
曲名を表示するのはまあいいんだけど、cmusを終了すると"cmus v2.4.2"と表示したままになる。
そんな置き土産されても。gnome-terminalがcmus v2.4.2だらけになってるじゃないか。
あちこちで起動しなきゃいい話ではあるが。
tput(1)でできるかと調べてみると意外にもよくわからない。
terminfo(5)にはstatus lineについては書いてあるが、titleで検索してもヒットせず。
自分でprintf "\e]0;タイトル\007"するしかないのかな。
zshなのでprecmdとかあるがコマンドを実行するよりはプロンプトで出させちゃったほうがよさげ。
というわけでPS1の先頭に"\e]0;%3~\7"を追加した。
%3~はPWDなんだけど最後の3レベルだけという意味。
全部表示するとうっとうしいし、プロンプトもそんな感じで"%m:%2~ %# "としてるので。
twitterで話題になっていた話。一時的にdot dirを作るという方法もある。
% ls a b c % mkdir .dir % mv * .dir % mv .dir dir
findとかzshの~とかパイプで組み合わせる場合でも事前にechoさせてみたりして確認するので、
あまり複雑にするよりはいいんじゃないかな。
実はこれWindows版とLinux版の違いだったりするんだけど、Linux版は選択にはならない。
だいたいあそこをクリックするときはコピペするときなので、
デフォルトとしてはWindows版のような挙動がいいんだよねえ。
about:configしてそれらしい設定を探してみたら browser.urlbar.clickSelectsAll という、
もう正にこれしかないという名前が見つかった。
falseだったのでtrueしたらいけた。
これでURLをクリックするだけでコピーされるようになった。地味に便利だ。
タイトル表示等カーソルが動かないエスケープシーケンスがPROMPTに含まれていると、
その分の文字数だけずれるときがある。C-rするとなぜか右に飛ぶようになって変だなと思ったら、
そういうことだった。
zshだとその回りを%{と%}で囲めばいいようで。これで解決。
ああ、そういえばUbuntuのbashだと最初からタイトルがPWD的なものを表示するようになってるね。
これも後で調べよう。
/etcを探しまくっても見つからなくてどこで設定されてんだと思ったら、~/.bashrcにあった。
useradd -mでアカウントを作るともれなくついてくるようだ。/etc/skelの中身がコピーされるんだな。
って、/etcにあるじゃん。どこ探してるんだ、おれは。
で、該当するのはこれ。
case "$TERM" in xterm*|rxvt*) PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1" ;; *) ;; esac
\[から\]で囲まれたところがzshの%{と%}に相当する。
debian_chrootの部分はまあ無視してもかまわないが、
これはdebian_chrootが設定されてればその値を()つきで、そうでなければ空にする技。
単に"($debian_chroot)"では必ず()も表示されてしまうが、空や未設定のときは表示したくないとか、
そういうときに使われる。まあ、結構こういうパターンは悩む。Rubyとかでも。
\aは\007と同じ。
注意: なかださんは今までの流れを読んで、これから書く日記のネタをばらさないこと。
LD_LIBRARY_PATHの部分がまさに昨日の:+技が使えるところ。
% LD_LIBRARY_PATH="/path/to/apache/lib/${LD_LIBRARY_PATH:+:$LD_LIBARARY_PATH}" % echo $LD_LIBARARY_PATH /path/to/apache/lib/ % LD_LIBRARY_PATH="/path/to/apache/lib/${LD_LIBRARY_PATH:+:$LD_LIBARARY_PATH}" % echo $LD_LIBARARY_PATH /path/to/apache/lib/:/path/to/apache/lib/
のように初回はLD_LIBRARY_PATHが定義されてないので、空のディレクトリは追加されない。
先日のカレントディレクトリから1階層下のディレクトリへ移動させる話で、
ディレクトリがなければ作るというコマンドがあれば万事解決するわけなんだけど、
それに近いコマンドがあった。
rsyncはコピーではあるが、転送先ディレクトリがなければ作ってくれる。
そして--remove-source-filesというオプションがある。これと-aを組み合わせれば移動になる。
ただし、そううまい話はころがっていないわけで、mvとは違い挙動はコピーして削除になってしまう。
それとオプション名からもわかるとおり--remove-source-filesはディレクトリを消さない。残念。
% mkdir foo % touch a b c foo/{d,e,f} % ls -R .: a b c foo ./foo: d e f % rsync -a --remove-source-files * dir % ls -R .: dir foo ./dir: a b c foo ./dir/foo: d e f ./foo:
Rubyのun.rbにこんな挙動するコマンドを仕込んでもいいかもしれない。