また、peep-mac-tmux というコマンドを作って pid の指定を省略しました。
ですが、 peep-mac-tmux を使う際、上手く動いてくれないパターンがいくつか出てきました。
具体的には以下のようなパターンです。
- '&&' で繋がれたコマンド
- peep するのは実行中のコマンドなので、途中のコマンドが終了すると通知してしまう
- `xargs -L1` のように何度も子プロセスを生成するコマンド
- 1つの子プロセスが終わった時に通知してしまう
そこで、zsh の機能である zle を使い、これらのパターンの時に括弧で括って実行するようにしました。
丸括弧で括ってあると subshell 内部でコマンドが実行されます。
なので、peep は subshell の pid を peep する事で適切に動作させる狙いです。
環境
- OS: macOS Mojave 10.14.6
- Homebrew: 2.1.16-38-ge2c76cc
- Homebrew/homebrew-core: (git revision 0f36; last commit 2019-11-09)
- zsh: 5.7.1 (x86_64-apple-darwin18.2.0)
zle とは
zsh command line editor という機能で、man zshzle すると詳細が見られます。
コマンドを実行する際に編集したい、という要望は既に存在していて、そこで使われていたのが zle でした。
今回の場合、'&&' が含まれる or '|' が含まれる、という時に括弧を追加することにします。
そうして作成したのが以下の call-subshell です。
安直に、egrep で特定の pattern がある時、 BUFFER という vairable を編集する事で追加します。
これで peep-mac-tmux の指定もやりやすくなりました。
これで peep-mac-tmux の指定もやりやすくなりました。
無限に増える括弧
さて、peep-mac-tmux しやすくなりました、万歳、とはいかないようです。
この定義ではパターンが含まれるコマンドに、() を追加するので、後のコマンドにもパターンが含まれる。
なので、履歴からコマンドを呼び出すと括弧が増え続けます。これは困る。
そこで括弧が重複しないようにしたのが以下の call-subshell です。
そこで括弧が重複しないようにしたのが以下の call-subshell です。
一応、前後に空白があった場合にも対応しています。
これで良し。
これで良し。
まとめ
zle を使うとコマンドを編集できて便利、というお話でした。
ちなみにオチとしては、
- peep が上手くいくメリット < () がある事で誤爆したりするデメリット
と感じたので、作成して2ヶ月くらいで消してしまいました。
0 件のコメント:
コメントを投稿