読者です 読者をやめる 読者になる 読者になる

zsh + screen で端末に表示されてる文字列を補完する

以前に入力したコマンドの履歴を覚えていて補完してくれるshellはあるが、
端末に表示されている文字列を補完してくれるshellは無いだろうか。
表示されている文字列を補完してくれるshellが欲しい

vimrc diaryに書かれてたのでzsh + screenで端末に表示されてる文字列を補完する方法を。.zshrcなどに

# dabbrev
HARDCOPYFILE=$HOME/tmp/screen-hardcopy
touch $HARDCOPYFILE

dabbrev-complete () {
        local reply lines=80 # 80行分
        screen -X eval "hardcopy -h $HARDCOPYFILE"
        reply=($(sed '/^$/d' $HARDCOPYFILE | sed '$ d' | tail -$lines))
        compadd - "${reply[@]%[*/=@|]}"
}

zle -C dabbrev-complete menu-complete dabbrev-complete
bindkey '^o' dabbrev-complete
bindkey '^o^_' reverse-menu-complete

とか書いておくと端末上に表示されている画面から Ctrl + o で補完することができるようになります。findして長いパスが表示されてるけどいちいちマウスに手を伸ばしてコピペ、とかせずにすむので時たま役に立ちます。
関係ないですが、先日はてなエンジニアにzshやscreenのtipsを披露したのですが「おおすげぇ!」「もっと教えて!」みたいに周りがヨイショしてくれたので、嬉しくて自分も積極的に情報を書いていこうと思いました。そういう温度な職場の雰囲気で、とても楽しいです。