Zsh এ ব্যবহারকারীর ইনপুট একটি লাইন পড়ার ভাল উপায়? (উদাহরণস্বরূপ zle সঙ্গে?)


11

Zsh এর readকোনও কারণে এগুলিকে কীস্ট্রোক ^Mহিসাবে গ্রহণ করার পরিবর্তে প্রতিধ্বনিত করা হচ্ছে <Enter>। (যদি -dসেট করা থাকে, তবে সেগুলি <Enter>'গুলি হিসাবে স্বীকৃত তবে এখনও প্রতিধ্বনিত)) এটি ব্যাকস্পেস কী-এর মতো বেসিকগুলি সমর্থন করে না।

আমি হ্যাকিং / দৌড়ে এই কাছাকাছি যেতে পারি bash,

> a=$(bash -c 'read -e -p "What would you like to do?: " tmp; echo $tmp')
What would you like to do?: eat cake
> echo $a                                                                
eat cake

তবে আমি ভাবছি যে কোনও পরিষ্কার উপায় আছে কিনা।


একটি নতুন zsh4.3.10 ইনস্টল উপর নিশ্চিত করতে পারবেন না ; % read aএখানে ঠিক কাজ করে।
user1686

এটি ওএস এক্সে ইটার্ম ব্যবহার করছে; readলিনাক্স মেশিনে কাজ করে।
নিকোলাস টুং

উত্তর:


19

Zsh এর নিচে স্বাচ্ছন্দ্যে পাঠ্যের একটি লাইন ইনপুট করতে, ব্যবহার করুন vared। ব্যবহার varedপরিবর্তে readপূজা zle , যা ক্ষণস্থায়ী সমতূল্য -eডাকা readline থেকে ব্যাশ হবে।

vared -p 'What would you like to do?: ' -c tmp

আপনি যে আচরণটি readপ্লেইনের সাথে বর্ণনা করেছেন তা শেল ইস্যুর চেয়ে ভুল কনফিগার্ড টার্মিনালের মতো দেখাচ্ছে। চালান stty -aআপনার টার্মিনাল সেটিংস দেখানোর জন্য, এবং যে নিশ্চিত করুন eolসেট করা হয় ^Mএবং eraseআপনার কি সেট করা হয় Backspaceমূল পাঠায়। অপারেটিং সিস্টেমের উপর নির্ভর করে এবং এটি কীভাবে সেট আপ হয় এবং টার্মিনালে, Backspaceপ্রেরণ করে ^Hবা হয় ^?। ব্যাকস্পেস সেটিংসটি সাধারণত কিছু কনফিগারেশন ফাইলের কারণে ভুল হয়ে যায় যা এটিকে ম্যানুয়ালি সেট করার চেষ্টা করে, তাই আপনার প্রথমে যেটি করা উচিত তা হ'ল এই জাতীয় কোনও ভুল কনফিগারেশন সরান। যদি আপনি কোনওটি না পান তবে এটি কোনও historicalতিহাসিক সামঞ্জস্যতা মোডে সেট করা হয়নি তা পরীক্ষা করতে আপনার টার্মিনাল এমুলেটরটির সেটিংস পর্যালোচনা করুন। অন্য সমস্ত কিছু যদি ব্যর্থ হয় তবে এর মতো কিছু যুক্ত করুন ~/.zshrc:

if [[ $(ps -o comm= $PPID) = iterm ]]; then
  stty erase '^?'
fi

1
vared -p 'আপনি কি করতে চান?:' tmp
zzapper

খুবই ভাল! varedবিল্টিন সম্পর্কে জানতেন না । দেখা যাচ্ছে, zshzleম্যান পৃষ্ঠাটি অবশ্যই কমপক্ষে স্কিমিংয়ের পক্ষে মূল্যবান।
ratijas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.