LoginSignup
0
1

More than 5 years have passed since last update.

素人の peco

Posted at

始めに

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

loginmanager.png

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'

cflagselector.png

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 してやれば、簡単に俺メニューが完成します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1