LoginSignup
0
1

More than 5 years have passed since last update.

fuzzy finderのイディオム(?) : Self list-select-do

Last updated at Posted at 2019-02-01

fuzzy finderの便利な使い方

...だと思う定型をメモしますが、イディオムというほどのものじゃない(本来用途なだけ)気はします。

同一コマンドのリスト出力を入力引数に転用するパターン、と言えるかなと。

getignore

getignore-select.sh
#!/bin/sh
# need backslash escape? ... currently not use backslash
if which fzf >/dev/null 2>&1; then
  getignore list | fzf -m --prompt="gitignore\\> " | xargs -r getignore get
elif which peco >/dev/null 2>&1; then
  getignore list | peco   --prompt="gitignore\\> " | xargs -r getignore get
else
  echo "selector not found"
fi

getignore はオンラインの定義を呼んできてリスト出力でき、それを指定するとgitignoreファイルの定義を出力してくれます。

gopass

gopass-select.sh
#!/bin/sh
if which fzf >/dev/null 2>&1; then
  # # use null sep
  # gopass ls --flat | fzf  --prompt="password-store > " --print0 | xargs -0 -n 1 -r gopass --clip --yes show

  # use sed escape backslash
  gopass ls --flat | fzf  --prompt="password-store\\> " | sed -e 's/\\/\\\\/' | xargs -n 1 -r gopass show -c
elif which peco >/dev/null 2>&1; then
  # use sed escape backslash
  gopass ls --flat | peco --prompt="password-store\\> " | sed -e 's/\\/\\\\/' | xargs -n 1 -r gopass show -c
else
  echo "selector not found"
fi

gopassPass: The Standard Unix Password Manager のgo実装で、Windowsでも動くもので、秘密鍵をサブフォルダに格納できるためバックスラッシュ対策しています。

要点

  • フラットなリストを出力する
    • サブコマンドリストも可
  • pecoやfzfに食わせる
    • ファイルなどなら複数選択できる場合もあるが、逆にサブコマンドは不可なのでmulti選択はoffにするand/orxargs -n 1で抑制
  • 必要な途中処理をしてから、コマンドの引数として与える
  • キャンセル時動作として 「xargs -rで引数0個で実行しない」にして、例外的な挙動を抑制
  • ファイルパスごと渡すものは、Windowsでのバックスラッシュに注意する、できればnullターミネートをxargs -0で処理するのがいいが、fzf --print0findとxargsコマンドで-print0オプションを使う理由(改) - Qiitaにあるようにfindコマンドとくらいしか連携できる例はしらないのがツラい所...
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