আপনি যখন Ctrl+Xটিপেন, আপনার টার্মিনাল এমুলেটর সিউডো-টার্মিনাল জোড়াটির মাস্টার দিকে বাইট 0x18 লিখেছেন।
এর পরে কী হবে টিটি লাইনের শৃঙ্খলা (কর্নেলের একটি সফ্টওয়্যার মডিউল যা মাস্টার সাইডের (এমুলেটারের নিয়ন্ত্রণে) এবং স্লেভ সাইডের (টার্মিনালে চলমান অ্যাপ্লিকেশনগুলির সাথে যোগাযোগ করে) কীভাবে কনফিগার করা হয় তার উপর নির্ভর করে।
যে কনফিগার করতে কমান্ড TTY লাইন শৃঙ্খলা হয় stty
কমান্ড।
এর মতো বোবা অ্যাপ্লিকেশন চালানোর সময় cat
সচেতন নয় এবং এর স্টিডিনটি টার্মিনাল কিনা তা বিবেচনা করে না, টার্মিনালটি একটি ডিফল্ট ক্যানোনিকাল মোডে থাকে যেখানে টিটি লাইনের শৃঙ্খলা ক্রুড লাইন সম্পাদক প্রয়োগ করে ।
কিছু ইন্টারেক্টিভ অ্যাপ্লিকেশনগুলির যেগুলি অপরিশোধিত লাইন সম্পাদকের চেয়ে বেশি প্রয়োজন সাধারণত স্টার্ট-আপ এ সেটিংগুলি পরিবর্তন করে এবং চলে যাওয়ার পরে পুনরুদ্ধার করে। আধুনিক শেলগুলি তাদের প্রম্পটে এই জাতীয় প্রয়োগগুলির উদাহরণ। তারা তাদের নিজস্ব আরও উন্নত লাইন সম্পাদক বাস্তবায়ন করে।
সাধারণত আপনি কমান্ড লাইনে প্রবেশ করার সময় শেলটি টিটি লাইনের শৃঙ্খলাটি সেই মোডে রাখে এবং আপনি যখন বর্তমান কমান্ডটি চালানোর জন্য এন্টার টিপেন তখন শেলটি স্বাভাবিক টিটি মোডটি পুনরুদ্ধার করে (প্রম্পট দেওয়ার আগে কার্যকর ছিল)।
আপনি যদি stty -a
কমান্ডটি চালান , আপনি বোবা অ্যাপ্লিকেশনগুলির জন্য ব্যবহৃত বর্তমান সেটিংস দেখতে পাবেন । আপনি দেখতে পারেন icanon
, echo
এবং echoctl
সেটিংস সক্ষম হচ্ছে।
এর অর্থ কী:
icanon
: যে অপরিশোধিত লাইন সম্পাদক সক্ষম করা আছে।
echo
: আপনি যে অক্ষরগুলি টাইপ করেন (যে টার্মিনাল এমুলেটরটি মাস্টার দিকে লেখেন) আবার প্রতিধ্বনিত হয় (টার্মিনাল এমুলেটর দ্বারা পড়ার জন্য উপলব্ধ করা হয়)।
echoctl
: asis প্রতিধ্বনিত হওয়ার পরিবর্তে নিয়ন্ত্রণের অক্ষরগুলি প্রতিধ্বনিত হয় ^X
।
সুতরাং, যাক আপনি টাইপ করুন A B Backspace-aka-Ctrl+H/? C Ctrl+X Backspace Return।
তোমার টার্মিনাল এমুলেটর পাঠাবে: AB\bC\x18\b\r
। লাইন শৃঙ্খলাটি আবার প্রতিধ্বনিত হবে: AB\b \bC^X\b \b\b \b\r\n
এবং স্লেভ পক্ষের ( /dev/pts/x
) থেকে ইনপুট পড়া একটি অ্যাপ্লিকেশন পড়বে AC\n
।
সমস্ত অ্যাপ্লিকেশনটি দেখেছে AC\n
, এবং কেবলমাত্র যখন আপনার প্রেস Enterতাই এটির আউটপুটটিতে কোনও নিয়ন্ত্রণ থাকতে পারে না ^X
।
আপনি লক্ষ্য করবেন যে প্রতিধ্বনির জন্য প্রথমটি ^H
( ^?
কিছু টার্মিনাল সহ erase
সেটিংসটি দেখুন) ফলাফলটি \b \b
টার্মিনালে ফিরে পাঠানো হয়েছিল। এটি কার্সারটিকে আবার সরিয়ে নিয়ে যাওয়ার, স্থানের সাথে ওভাররাইট করা, আবার কার্সারটিকে আবার সরানোর ক্রম, যখন দ্বিতীয়টির ^H
ফলে \b \b\b \b
এই দুটি ^
এবং X
অক্ষর মুছে ফেলা হয়েছিল ।
^X
(0x18) নিজেই অনূদিত হচ্ছে ^
এবং X
আউটপুট জন্য। যেমন B
, এটি ব্যাকস্পেসের সাহায্যে মুছে ফেলা হিসাবে এটি এটি প্রয়োগ করে না।
\r
(ওরফে ^M
) এর অনুবাদ করা হয়েছে \r\n
( ^M^J
প্রতিধ্বনি জন্য), এবং \n
( ^J
অ্যাপ্লিকেশনের জন্য)।
সুতরাং, এই বোবা অ্যাপ্লিকেশনগুলির জন্য আমাদের বিকল্পগুলি কী :
- অক্ষম
echo
( stty -echo
)। এটি নিয়ন্ত্রণ অক্ষরগুলির প্রতিধ্বনিত হওয়ার পদ্ধতিটি কার্যকরভাবে পরিবর্তন করে ... কোনও কিছু প্রতিধ্বনি না করে। আসলেই কোনও সমাধান নয়।
- নিষ্ক্রিয়
echoctl
। এই ভাবে নিয়ন্ত্রণ অক্ষর (ব্যাতীত অন্য কোন পরিবর্তন ^H
, ^M
প্রতিধ্বনিত করছে ... লাইন সম্পাদকের দ্বারা ব্যবহৃত এবং সমস্ত অন্যান্য বেশী)। তারা তখন যেমন হয় তেমন প্রতিধ্বনিত হয়। উদাহরণস্বরূপ, ESC অক্ষরটি \e
( ^[
/ 0x1b
) বাইট হিসাবে প্রেরণ করা হয় ( যা টার্মিনাল দ্বারা একটি পালানোর ক্রমের সূচনা হিসাবে স্বীকৃত), ^G
আপনি একটি \a
(একটি বিইএল, আপনার টার্মিনাল বীপ তৈরি করে) প্রেরণ করেন ... কোনও বিকল্প নয় ।
- অপরিশোধিত লাইন সম্পাদক অক্ষম করুন (
stty -icanon
)। অপরিশোধিত অ্যাপ্লিকেশনগুলি অনেক কম ব্যবহারযোগ্য হয়ে উঠবে বলেই আসলে কোনও বিকল্প নয়।
- tty লাইন শৃঙ্খলার আচরণ পরিবর্তন করতে কার্নেল কোডটি সম্পাদনা করুন যাতে নিয়ন্ত্রণের অক্ষরের প্রতিধ্বনি
\e[7m^X\e[m
কেবল পরিবর্তে প্রেরণ করা হয় ^X
(এখানে \e[7m
সাধারণত বেশিরভাগ টার্মিনালে বিপরীত ভিডিও সক্ষম করা হয়)।
rlwrap
বোতাম অ্যাপ্লিকেশনগুলিতে একটি অভিনব লাইনের সম্পাদক যুক্ত করতে ময়লা হ্যাকের মতো একটি মোড়ক ব্যবহার করা একটি বিকল্প হতে পারে । কার্যকরভাবে সেই মোড়কটি read()
টার্মিনাল ডিভাইস থেকে রিডলাইন লাইন সম্পাদককে কল করার জন্য সরল গুলি প্রতিস্থাপন করার চেষ্টা করে (যা টিটি লাইনের শৃঙ্খলার মোড পরিবর্তন করে)।
আরও এগিয়ে যাওয়ার জন্য, আপনি এমনকি জিএনইউ স্ক্রিনটির বৈশিষ্ট্যটির উপর নির্ভর করে zsh এর লাইন সম্পাদকের (যা বিপরীত ভিডিওতে হাইলাইট করার জন্য ঘটে থাকে ) মাধ্যমে টার্মিনাল থেকে সমস্ত ইনপুট হাইজ্যাক করে এমন একটি সমাধানের চেষ্টা করতে পারেন ।^X
:exec
এখন যে অ্যাপ্লিকেশনগুলি তাদের নিজস্ব লাইন সম্পাদক বাস্তবায়ন করে তাদের প্রতিধ্বনি কীভাবে করা হয় তা সিদ্ধান্ত নেওয়া তাদের পক্ষে । bash
নিয়ন্ত্রণের অক্ষরগুলি কীভাবে প্রতিধ্বনিত হয় তা কাস্টমাইজ করার জন্য কোনও সমর্থন নেই যার জন্য রিডলাইন ব্যবহার করে।
জন্য zsh
, দেখুন:
info --index-search='highlighting, special characters' zsh
zsh
অ-মুদ্রণযোগ্য অক্ষরগুলি ডিফল্টরূপে হাইলাইট করে। উদাহরণস্বরূপ আপনি হাইলাইটিংটি কাস্টমাইজ করতে পারেন:
zle_highlight=(special:fg=white,bg=red)
সেই বিশেষ চরিত্রগুলির জন্য সাদা রঙের উপর লাল হাইলাইট করুন।
এই অক্ষরগুলির পাঠ্য উপস্থাপনাটি যদিও কাস্টমাইজযোগ্য নয়।
একটি হল UTF-8 লোকেল সালে 0x18 যেমন রেন্ডার হবে ^X
, \u378
, \U7fffffff
(দুই নিয়োগমুক্র ইউনিকোড কোড পয়েন্ট) হিসাবে <0378>
, <7FFFFFFF>
, \u200b
যেমন (ক না সত্যিই মুদ্রণযোগ্য ইউনিকোড চরিত্র) <200B>
।
\x80
iso8859-1 এ স্থানীয়ভাবে ^�
... ইত্যাদি হিসাবে রেন্ডার করা হবে
bash
এটিreadline
সেই জিনিসগুলি পরিচালনা করছে এবং বেশিরভাগের পক্ষে এটিই চালক চালক।