つらねの日記

プログラムの進捗やゲームをプレイした感想などを書き連ねる日記。

fish shellでコマンドラインスタック

前置き

zshの便利な機能にコマンドラインスタック(buffer stack)というものがある。 入力途中のコマンドを一時的に退避出来るというものだ。 zshではAlt+qに割り当てられていて、長いシェルとか書いているときに、 ちょっと確認したいことがでてきちゃった時とかにとても重宝する。

on fish

でもfishにはないみたいだった。めっちゃ不便だ…… 積み重なるqの文字の山に我慢しきれなくなったので、作った。

gist.github.com

正確に言うと、絶対誰かやってるでしょって思ってcommandline stackとかbuffer stackで検索したけど、全然出てこなかったので、作った。

その後に、ふと以下の結果が得られたので、

% bindkey | grep q
"^V" quoted-insert
"^[\"" quote-region
"^['" quote-line
"^[q" push-line

push-lineで検索したところ、dedeibel/push-line.fish がみつかった。

fish_postexec functionを関数内で生成して終わったら消すとかいうかっこよすぎる感じだった。

試してみたら、最高という感じだったのだけれども、killingを汚す&C-wとかやっちゃうと当然そっちで上書きされちゃうっていう問題が発生した。 ので自分で作ってた部分と統合して改良した。 まあグローバル変数を汚すのもどうなのだという話はあるけれど。

複数行のコマンドをスタックしようとしたらtest -nのところで怒られたので、修正しないと駄目かも。あとすごい適当にrepaintを呼んでいるので、ちゃんと正確に理解して使いたい。

Happy Fishing!!!!

2017/09/28追記

複数行でもエラーが出ないように修正した。

余談

全く関係ないんですが、hatenaの記事を書くときにリアルタイムプレビューが出来るようになったのは割と革命的ですね。パソコンの性能か、若干動作が重くなるのは難点だけど。