मैं टाइपिंग पत्रों से अधिक टैब पूर्णता का उपयोग करता हूं। मैं टाइप करता था rm ~/De<TAB>
और इसे पूरा किया जाएगा rm ~/Desktop/
ताकि मैं अगले स्तर पर रह सकूं।
हाल ही में, वह व्यवहार बदल गया। पूर्ण होने पर अब पैदावार होती है rm ~/Desktop<SPACE>
, जिसका अर्थ है कि यदि मुझे जारी रखना है तो मुझे बैकस्पेस और स्लैश टाइप करना होगा। इससे मुझे रोना आ रहा है।
इन परिवर्तनों को फ़ंक्शन _longopt()
में स्थित होना प्रतीत होता है /etc/bash_completion
, हालाँकि यह उतना ही है जितना मैं अनुसरण कर सकता हूं। क्या यह परिवर्तन जानबूझकर किया गया है, और यदि ऐसा है, तो इसके लिए क्या अच्छा है? क्या मैं पुराने व्यवहार को वापस ले सकता हूं, अधिमानतः किसी अन्य सिस्टम से पुराने कोड को कॉपी करने के बजाय एक कॉन्फिगर विकल्प द्वारा?
संपादित करें: संदर्भ के लिए फ़ंक्शन।
_longopt()
{
local cur prev split=false
_get_comp_words_by_ref -n = cur prev
_split_longopt && split=true
case "$prev" in
--*[Dd][Ii][Rr]*)
_filedir -d
return 0
;;
--*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
_filedir
return 0
;;
esac
$split && return 0
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
-- "$cur" ) )
elif [[ "$1" == @(mk|rm)dir ]]; then
_filedir -d
else
_filedir
fi
}
_longopt()
फंक्शन की बॉडी पोस्ट कर सकते हैं ?
readline
सेटिंग्स पर निर्भर करता है (आपके पास एक ~/inputrc
फ़ाइल है?) और इस तथ्य पर कि आइटम एक वास्तविक निर्देशिका है या एक निर्देशिका के लिए एक सहानुभूति है।
.inputrc
इस प्रणाली पर अब और नहीं है। (वे दिन थे, बैकस्पेस और कर्सर कुंजियों को ठीक करना ...) और यह सभी तत्वों, निर्देशिका या फ़ाइल, सिमलिंक या नहीं के लिए होता है।
rmdir
, जैसेmkdir
या नहींtouch
।