始めに
zsh peco でググるとすごいのが一杯でてきます。履歴検索を入力するところ (zle って言うの?) に叩き込んでカーソルを末尾に持ってくるとかすごいです。私も中身が分からないまま、コピペで使ってます。でもすごすぎて、普通の人は、こんなの自分じゃ使いこなせないって、自分なりのカスタマイズを諦めてしまうかもしれません。ということで、私がこんな程度の使い方もあるんだよと紹介することで、普通の Linux ユーザーに、勇気を与えられればと思います。ちなみに私のプログラミング力は hello.c をググらないと書けないレベルです。
peco は ログインマネージャー
漢たる Linux ユーザはグラフィカルなログインマネージャーなんて使いません。しかし毎度 startx
するのも無粋というものです。そこで、$HOME/.zprofile に
# tty1=起動直後のやつのときだけ有効
if [[ "$(tty)" == '/dev/tty1' ]]; then
# echo で出力したのを peco に流すという簡単設計
# 自分しか使わないんだから、複数選んじゃったとか、何も選ばなかったとかの例外処理
# なんて不要です。
case $(echo 'X\nTTY\nLogout\nPoweroff\nReboot' | peco) in
X)
startx -- vt7
logout
;;
Logout) logout ;;
Poweroff) sudo /sbin/poweroff ;;
Reboot) sudo /sbin/reboot ;;
esac
fi
peco は環境変数セレクタ
Linux の醍醐味は ./configure && make && make install
です。そして pgo や lto を追い求めることが更なる漢のロマンでしょう。そこで、CFLAGS や LDFLAGS などが簡単に切り替えられないといけません。
# !/bin/zsh
# echo で出力したのを peco に流すという簡単設計
i=$(echo 'pre-pgo\npost-pgo\nregular\nsafe\nlto\ncurrent'|peco --prompt "CFLAGS? > ")
# なんだかんだで、何も選ばなかったときの処理を学びました
if [ -z $i ]; then return; fi
case $i in
pre-pgo)
export CFLAGS="-march=native -O2 -ftree-vectorize -fprofile-generate=/sources/gcda -fprofile-arcs -pipe"
export CXXFLAGS=$CFLAGS
export LDFLAGS='-lgcov'
export LIBS='-lgcov'
;;
post-pgo)
export CFLAGS="-march=native -O2 -ftree-vectorize -fprofile-use=/sources/gcda -fprofile-correction -pipe"
export CXXFLAGS=$CFLAGS
unset LDFLAGS
unset LIBS
;;
lto)
export CFLAGS="-march=native -O2 -ftree-vectorize -flto -pipe"
export CXXFLAGS=$CFLAGS
unset LDFLAGS
unset LIBS
;;
regular)
export CFLAGS="-march=native -O2 -ftree-vectorize -pipe"
export CXXFLAGS=$CFLAGS
unset LDFLAGS
unset LIBS
;;
safe)
export CFLAGS="-mtune=native -O2 -ftree-vectorize -pipe"
export CXXFLAGS=$CFLAGS
unset LDFLAGS
unset LIBS
;;
current)
;;
esac
echo "CFLAGS=$CFLAGS"
echo "CXXFLAGS=$CXXFLAGS"
echo "LDFLAGS=$LDFLAGS"
echo "LIBS=$LIBS"
# 私は .zshrc に function を余り書かない派。.zshrc は短かくしたいから、基本アウトソース
alias oreflags='source ~/.local/bin/oreflags'
TTY での日本語文字化けや make
のエラーを英語で記録して何かしらのフォーラムに投稿したいときなどに向けて LANG の切り替えも重要です。
# !/bin/zsh
i=$(echo 'ja\nen\ncurrent' | peco )
[ -z $i ] && return
case $i in
ja)
export LANG=ja_JP.utf8
# break
;;
en)
export LANG=en_US
# break
;;
current)
# break
;;
esac
echo "LANG=$LANG"
まとめ
自分で決め打ちの echo
を peco
に流して case
してやれば、簡単に俺メニューが完成します。