03/11/20 17:54
screen のスレを読んでいて、以前 >>486 を書いたものの結局使わなかったなと思いつつ、
よく考えたら screen 内で動いている zsh を前提にすれば話が簡単だということに気付いた。
こんな感じでどうでしょう。
#
# $ZDOTDIR/.zsh/dabbrev
#
HARDCOPYFILE=$HOME/tmp/screen-hardcopy
touch $HARDCOPYFILE
dabbrev-complete () {
local reply lines=100
# screen -X eval "hardcopy -h $HARDCOPYFILE" # scrollback buffer の内容も含む場合
screen -X eval "hardcopy $HARDCOPYFILE"
reply=($(sed '/^$/d' $HARDCOPYFILE | sed '$ d' | tail -$lines))
compadd - "${reply[@]%[*/=@|]}"
}
zle -C dabbrev-complete menu-complete dabbrev-complete
bindkey '^[/' dabbrev-complete
bindkey '^[^_' reverse-menu-complete
あとは .zshrc に例えばこんな風に書いておけばいいか。
if [[ -n $WINDOW ]]; then
source $ZDOTDIR/.zsh/dabbrev
fi
scrollback buffer の内容も利用する場合は、適当に行数を増やした方がいいでしょうね