मैं एक्स क्लिपबोर्ड के साथ ज़श के कट बफर को एकीकृत करना चाहता था। मैंने पूर्वोक्त http://stchaz.free.fr/mouse.zsh की कोशिश की, लेकिन मुझे लगा कि मुझे नापसंद है कि मेरे सभी Zsh ऑपरेशन क्लिपबोर्ड को पॉप्युलेट करते हैं। उदाहरण के लिए, कभी-कभी मैं किसी ब्राउज़र में कुछ कॉपी करता हूं, और फिर एक शेल पर जाता हूं और कमांड लाइन को संपादित करता हूं और फिर पेस्ट करता हूं। लेकिन अक्सर कमांड लाइन को संपादित करना - एक शब्द को हटाना, उदाहरण के लिए - Zsh कट बफर को संशोधित करता है। बेहतर या बदतर के लिए, X में सिर्फ एक क्लिपबोर्ड होता है, एक किल रिंग नहीं होती है, इसलिए जब एक Zsh एडिटिंग ऑपरेशन क्लिपबोर्ड को ओवरराइट कर देता है, तो जिस चीज को मैं चिपकाना चाहता था वह खो जाती है - मैं इसे नहीं कर सकता (Cy My) जैसा कि मैं कर सकता था Zsh या Emacs में करें।
तो इसके बजाय मैंने क्या किया, नए क्लिपबोर्ड के साथ zsh के माध्यम से बातचीत करने के लिए नए विशेष कीबाइंडिंग बनाएं। "^ Xw" और "^ Xy" बाहर निकलता है, दोनों Emacs और Zsh में अप्रयुक्त होते हैं, इसलिए मैं उन्हें दोनों अनुप्रयोगों में बांधकर एक सुसंगत इंटरफ़ेस प्राप्त कर सकता हूं। इस तरह से सामान्य संपादन ऑपरेशन, कटबफ़र और किल रिंग अकेले रह गए हैं। यदि मैं क्लिपबोर्ड पर कुछ कॉपी करना चाहता हूं तो मैं क्षेत्र सेट करता हूं और "^ Xw" करता हूं (या यदि मैंने पहले ही इसे मार दिया है और क्षेत्र निष्क्रिय है तो मैं कट बफर को कॉपी करने के लिए "^ Xw" बस कर सकता हूं)। क्लिपबोर्ड से पेस्ट करना "^ 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
के साथvi-delete
औरyank
साथvi-put-after
इसी तरह लपेट आदिvi-yank
दूसरों, और। (मुझे इसे और अधिक केन्द्रित करने का कोई तरीका नहीं मिला है)