Slip Ahead Logging

It's not your fault at all.

tmux を zsh からワンキーで起動したい

tmux を zsh からワンキーで起動したいなと思い,単純に tmux を起動する zle widget を定義した.

function tmux-attach() {
    { tmux list-sessions >& /dev/null && tmux attach } || tmux
}
zle -N tmux-attach
bindkey '^T' tmux-attach

しかし,これを zsh 上で Ctrl+t を押して起動しようとすると,

tmux: not a terminal

というエラーが発生して動かない.

zle の widget 中からエディタを起動する際のテクニックにexec < /dev/tty として widget の中で起動されるプログラムに tty を割り当てる(ユーザのキー入力がきちんとエディタに渡るようにしてあげる)方法があることを思い出し試してみるも,tmux に対しては有効ではなかった.

exec < /dev/tty Reassigns standard input back to the keyboard

http://www.ahinc.com/aix/kornsh.htm

あまり時間もかけていられないので,ひとまずは zsh のコマンドラインに直接 tmux コマンドを流し込んだあとでコマンドを実行するという,いかにもキーボードマクロ的でダサい方式でしのぐことに.

コマンドの実行履歴に { tmux list-sessions >& /dev/null && tmux attach } || tmux が残ってしまうという問題があるので*1,もっとスマートな方法が知りたいところ.

追記

考えてみれば zsh デフォルトの run-help (Alt+h に割り当てられている) も同様のことをやっていて,こちらも履歴には「run-help 該当コマンド名」が残る.これで問題ないということだろうか.

*1:hist_ignore_space オプションを設定している方であればこの問題は発生しない