শেলটিতে কীভাবে নিয়ন্ত্রণের অক্ষর (^ সি, ^ ডি, ^ [,…) প্রদর্শন করা যায়


13

আপনি যখন শেলটিতে নিয়ন্ত্রণের অক্ষরগুলি টাইপ করেন তখন "ক্যারেট নোটেশন" বলে যা ব্যবহার করে তারা প্রদর্শিত হয়। উদাহরণস্বরূপ এস্কেপ ^[ক্যারেট নোটেশন হিসাবে লেখা হয়।

আমি আমার বাশ শেলটি দেখতে শীতল দেখানোর জন্য কাস্টমাইজ করতে চাই। আমি উদাহরণস্বরূপ আমার PS1এবং PS2রঙিন হয়ে উঠেছে। নিয়মিত চরিত্রগুলি থেকে আরও স্বতন্ত্রতর করার জন্য আমি এখন নিয়ন্ত্রণ চরিত্রগুলির একটি অনন্য উপস্থিতি পেতে চাই।

$ # Here I type CTRL-C to abort the command.
$ blahblah^C
          ^^ I want these two characters to be displayed differently

আমার শেল হাইলাইট নিয়ন্ত্রণ অক্ষরগুলি আলাদাভাবে তৈরি করার কোনও উপায় আছে কি?

এগুলি কোনও গা bold় ফন্টে প্রদর্শন করা বা নিয়মিত পাঠ্য থেকে বিভিন্ন রঙে প্রদর্শিত হওয়া সম্ভব?

আমি এখানে বাশ শেল ব্যবহার করছি তবে আমি প্রশ্নটি সাথে ট্যাগ করিনি bashকারণ সম্ভবত এখানে একটি সমাধান রয়েছে যা বিভিন্ন শেলের জন্য প্রযোজ্য।

নোট করুন যে নিয়ন্ত্রণের অক্ষরের হাইলাইটিংটি কোন স্তরে ঘটে তা আমি জানি না। আমি প্রথমে ভেবেছিলাম এটি খোলের মধ্যেই ছিল। এখন আমি শুনেছি এটা readline যে নিয়ন্ত্রণ কিভাবে নিয়ন্ত্রণ অক্ষর মত শাঁস হয় ব্যাশ । প্রশ্নটি এখন ট্যাগ করা হয়েছে readlineএবং আমি এখনও উত্তর খুঁজছি।


আপনি কেন মনে করেন শেলটি তাদের হাইলাইট করছে? কারণ bashএটি readlineসেই জিনিসগুলি পরিচালনা করছে এবং বেশিরভাগের পক্ষে এটিই চালক চালক।
মাইকজার্ভ

আমি জানতাম না। এই জন্যই আমি নোটটি লিখেছি। এটি কেবল আমার অনুমান ছিল কারণ অন্যান্য অ্যাপ্লিকেশনগুলি নিয়মিত পাঠ্যের চেয়ে নিয়মিত অক্ষরগুলিকে পছন্দ করে viএবং lessহাইলাইট করে। আমি এই তথ্যটি দিয়ে প্রশ্নটি সম্পাদনা করব। ধন্যবাদ!
wefwefa3

এটা বোধগম্য. এই ধরণের স্টাফ শেলের জন্য আরও বেশি কঠিন কারণ এর ধরণের দ্বিতীয় অগ্রাধিকার। সম্পাদকগণের সাথে তাদের পুরো কাজটি একটি স্ক্রিন <> ফাইল ইন্টারফেস সরবরাহ করা, তবে শেলটি প্রথমে একটি ব্যাখ্যা করা ভাষার জন্য কমান্ড ইন্টারপ্রেটার এবং লাইন সম্পাদক দ্বিতীয় (বা একেবারেই নয়)
মাইকজার্ভ

Readline অন্যান্য প্রোগ্রামের দ্বারা ব্যবহৃত হয়, কিন্তু এটা হয় ব্যাশ অংশ: এটা একটি লাইব্রেরি তা সংযুক্ত করা হয়। এবং আজকের শাঁস, বিশেষত বাশ, আপনি ভাবতে পারেন এমন কিছু করে।
অ্যালেক্সিস

zshবাক্সের বাইরে যা করে তা ব্যবহার করুন ।
স্টাফেন চেজেলাস

উত্তর:


20

আপনি যখন 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>

\x80iso8859-1 এ স্থানীয়ভাবে ^�... ইত্যাদি হিসাবে রেন্ডার করা হবে


3

আমার .bashrc ফাইলে আমি সাধারণত এই কোডটি রাখি:

function get_exit_status()
{
        local code=$?
        if [ $code -ne 0 ]
        then
                printf $'\001\033[31m\002'"($code)"$'\001\033[0m\002'" "
        fi
}

এবং তারপরে আমি আমার পিএস 1 এ এই ফাংশনটি কল করি

PS1='\u@\h \w $(get_exit_status)'

এটির সাহায্যে আপনি যদি সি press সি টিপেন তবে আপনি এটি আপনার প্রম্পটে দেখতে পাবেন

I@mycomputer ~ ^C
I@mycomputer ~ (130)

"0" নয় এমন সমস্ত প্রস্থান স্থিতি কোডগুলি অনুরোধ জানানো হবে।


$? PS1 যেমন পিএস 1 = '$? @ u @ \ এইচ \
ডাব্লু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.