素人の peco


始めに

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 などが簡単に切り替えられないといけません。

~/.local/bin/oreflags
#!/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
# 私は .zshrc に function を余り書かない派。.zshrc は短かくしたいから、基本アウトソース
alias oreflags='source ~/.local/bin/oreflags'

TTY での日本語文字化けや make のエラーを英語で記録して何かしらのフォーラムに投稿したいときなどに向けて LANG の切り替えも重要です。

~/.local/bin/orelang
#!/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"

まとめ

自分で決め打ちの echopeco に流して case してやれば、簡単に俺メニューが完成します。