Chciałem zintegrować bufor cięcia Zsha ze schowkiem X. Próbowałem wyżej wspomnianego http://stchaz.free.fr/mouse.zsh, ale okazało się, że nie podobało mi się, że wszystkie moje operacje Zsh wypełniają schowek. Na przykład czasami kopiowałem coś w przeglądarce, a następnie przechodziłem do powłoki i edytowałem wiersz poleceń, a następnie wklejałem. Ale często edycja wiersza poleceń - na przykład usunięcie słowa - modyfikuje bufor cięcia Zsh. Na lepsze lub gorsze, X ma tylko schowek, a nie pierścień zabijania, więc gdy operacja edycji Zsh nadpisze schowek, rzecz, którą chciałem wkleić, zostaje utracona - nie mogę szarpać go (Cy My) tak, jak mogłem zrobić w Zsh lub Emacs.
Zamiast tego stworzyłem nowe specjalne skróty klawiszowe do interakcji ze schowkiem X poprzez Zsh. Okazuje się, że „^ Xw” i „^ Xy” są nieużywane zarówno w Emacsie, jak i Zsh, więc mogę uzyskać spójny interfejs, wiążąc je w obu aplikacjach. W ten sposób normalne operacje edycji, bufor odcinania i pierścień zabicia są pozostawione same sobie. Jeśli chcę skopiować coś do schowka, ustawiam region i robię „^ Xw” (lub jeśli już go zabiłem, a region jest nieaktywny, mogę po prostu zrobić „^ Xw”, aby skopiować bufor cięcia). Wklejanie ze schowka odbywa się za pomocą „^ 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
zevi-delete
iyank
zevi-put-after
etc. Podobnie owinąćvi-yank
i inni. (Nie znalazłem sposobu, aby zrobić to bardziej centralnie)