2014-10-23 5 views
5

मैं अपने .zshrc में कोड निम्नलिखित है:Zsh मेनू पूरा होने का कारण बनता है zle के बाद समस्याओं रीसेट-शीघ्र

TMOUT=1 
TRAPALRM() { zle reset-prompt } 

मेनू पूरा होने के मेनू से सभी वस्तुओं ट्रिगर करने के बाद छोड़कर प्रकाश डाला एक TRAPALRM चलाता के बाद गायब हो जाते हैं और नेविगेट जब मैं रखना मेनू में zsh segvaults कम समय के बाद

क्या इसके लिए कोई फिक्स या वर्कअराउंड है?

संपादित करें: zsh संस्करण 5.0.2 लिनक्स टकसाल 17

संपादित करें पर है: मैं Gentoo

+0

आप किस zsh का उपयोग कर रहे हैं? मैं पुष्टि कर सकता हूं कि चुने गए व्यक्ति के निष्पादन वाले आइटम गायब हो जाते हैं, लेकिन केवल कुछ भी चुना जाता है (उबंटू 14.04 पर zsh 5.0.5 और आर्क पर zsh 5.0.7, amd64 दोनों)। लेकिन अगर मैं टैब दबा रहा हूं, तो मुझे सेगमेंटेशन दोष नहीं मिलते हैं। तो ये दो चीजें निकटता से संबंधित नहीं हो सकती हैं। – Adaephon

+1

इसमें भी चल रहा है। क्या पूरा करने के सामान को साफ़ किए बिना स्क्रीन रीफ्रेश करने का कोई तरीका है? एक बग की तरह लगता है - क्यों पूरा होने के सामान को देखने से मंजूरी दे दी जाएगी, लेकिन फिर भी चयन योग्य हो सकता है? –

उत्तर

5

मैं इस समाधान पाया पर zsh संस्करण 5.0.7 पर एक ही बात का निरीक्षण, मूल रूप से बुला रोकने के लिए "reset- शीघ्र "जब एक मेनू चयन में:

TRAPALRM() { 
    if [ "$WIDGET" != "complete-word" ]; then 
     zle reset-prompt 
    fi 
} 

ध्यान दें कि complete-word आप के लिए अलग हो सकता है; मैंने इसे echo $WIDGET के साथ TRAPALRM कॉल में पाया।

+0

यह इसके लिए मेरे कामकाज के समान है, जो प्रत्येक समापन विजेट के लिए नया विजेट बनाना था, जो TRAPALRM को बंद कर देता है, पूरा होने वाला विजेट कहता है और फिर से TRAPALRM बदल जाता है, लेकिन यह समाधान सरल और क्लीनर लगता है – Ryba

+0

ऐसा लगता है, हालांकि, zsh 5.0.5 पर segfault का उत्पादन कर रहा है - जबकि यह 5.0.7 के साथ बेकार ढंग से काम करता है। – Drasill

0

इस समस्या का मेरा समाधान यह जानने के लिए कि क्या मेनू-चयन इस समय सक्रिय है या नहीं, यह जानने के लिए $ WIDGET और $ _lastcomp [insert] मानों को जांचना है।

autoload -U is-at-least 
TMOUT=1 
if is-at-least 5.1; then 
    # avoid menuselect to be cleared by reset-prompt 
    redraw_tmout() { 
     [ "$WIDGET" = "expand-or-complete" ] && [[ "$_lastcomp[insert]" =~ "^automenu$|^menu:" ]] || zle reset-prompt 
    } 
else 
    # evaluating $WIDGET in TMOUT may crash :(
    redraw_tmout() { zle reset-prompt } 
fi 
TRAPALRM() { redraw_tmout } 

"विस्तार या पूर्ण" "पूरा-शब्द" या कुछ और, अपने टैब कुंजी की कुंजी बाँध के आधार पर हो सकता है। इसे bindkey "^I" कमांड द्वारा चेक किया जा सकता है।

संबंधित मुद्दे