আপনি লক্ষ্য করবেন যে আপনি যখন cat
কোনও টার্মিনালে শেল প্রম্পটে চালাবেন , cat
স্টিডিনের কাছ থেকে যা পড়ে তা স্টডআউটকে লিখতে হবে এবং টিপতে হবে a, আপনি a
টার্মিনাল ড্রাইভারের দ্বারা প্রতিধ্বনিত দেখতে পাবেন , তবে সেটি cat
লিখবে না a
(আপনি দেখতে পাচ্ছেন) শুধুমাত্র একটি a
, টার্মিনাল ড্রাইভার দ্বারা প্রতিধ্বনিত)।
তবে, আপনি যদি টাইপ করেন তবে আপনি আউটপুটিং a Backspace b Enterদেখতে পাবেন না , তবে ( এবং নিউলাইন)।cat
a\010b\015
b\012
b
কারণ টার্মিনাল ড্রাইভার (আমরা কার্নেলের মধ্যে সফ্টওয়্যারটির সাথে কথা বলছি, টার্মিনাল এমুলেটরের মতো নয় xterm
) ক্যানোনিকাল মোডে থাকা অবস্থায় খুব বেসিক লাইন এডিটর প্রয়োগ করে। টার্মিনাল ড্রাইভারটি কমান্ড ব্যবহার করার মতো সিস্টেম কল ব্যবহার করে কনফিগার করা যায় । উদাহরণস্বরূপ, ক্যানোনিকাল মোডটি ছেড়ে যেতে, আপনি এটি করতে পারেন । যদি তুমি করো:ioctl()
stty
stty -icanon
stty -icanon; cat
তারপরে, আপনি একই সাথে echo
(যা দিয়ে আপনি অক্ষম করতে পারতেন stty -echo
) এবং cat
আউটপুট উভয়ই দেখতে পাবেন ।
সেই সম্পাদক একজন লাইন সম্পাদক। এটি, চাপ দেওয়ার পরে টার্মিনাল ডিভাইসটি পড়ার অ্যাপ্লিকেশনটিতে প্রেরণ না করা পর্যন্ত এটি ব্যবহারকারীকে এক লাইনের পাঠ্য সম্পাদনা করতে পারে Enter।
সেই সম্পাদকের সম্পাদনার ক্ষমতা খুব সীমাবদ্ধ। বেশিরভাগ বাস্তবায়নে, কেবলমাত্র 4 টি সম্পাদনা কী (আসলে অক্ষর) এর সাথে কনফিগারযোগ্য stty
:
- মুছুন (
^H
বা ^?
সাধারণত): পূর্বের অক্ষরটি মুছুন
- হত্যা (
^U
সাধারণত): খালি (হত্যা) লাইনটি এখনও প্রবেশ করেছে
- werase (
^W
): পূর্ববর্তী শব্দটি মুছুন
- lnext (
^V
): পরবর্তী অক্ষরটি অক্ষরে অক্ষরে প্রবেশ করান (উপরের সমস্তটির বিশেষ অর্থ বাতিল করুন)
পুরানো দিনগুলিতে, এমনটি ভাবা হয়েছিল যে টার্মিনাল ড্রাইভার লাইন সম্পাদককে ফ্যানসিয়ার ক্ষমতা সহ প্রসারিত করা হবে। এ কারণেই শেল প্রম্পটে প্রাথমিক শেলগুলির কোনওরই কোনও কমান্ড লাইন সম্পাদনা করার ক্ষমতা নেই ( cat
আমরা উপরের মতো চলার চেয়ে শেল প্রম্পটে একই লাইন সম্পাদনা ক্ষমতা পেতে চাই )।
যাইহোক, এটি সত্যিই কখনও ঘটেনি, সম্ভবত বিভিন্ন কারণে টার্মিনালগুলির সাথে গোলমাল হওয়া কিছু মূল চাপগুলিতে একই অক্ষরগুলি না পাঠানো হয়েছিল যা এটি স্পষ্ট করে দিয়েছিল যে এটি কার্নেল স্পেসে প্রয়োগ করা উচিত নয়।
সুতরাং কিছু শেলগুলি টার্মিনাল ড্রাইভারের ক্যানোনিকাল মোডটি ছেড়ে দেওয়া এবং তাদের নিজস্ব লাইন সম্পাদক প্রয়োগ করতে শুরু করে। সেই সময়ে emacs
এবং vi
সম্পূর্ণ ভিন্ন কী বাঁধাই এবং অপারেশন মোড সহ সর্বাধিক জনপ্রিয় ভিজ্যুয়াল পাঠ্য সম্পাদক ছিলেন। ইন vi
, আপনার কাছে পাঠ্য প্রবেশের জন্য একটি মোড এবং সম্পাদনার জন্য একটি মোড রয়েছে। ইন emacs
, আপনি সর্বদা পাঠ্য মোডে প্রবেশ করছেন , তবে সম্পাদনা কী সংমিশ্রণগুলি ( ^b
চরিত্রটিকে পিছনে সরানো পছন্দ করে) টিপুন দিয়ে সম্পন্ন করা হয় ।
শাঁসগুলির জন্য তাদের নিজস্ব কী কীভাবে বাধ্যতামূলক তা বজায় রাখা উচিত ছিল না। এটি হতাশার কারণ হ'ল লোকেরা ভিন্ন কিছু শিখতে পারে। তবে অন্যের থেকে একটি ( emacs
বা vi
) স্টাইল বেছে নেওয়া অন্য সম্পাদকটির ব্যবহারকারীদের বিচ্ছিন্ন করার একটি নিশ্চিত উপায় হতে পারে ।
Https://www.usenix.org/legacy/publications/library/proceedings/vhll/full_papers/korn.ksh.a অনুসারে :
Ksh এর জনপ্রিয় ইনলাইন সম্পাদনা বৈশিষ্ট্যগুলি (vi এবং ইমাকস মোড) বেল ল্যাবরেটরিজগুলিতে সফ্টওয়্যার বিকাশকারীদের দ্বারা তৈরি করা হয়েছিল; প্যাট সুলিভান দ্বারা ভিআই লাইন সম্পাদনা মোড এবং মাইক ভ্যাচের দ্বারা ইম্যাক্স লাইন সম্পাদনা মোড। এই বৈশিষ্ট্যগুলি যুক্ত করার জন্য প্রত্যেকে স্বতন্ত্রভাবে বোর্ন শেলটি সংশোধন করেছিল এবং উভয়ই এমন সংস্থায় ছিল যারা কেএসএস কেবল তখনই ব্যবহার করতে চাইত যখন কেএসএসের তাদের নিজস্ব ইনলাইন সম্পাদক থাকত। মূলত ksh এ কমান্ড লাইন সম্পাদনা যুক্ত করার ধারণাটি প্রত্যাখ্যান করা হয়েছিল যে লাইন সম্পাদনা টার্মিনাল ড্রাইভারের মধ্যে চলে যাবে। যাইহোক, যখন এটি স্পষ্ট হয়ে গেল যে খুব শীঘ্রই এটি হওয়ার সম্ভাবনা নেই, উভয় লাইন সম্পাদনা মোডগুলি কেএসএসে সংহত করে alচ্ছিকভাবে তৈরি করা হয়েছিল যাতে তারা এমন সিস্টেমে অক্ষম হতে পারে যা টার্মিনাল ইন্টারফেসের অংশ হিসাবে সম্পাদনা সরবরাহ করে।
সুতরাং পরিবর্তে, তারা উভয় এবং ব্যবহারকারীদের উভয়ের মধ্যে চয়ন করার জন্য একটি ইন্টারফেস প্রয়োগ করে। ksh
80 এর দশকের গোড়ার দিকে সম্ভবত প্রথমটি ছিল (উপরে বর্ণিত বোর্ন শেলটিতে একটি ভিআই মোড এবং ইমাস মোড যুক্ত করার জন্য পৃথকভাবে লিখিত কোডটি পুনরায় ব্যবহার করা হয়েছিল) এর পরে tcsh
( tcsh
প্রথমে কেবল emacs
কী বাঁধাই ছিল , vi
মোড পরে যুক্ত করা হয়েছিল) এবং পরে bash
এবং zsh
90 এর দশকের গোড়ার দিকে।
আপনি দুটি মোড মধ্যে সুইচ bash
, zsh
অথবা ksh
সঙ্গে set -o vi
বা set -o emacs
, এবং bindkey -e
অথবা bindkey -v
মধ্যে tcsh
বা zsh
।
POSIX আসলে নির্দিষ্ট করে vi
মোড এবং না emacs
জন্য মোড sh
(গল্প হয়েছে রিচার্ড স্টলম্যান উল্লেখ POSIX আপত্তি emacs
জন্য মোডsh
)।
জন্য ডিফল্ট মোড bash
, পাবলিক ডোমেইন রুপভেদ ksh
(pdksh, mksh, oksh), tcsh
এবং zsh
Emacs মোড (সঙ্গে যদিও zsh
, এটা vi
যদি আপনার $EDITOR
হয় vi
), এবং যেমন AT & T মধ্যে ksh
, এটা বোবা মোড যদি না $EDITOR
বা $VISUAL
উল্লেখ vi
বা emacs
।
ksh
পরে gmacs
গোসলিংয়ের ব্যবহারকারীদের আলাদাভাবে emacs
হ্যান্ডেল করার জন্য একটি মোড যুক্ত করেছে Ctrl+T।
এখন হ্যান্ডলিং ^W
মধ্যে emacs
বা tcsh
Emacs মোড সম্ভবত চেয়েও পুরনো werase
, টার্মিনাল লাইন সম্পাদকে চরিত্র তাই আমরা সত্যিই যে জন্য তাদের দোষারোপ করতে পারে না এবং আমার বিবৃতি "বিদায়ী ..." বিভ্রান্তিকর হিসেবে দেখা যেতে পারে। এটা ঠিক যে আমি এটা জ্বালাময় যখন পছন্দ খুঁজে এর emacs
, tcsh
বা info
যখন আপনি টাইপ অন্য সব কিছু থেকে ভিন্নভাবে আচরণ Ctrl-W। আপনি কল্পনা করতে পারেন যে যখন আপনি টাইপ করার সাথে সাথে কিছু অ্যাপ্লিকেশনগুলি তাদের উইন্ডোটি বন্ধ করতে শুরু করেছে তখন আমি এটি আরও বেশি বিরক্তিকর পেয়েছি Ctrl-W।