pecoで柔軟に階層移動できるようにする。以前は一階層しか移動できなかったが、今回は複数階層の移動が可能。
Script Module以外にText Moduleが必要。Releases · peco/peco · GitHubからWindows版のバイナリ(peco_windows_amd64.zip)をダウンロードし、peco.exeをPPxフォルダに置いておく。
以下を編集して取込。
_Command = { folder2peco = chcp 65001 %Oi (echo ---thispath & echo .. & dir /a:d-s /b) | %0peco.exe | %0ppbw.exe -c *alias selectedpath=%%*stdin(-utf8) *return %'selectedpath' root2peco = chcp 65001 %Oi (echo ---thispath & dir /a:d-s /b) | %0peco.exe | %0ppbw.exe -c *alias selectedpath=%%*stdin(-utf8) *return %'selectedpath' move2folder = *ifmatch 0,0%*substring("%1",3) %: *string o,hoge=%*root2peco() *ifmatch !0,0%*substring("%1",3) %: *string o,hoge=%*folder2peco() *ifmatch ---thispath,%so"hoge" %: *return *jumppath %*name(DC,%so"hoge") %: *execute,*%*arg(0) }
PPcで
*move2folder %: *focus "PPB[" %: %k"ESC"
を実行する。
ポイントとか
- 試行錯誤してる間、二度くらいカスタマイザーが起動しなくなって再インスコすることになった(再現性はよくわからない)。試す方は注意を
- move2folderが本体
- folder2pecoとroot2pecoは、カレントフォルダのサブフォルダ一覧をpecoに投げ、結果を返すユーザコマンド。2つの違いは「..」を表示するか否か
- chcp 65001 で文字コードをUTF-8に
- ユーザコマンドは*test以外に%*test()の形でも使える
- linuxだと標準出力は簡単に取り出せるようだが、Windowsだと難しい(多分)。そこで、「エイリアスに格納して、returnで返す」という手続きを踏んでいる。_User:nameではなくエイリアスを使ってるのは、_User:nameだと処理速度が落ちるから(おま環かも)
- ユーザコマンド中の*%arg(0)で再帰呼び出しができる。以下はもっと単純な例
_Command = { test = *ifmatch 0,0%"何も入力しないでくだしあ><"%E %: *return *execute,*%*arg(0) }
0 件のコメント:
コメントを投稿