rcmdnk's blog

20190517_smenu_200_200

コマンドラインで使える選択系ツールの中でも スクロールバーが使えるというsmenuというツールについて。

semnu

標準入力やファイルの内容を単語ごとや列ごとに分けて選択できるようにしてくれるツール。

いわゆる選択系ツール。 sentakupecofzfや前回の yank のようなことが出来ます。

と同じような使い方をすることも出来ます。

このツールの特徴的なところは、表示量の制限を超えた際にスクロールバーを表示してくれる、という点。

またそれ以外にもかなり機能は豊富で、ちょっと最初に使おうとすると逆に戸惑ってしまうかもしれません。

とりあえず最初にp-gen/smenu Wiki のページを一通り見てみることと man smenuを見てみることをおすすめします。

インストール

インストールはソースをGitHubのレポジトリから取ってきてmake install

HomebrewにはFormulaは用意されてない1ので自分で用意しました。

homebrew-rcmdnkpac/smenu.rb at master · rcmdnk/homebrew-rcmdnkpac

Homebrewを使ってMacかLinuxで

$ brew install rcmdnk/rcmdnkpac/smenu

で入れることが出来ます。

使い方

smenuコマンドに選択したい一覧を 標準入力として渡すかファイル名を引数として渡します。

注意として、以下の例では選択画面の表示だけ示していますが、実は他のツールと大きく違う点として 最後に選択後、そのままでは選択されたものが出力されません。

$ X=$(... | smenu)
$ ... | smenu | ...

のように変数に代入するか次のコマンドにパイプで標準入力として渡すかしない場合は 選択したものをそのまま標準出力に出力することはしないようになっています。

20190517_smenu.jpg

何もオプションを指定しないと単語区切りにになり、そのまま並べられてカーソルキーか VimライクなVimライクなHJKLの移動などで選択します。

-Nオプションを付けることで各単語の前に数字を付け、その番号を押すことでその単語に飛ぶことも出来るようになります。

Direct access to words · p-gen/smenu Wiki

-t <N>オプションを指定することで横N列テーブル型に整形して出力することも出来ます。

Table layout · p-gen/smenu Wiki

-n <N>は縦の表示行数でデフォルトは5になってます。 この行を超える出力がある場合には右側にスクロールバーがあらわれスクロールできるようになります。

デフォルトでは選択単位はスペース、タブ、改行によって区切られますが、行ごとに選択したい場合などは -W $'\n'としてオプションで区切り文字を指定します。 この前のyankのときのPATHの中の各パスを選びたいのであれば-W :を使えばOK。

また、入力の中からあらかじめ選べるものを絞ることもでき、 -iで含めるもの、-eで除外するものを指定します。 これらには正規表現も使えます。 manを見る限りではsedで使えるような正規表現が使えるようです。

上の最後の例ではacfのいずれかの文字を含むものだけにしぼり、 除外されたものは青文字で表示され選択出来ないようになっています。

まとめ

簡単な使い方を説明しましたが、 これ以外にも/で絞り込みが出来たり 選択画面の表示をかなり自由にカスタマイズすることもできますが それらはWikiやmanを参照してみてください。

オプションが沢山あってちょっと使いには敷居が高いかもしれませんが、 シェルスクリプトなどでちょっとしたツールを作る際に 選択画面を使いたい時にこれを組み込むとちょっとかっこいい選択画面が作れるかと思います。

Sponsored Links
  1. 現状versionが0.9.15なのでnon-stable扱いでPull Requestしても入れてもらえない可能性が高い

Sponsored Links

« Linuxbrew改めHomebrew@Linuxでrelocation errorに対する対処法 GitHubで公開されてるipynbファイルをGoogle Colaboratoryで開くブックマークレット »

}