হোম ইন কী দীর্ঘ ইনপুট স্ট্রিংগুলিতে ব্যাশ (tty এবং এক্স) এ অদ্ভুত অভিনয় করে


11

আমি যখন আঘাত Homeযদি আমার বর্তমান ইনপুট ছোট যথেষ্ট (বলুন, <36 অক্ষর), এটা কাজ করে জরিমানা। যাইহোক, যখন আমি একটি দীর্ঘ কমান্ড টাইপ করেছি এবং তারপরে আবার শুরুতে যেতে চাই, মনে হয় এটি তার কাজটি করে, তবে কমান্ডটি আর প্রদর্শিত হয় না। দেখে মনে হচ্ছে আমি শুরুতে নেই তবে প্রায় 10 টি অক্ষর বন্ধ। যদিও আমি "অন্ধভাবে" টাইপ করি তবে এটি সূক্ষ্মভাবে কাজ করে তবে এটি সম্পূর্ণ জগাখিচুড়ি মনে হয়, যেন পুরো ইনপুটটি ডানদিকে স্থানান্তরিত হয় তবে পুনরায় চিত্রিত হয় না। সুতরাং আমি এটিতে টাইপ করি, তবে "আসলে" নয়, কারণ আমি যে জায়গাটি "মুছে ফেলছি" ডানদিকে "প্রকৃতপক্ষে" 10 টি অক্ষর। তদনুসারে, যদি আমি কমান্ডটি মুছে ফেলার চেষ্টা করি, তবে প্রথমে 10 টি অক্ষর প্রদর্শিত হবে, তবে আমি যদি Enterএটি আঘাত করি তবে অন্য প্রম্পটটি প্রদর্শিত হবে যেন আগের ইনপুটটি খালি ছিল।

আমি জানি এটি এখন পর্যন্ত সেরা ব্যাখ্যা নয়, তবে মূল বিষয়টি হ'ল বাশ এটিকে স্বীকৃতি দেয় এবং সঠিক জিনিসটি করার চেষ্টা করে তবে প্রায়শই ব্যর্থ হয়।

আমি এটি টিটি এবং এক্স সেশনে টার্মিনালে উভয়ই প্রজনন করি। যখন আমি হিট Ctrl+ করি Vএবং তারপরে Homeআমি বিভিন্ন সিকোয়েন্স দেখতে পাই ( ^[OHএক্স তে, ^[[1~টাইটিতে) তবে উভয়ই আমার মধ্যে রয়েছে বলে মনে হয় /etc/inputrc:

# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on

$if mode=emacs

# for linux console and RH/Debian xterm
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[7~": beginning-of-line
"\e[3~": delete-char
"\e[2~": quoted-insert
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word
"\e[1;5C": forward-word
"\e[1;5D": backward-word

# for rxvt
"\e[8~": end-of-line

# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for freebsd console
"\e[H": beginning-of-line
"\e[F": end-of-line
$endif

echo $TERMশো linuxTTY এবং xtermএক্স সেশনে।

এটা

জিএনইউ বাশ, সংস্করণ ৪.২.২৪ (২) -রেলিজ (i686-pc-linux-gnu)

কারও সম্পর্কে এ সম্পর্কে কোন ধারণা আছে?


1
আপনার প্রম্পট আর কত দিন? প্রায় 36 টি অক্ষর দীর্ঘ কমান্ড লাইন টাইপ করা আপনার টার্মিনালের একটি লাইন পূরণ করে এবং এর ফলে পাশের স্ক্রোলিং ঘটায়? আপনি যদি এই প্রম্পটটি ব্যবহার করেন তবে তা এখনও ঘটে? PS1='$ '
মিকেল

@ মাইকেল আপনার মনে কী আছে আমি তা জানি না তবে আপনি সম্ভবত সঠিক ট্র্যাকের কাছেই রয়েছেন। আমি যখন সংক্ষিপ্ত প্রম্পটটি ব্যবহার করি তখন মনে হয় না। আমি ব্যবহৃত একটি সামান্য ডিফল্ট এক তুলনায় পরিবর্তিত ছিল: PS1="\e[0;36m[\u@\h \W]\$ \e[m"। এটিতে কোনও ভুল আছে কি? 36 টি অক্ষর টাইপ করা একটি লাইন পূরণ করে না (এখন পর্যন্ত)। এছাড়াও, আমার কাছে টিটিআই তে পাশের স্ক্রোলিং নেই :)
লেভ লেভিটস্কি

@ মাইকেল আমি jw013 এর পরামর্শ অনুসরণ করে এবং প্রম্পটটি সামঞ্জস্য করেছি, এটি এটিকে সমাধান করে বলে মনে হচ্ছে। সমস্যাটি কী ছিল তা আপনি ব্যাখ্যা করতে পারেন যাতে আমি প্রথমে এটির জন্য একটি প্রতিবেদক হিসাবে আপনাকে পুরস্কৃত করতে পারি :)
লেভ লেভিটস্কি

উত্তর:


13

আপনার প্রম্পটের অ-প্রিন্টিং অংশগুলি (রঙগুলি পরিবর্তনের জন্য পালানোর ক্রমগুলি অন্তর্ভুক্ত তবে সীমাবদ্ধ নয়) এর সাথে \[এবং আপনার সাথে ঘিরতে হবে \]

আপনার মূল প্রম্পট: \e[0;36m[\u@\h \W]\$ \e[m
স্থির প্রম্পট:\[\e[0;36m\][\u@\h \W]\$ \[\e[m\]

\[এবং \]বলতে bashআসলে পর্দা মুদ্রণ নেই মধ্যবর্তী সবকিছু করে, যেমন শূন্য দৈর্ঘ্য হয়েছে। আপনার টাইপ করা অক্ষরগুলি কোথায় প্রতিধ্বনি করতে হবে তা জানতে গণনা করা প্রম্পট দৈর্ঘ্যের প্রয়োজন। একটি ত্রুটিযুক্ত প্রম্পট দৈর্ঘ্য গণনা করার \[ \]কারণগুলি ত্যাগ করা bash, যা bashকার্সার বাস্তবের সাথে মেলে না এমন ধারণার কারণে প্রায়শই অদ্ভুত টার্মিনাল জ্যামিতি-নির্ভর আচরণের দিকে পরিচালিত করে ।


ধন্যবাদ, এটি সমস্যার সমাধান করে। যদিও আমি কিছু ব্যাখ্যার প্রশংসা করব, যদিও: সেই আচরণের কারণ কী ছিল, বর্গাকার বন্ধনীগুলি কী করে ইত্যাদি one এটি সমস্ত পৃষ্ঠার এক পৃষ্ঠায় রাখলে ভাল লাগবে এবং ভবিষ্যতে অন্য কাউকে সহায়তা করতে পারব।
লেভ লেভিটস্কি 21

@ লাইভলভিটস্কি আমি উত্তরের একটি সংক্ষিপ্ত ব্যাখ্যা যুক্ত করেছি।
jw013

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