সম্পূর্ণকরণ বাতিল করুন, তবে zsh এ কেবল সম্পূর্ণ completion


13

একটি সমাপ্তির ফাংশন একটি দীর্ঘ সময় লাগে, তখন আমি এতে বাধা দেন পারেন টিপে Ctrl+ + C(টার্মিনাল বিঘ্ন কী পাঠালে SIGINT) অথবা Ctrl+ + G(বাধ্য send-break)। আমি তখন অপ্রাপ্তবাক্য শব্দটি রেখে এসেছি।

তবে, যদি আমি সমাপ্তির ফাংশন শেষ হওয়ার সাথে সাথে Ctrl+ Cবা Ctrl+ এ আঘাত করি তবে Gআমার কী প্রেসটি কমান্ড লাইনটি বাতিল করতে পারে এবং সম্পূর্ণতা বাতিল করার পরিবর্তে আমাকে একটি নতুন প্রম্পট দিতে পারে।

আমি কীভাবে zsh সেট আপ করতে পারি যাতে একটি নির্দিষ্ট কী চলমান সমাপ্তি বাতিল করে দেয় তবে কোনও সমাপ্তির ফাংশন সক্রিয় না হলে কিছুই না করে?

উত্তর:


5

এখানে একটি সমাধান রয়েছে যা একটি সিগিন্ট হ্যান্ডলার সেট আপ করে যা Ctrl+ Cসম্পূর্ণরূপে সক্রিয় থাকাকালীন শুধুমাত্র বাধা দেয়।

# A completer widget that sets a flag for the duration of
# the completion so the SIGINT handler knows whether completion
# is active. It would be better if we could check some internal
# zsh parameter to determine if completion is running, but as 
# far as I'm aware that isn't possible.
function interruptible-expand-or-complete {
    COMPLETION_ACTIVE=1

    # Bonus feature: automatically interrupt completion
    # after a three second timeout.
    # ( sleep 3; kill -INT $$ ) &!

    zle expand-or-complete

    COMPLETION_ACTIVE=0
}

# Bind our completer widget to tab.
zle -N interruptible-expand-or-complete
bindkey '^I' interruptible-expand-or-complete

# Interrupt only if completion is active.
function TRAPINT {
    if [[ $COMPLETION_ACTIVE == 1 ]]; then
        COMPLETION_ACTIVE=0
        zle -M "Completion canceled."            

        # Returning non-zero tells zsh to handle SIGINT,
        # which will interrupt the completion function. 
        return 1
    else
        # Returning zero tells zsh that we handled SIGINT;
        # don't interrupt whatever is currently running.
        return 0
    fi
}

0

আমি জানি না এটি একটি গ্রহণযোগ্য সমাধান কিনা বা না, তবে একটি সাইনস্টপ ( Ctrl+ S) প্রেরণে কাঙ্ক্ষিত প্রভাব রয়েছে বলে মনে হয়, অতিরিক্ত বেনিফিটের সাথে আপনি টাইপ করার আগে একটি সিগন্যাস্ট ( Ctrl+ Q) প্রেরণ করলে পুনরায় স্বতঃপূরণ শুরু করতে পারবেন আর কিছু. যদিও আমি চাকরি নিয়ন্ত্রণে বিশেষজ্ঞ নই, সুতরাং এটি বন্ধ হওয়া কাজের সাথে সম্পর্কিত কিছু অতিরিক্ত বিশৃঙ্খলা ছেড়ে দিতে পারে।


1
Ctrl + S এবং Ctrl + Q হ'ল ফ্লো কন্ট্রোল কমান্ড। তারা কেবলমাত্র টার্মিনালের আউটপুটকে প্রভাবিত করে, যা এখানে অপ্রাসঙ্গিক। অনুমানযোগ্যভাবে, সমাপ্তির সময় Ctrl + S এর কোনও প্রভাব নেই (zsh যাইহোক টার্মিনাল সেটিংটি অক্ষম করে, এটি কী সংমিশ্রণটি গ্র্যাব করে)। Ctrl + Z টি চাপুন (যা SIGTOP প্রেরণ করে) এর কোনও প্রভাব নেই।
গিলস 'অশুভ হওয়া বন্ধ করুন'

ধন্যবাদ! ব্যাকগ্রাউন্ডে কী চলছে তা আমি পুরোপুরি নিশ্চিত ছিলাম না। আমি যা দেখেছি তা হ'ল আমি টার্মিনালের পিছনে নিয়ন্ত্রণ পেয়েছি।
হারুন ওকানো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.