Zsh'ın kesim arabelleğini X panosuna entegre etmek istiyordum. Yukarıda belirtilen http://stchaz.free.fr/mouse.zsh denedim ama tüm Zsh işlemleri panoya doldurmak sevmediğim bulundu. Örneğin, bazen bir tarayıcıda bir şey kopyalayıp bir kabuğa gidip komut satırını düzenleyip yapıştırırdım. Ancak genellikle komut satırını düzenlemek - örneğin bir sözcüğü silmek - Zsh kesme arabelleğini değiştirir. Daha iyisi ya da daha kötüsü, X'in sadece bir öldürme halkası değil, bir panosu var, bu yüzden bir Zsh düzenleme işlemi panonun üzerine yazdığında, yapıştırmak istediğim şey kayboluyor - yapabildiğim gibi yank-pop yapamam (Cy My) Zsh veya Emacs yapın.
Bunun yerine ne yaptım zsh aracılığıyla X pano ile etkileşim için yeni özel tuş bağlamaları oluşturmaktır. "^ Xw" ve "^ Xy" ifadelerinin hem Emacs hem de Zsh'da kullanılmadığı ortaya çıktı, böylece her iki uygulamada da bağlayarak tutarlı bir arayüz elde edebilirim. Bu şekilde normal düzenleme işlemleri, kesici ve öldürme halkası tek başına bırakılır. Panoya bir şey kopyalamak istiyorsam bölgeyi ayarlıyorum ve "^ Xw" yapıyorum (ya da daha önce öldürdüysem ve bölge aktif değilse, kesim arabelleğini kopyalamak için "^ Xw" yapabilirim). Panodan yapıştırma "^ Xy" ile yapılır.
# 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
ilevi-delete
veyank
ilevi-put-after
Benzer şekilde sarın vbvi-yank
, ve diğerleri. (Daha merkezi bir şekilde yapmanın bir yolunu bulamadım)