Eu queria integrar o buffer de corte do Zsh à área de transferência do X. Tentei o http://stchaz.free.fr/mouse.zsh acima mencionado, mas descobri que não gostava de todas as minhas operações Zsh preencherem a área de transferência. Por exemplo, às vezes eu copiava algo em um navegador e, em seguida, acessava um shell, editava a linha de comando e colava. Mas frequentemente editar a linha de comando - excluindo uma palavra, por exemplo - modifica o buffer de corte Zsh. Para o bem ou para o mal, o X apenas possui uma área de transferência, não um anel de extermínio; portanto, quando uma operação de edição do Zsh sobrescreve a área de transferência, o que eu queria colar é perdido - não consigo puxar (Cy My) como pude faça no Zsh ou no Emacs.
Então, o que fiz foi criar novas combinações de teclas especiais para interagir com a área de transferência do X através do zsh. Acontece que "^ Xw" e "^ Xy" não são usados no Emacs e no Zsh, para que eu possa obter uma interface consistente vinculando-os nos dois aplicativos. Dessa forma, as operações normais de edição, cutbuffer e kill ring são deixadas em paz. Se quiser copiar algo para a área de transferência, defino a região e faço "^ Xw" (ou se já o matei e a região está inativa, basta fazer "^ Xw" para copiar o buffer de corte). A colagem da área de transferência é feita com "^ Xy".
# define commands to copy and paste x clipboard
# ^Xw - copy region, or cut buffer
# ^Xy - paste x clipboard
# in both cases, modifies CUTBUFFER
copy-to-xclip() {
[[ "$REGION_ACTIVE" -ne 0 ]] && zle copy-region-as-kill
print -rn -- $CUTBUFFER | xclip -selection clipboard -i
}
zle -N copy-to-xclip
bindkey "^Xw" copy-to-xclip
paste-xclip() {
killring=("$CUTBUFFER" "${(@)killring[1,-2]}")
CUTBUFFER=$(xclip -selection clipboard -o)
zle yank
}
zle -N paste-xclip
bindkey "^Xy" paste-xclip
kill-region
porvi-delete
eyank
comvi-put-after
etc. Da mesma formavi-yank
, envolva e outros. (Eu não encontrei uma maneira de fazê-lo mais centralmente)