fish - rangerの多重起動を避ける設定
rangerというCLIのファイラがあるのを知って最近使っている。
参考: CLI で Linux ファイルマネージャ ranger を使うことのメモ
Macならbrew install ranger
で入る。homebrewほんと便利。
そんなrangerの設定というかカスタマイズで「多重起動を避ける」というのがある。
上記の参考サイトではrangerの多重起動を避けるという項目で説明されている。
ここで書かれている設定はbash/zsh向けなので、fishの場合の書き方をメモ。
rangerの多重起動を避ける
ranger() { [ -n "$RANGER_LEVEL" ] && exit || command ranger "$@"; }
fishでは次の定義を~/.config/fish/config.fish
に定義する。
(~/.config/fish/functions/
配下にファイルを作っても良いんだろうけど)
# ranger->サブシェル->rangerの多重起動を避ける function ranger if set -q -x RANGER_LEVEL exit else command ranger $argv end end
参考サイトにある通りRANGER_LEVEL
変数が定義されていればexitして、それ以外(初回)なら普通にrangerを起動する。
注意としてはサブシェルからranger /tmp
のように引数有りで起動してもexit
して元のrangerに戻るだけなので、引数で渡したディレクトリで起動しない。
rangerのサブシェルの場合はプロンプトに表示
[ -n "$RANGER_LEVEL" ] && PS1="(RANGER) $PS1"
fishでは次の定義を~/.config/fish/config.fish
に定義する。
(~/.config/fish/functions/
配下にファイルを作っても良いんだろうけど)
# rangerのサブシェルから起動された場合はpromptを変更する if set -q -x RANGER_LEVEL set -g _origin_prompt (fish_prompt) function fish_prompt echo "(RANGER)$_origin_prompt" end end
- 上記と同じように
RANGER_LEVEL
が設定されているかどうかで、通常のシェルかrangerサブシェルかを判断 (fish_prompt)
の実行結果、つまり既存のプロンプト表示を変数に保持する-g
でグローバル定義にしないとfish_prompt
関数から見れなかった。ちょっと気持ち悪い
fish_prompt
を再定義する
これで↓のように(RANGER)
が付いた状態でプロンプトが表示される。
(RANGER) ~/.config/fish ⟩