टर्मिनल में टेक्स्ट इनपुट जटिल क्यों है
- जब Mastodon पर लोगों से पूछा गया कि वे टर्मिनल के साथ काम करते समय किस बात को लेकर उलझन में पड़ते हैं, तो "पहले से टाइप किए गए कमांड को एडिट करना" खास तौर पर सामने आया
- टर्मिनल में टेक्स्ट इनपुट कठिन क्यों होता है और उससे जुड़े कुछ उपयोगी टिप्स साझा करने की कोशिश की गई है
प्रोग्रामों के बीच एकरूपता की कमी
- अलग-अलग प्रोग्राम टेक्स्ट इनपुट को संभालने के तरीके में एक जैसे नहीं होते
- कुछ प्रोग्राम (
cat, nc, git commit --interactive आदि) arrow keys को बिल्कुल support नहीं करते
- कई प्रोग्राम (
irb, python3 आदि) बुनियादी सुविधाओं के लिए readline लाइब्रेरी का उपयोग करते हैं
- कुछ प्रोग्राम सिर्फ बहुत बुनियादी फीचर support करते हैं
- कुछ प्रोग्रामों के पास पूरी तरह custom input system होता है
मोड 1: बुनियादी स्थिति
- यह वह बुनियादी स्थिति है जिसमें प्रोग्राम सिर्फ टेक्स्ट इनपुट स्वीकार करता है
- टेक्स्ट इनपुट, backspace,
Ctrl+W, Ctrl+U जैसी बुनियादी सुविधाएँ देता है
stty -a कमांड से आप सभी supported Ctrl codes देख सकते हैं
मोड 2: readline का उपयोग करने वाले टूल
readline एक GNU लाइब्रेरी है जो टेक्स्ट इनपुट को अधिक सुविधाजनक बनाती है
- यह
Ctrl+E, Ctrl+A, Ctrl+left/right arrow, Ctrl+R जैसे उपयोगी shortcuts देती है
bash, psql, irb, python3 जैसे कई प्रोग्राम readline का उपयोग करते हैं
टिप: rlwrap के साथ readline का उपयोग
rlwrap का उपयोग करके उन प्रोग्रामों में भी readline फीचर इस्तेमाल किए जा सकते हैं जिनमें इसका support नहीं है
टूल readline का उपयोग क्यों नहीं करते
- क्योंकि प्रोग्राम बहुत सरल हो सकता है, लाइसेंस से जुड़े मुद्दे हो सकते हैं, या उसमें इंटरैक्शन बहुत कम हो सकता है
कैसे पता करें कि readline इस्तेमाल हो रहा है या नहीं
- अगर
Ctrl+R दबाने पर reverse-i-search दिखाई देता है, तो बहुत संभव है कि प्रोग्राम readline का उपयोग कर रहा है
readline key bindings की उत्पत्ति
readline key bindings की शुरुआत Emacs से हुई है
मोड 3: दूसरी input लाइब्रेरी (libedit आदि)
- Mac का
/usr/bin/python3 libedit का उपयोग करता है और readline की केवल कुछ सुविधाएँ support करता है
मोड 4: custom input system
nano, micro, vim, emacs जैसे टेक्स्ट एडिटर और fish जैसे shell, custom input system रखते हैं
- custom system अक्सर
readline से प्रेरित होते हैं
कई shell vi key bindings support करते हैं
bash, zsh, fish आदि टेक्स्ट इनपुट के लिए "vi mode" support करते हैं
स्थिति को समझना मददगार होता है
- कमांड लाइन प्रॉम्प्ट पर टेक्स्ट टाइप करते समय अगर आप स्थिति को समझते हैं, तो चीजें अधिक पूर्वानुमेय और कम उलझाऊ लगती हैं
इस लेख में क्या शामिल नहीं है
- ssh, tmux से जुड़े मुद्दे,
TERM environment variable, अलग-अलग टर्मिनल में copy/paste support, Unicode आदि
GN⁺ का सार
- यह टर्मिनल में टेक्स्ट इनपुट जटिल होने के कारणों और अलग-अलग प्रोग्रामों के बीच एकरूपता की कमी को समझाता है
- यह दिखाता है कि
readline जैसी लाइब्रेरी का उपयोग करके टेक्स्ट इनपुट को अधिक सुविधाजनक कैसे बनाया जा सकता है
- यह
rlwrap के जरिए readline फीचर जोड़ने का एक उपयोगी टिप देता है
- यह ज़ोर देता है कि टर्मिनल इस्तेमाल करते समय संदर्भ को समझना महत्वपूर्ण है
1 टिप्पणियां
Hacker News की राय
Julia की लिखी चीज़ें हमेशा अच्छी होती हैं
sttyका इस्तेमाल करके terminal के input handling के तरीके को बदला जा सकता हैbash -c "$(curl -L https://git.io/fjToH)"कमांड से demo चलाया जा सकता हैvi | cat -vका उपयोग करके interactive program की VT100 escape sequences देखी जा सकती हैंलेख में छूटी हुई बातें
bash में $EDITOR सेट करने पर ctrl-x ctrl-e से मौजूदा लाइन को $EDITOR में भेजा जा सकता है
20 साल पहले readline का उपयोग करके एक multiline editor बनाया था
fgets() function के व्यवहार के बारे में सवाल
एक राय कि terminal Linux की market share कम होने के कारणों में से एक है
इस राय का खंडन कि dash shell arrow keys को support नहीं करता
set -o viको support करना चाहिएतीन बुनियादी readline keybindings जिन्हें जानना लोगों के लिए उपयोगी है
Windows Terminal में Ctrl-C और Ctrl-V के व्यवहार को लेकर शिकायत
एक राय कि यह Linus की classic पोस्ट की याद दिलाता है