शेल / टर्म-मोड में प्रॉम्प्ट और पिछले-आउटपुट को अनुपयुक्त बनाने का कोई तरीका?


9

यह वास्तव में एक सतही प्रश्न है।

हालाँकि ansi-termजब मैं इसे पहली बार खोलता हूँ तो यह सही ढंग से व्यवहार करना शुरू कर देता है, यह कुछ कमांड के बाद एक 'संपादन योग्य' मोड में नीचा दिखने लगता है, उदाहरण के लिए, जब मैं C-a(लाइन की शुरुआत) C-k(किल लाइन) करता हूं , तो यह पूरे प्रॉम्प्ट को मिटा देता है।

मेरी सौंदर्य की पवित्रता के लिए, क्या संकेत और पिछले आउटपुट को अनुपयुक्त (के लिए shell) बनाने का कोई तरीका है ? (सार्थक अंतर को देखते हुए एनी-टर्म को बाहर करने के लिए अपडेट किया गया।)

मैं Emacs 24.4 में zsh का उपयोग कर रहा हूं; वर्चुअल बॉक्स के जरिए OS LXDE (Ubuntu 14.04) है।

(आदर्श रूप से मैं अभी भी अपने कर्सर को चारों ओर ले जा सकूंगा ...)


1
क्या आप किसी भी संयोग से "विषम" OS पर हैं? आमतौर पर शेल-मोड सीए में कमांड के शुरू होने के तुरंत बाद कूदता है , और दूसरी सी को बहुत शुरुआत में कूदने की आवश्यकता होती है। विंडोज और सोलारिस (एक पूर्व जीवन में) में मैंने आमतौर पर पाया कि सीए ने बहुत शुरुआत की, मैकओएस, लिनक्स आदि पर कूद गया, यह मेरे लिए उम्मीद के मुताबिक काम करता है।
मार्क ऑफ्लिक

@ मर्क ए: मैंने अपने वर्तमान सेट-अप सहित कुछ और विवरणों को शामिल करने के लिए मूल पोस्ट को अपडेट किया है।
आइकमन

एनी-टर्म शब्द का वर्णित व्यवहार ऐसा लगता है जैसे आपने एक अजीब डिफ़ॉल्ट या लाइन मोड में स्विच किया है C-c C-j। उस डिफ़ॉल्ट का पता लगाने की कोशिश करें या चार मोड के साथ स्विच करें C-c C-k
वामासा

1
चूंकि shell-mode/ term-modeक्रमशः करते हैं / से प्राप्त नहीं होते हैं comint-mode, आप एक ही समय में दो अलग-अलग प्रश्न पूछ रहे हैं। इसे दो अलग-अलग प्रश्नों में विभाजित करने का मन?
बैंगनी_अरो

जवाबों:


16

comint- मोडित मोड (जैसे shell, ielm...,) फ़िल्टर फ़ंक्शंस का समर्थन करते हैं, निम्न स्निपेट आउटपुट और शीघ्र रीड-ओनली बनाता है:

(setq comint-prompt-read-only t)

(defun my-comint-preoutput-turn-buffer-read-only (text)
  (propertize text 'read-only t))

(add-hook 'comint-preoutput-filter-functions 'my-comint-preoutput-turn-buffer-read-only)

के रूप में ansi-term(जो comint से व्युत्पन्न नहीं है ), इसमें ऑपरेशन के दो तरीके हैं, char modeजो शेल के बाइंडिंग और उसमें चल रहे सॉफ़्टवेयर के लिए जितना संभव हो उतना सच है और line modeजो आपको कृपया आपको बफर को संपादित करने की अनुमति देता है। कमांड आउटपुट के संपादन के लिए आपको आमतौर पर char mode(बाध्य होना चाहिए C-c C-k) और कभी-कभी स्विच line mode(बाध्य C-c C-j) होना चाहिए ।


यह वास्तव में बहुत सुंदर था, लेकिन काम करना बंद कर दिया ... :( मेरे पास एक काम करने वाला समाधान है जो काफी अधिक कोड लेता है → github.com/michalrus/dotfiles/commit/…
Michal Rus

डन्नो, अभी भी मेरे लिए 25.2 पर काम करता है।
वामासा

यह एक अर्थ में है, कि आप इस पाठ को हटा नहीं सकते हैं, लेकिन आप उस अपरिवर्तनीय के साथ नए, इंटरलेइंग कर सकते हैं।
मीकल रुस

1
मैं देख रहा हूँ, कि विशेष रूप से परीक्षण नहीं किया।
वामासा

उफ़, किसी और को देखने के लिए एक और परिवर्तन। मैं पहले कुछ खामियों को याद किया। यह मेरे लिए पूरी तरह से काम करता है। github.com/michalrus/dotfiles/blob/…
मिशाल रूस

2

जब मिश्रण termहोता है shell-mode, तो चर comint-use-prompt-regexpकभी-कभी सेट होने लगता है। यह आपके द्वारा वर्णित की तरह व्यवहार का कारण बनता है: शेल-मोड C-a में लाइन की शुरुआत में C-kजाएगा, शीघ्रता से पूरी लाइन को मार देगा।

एक साधारण फिक्स के comint-use-prompt-regexpसाथ रीसेट करना है C-: (setq comint-use-prompt-regexp nil), पाठ मोड का उपयोग करने के लिए शेल मोड को मजबूर करना जो कर्सर आंदोलन कुंजी से अवगत हैं।

यहाँ GNU Emacs के मैनुअल में यह कैसे काम करता है, इसका विवरण है: https://www.gnu.org/software/emacs/manual/html_node/emacs/Shell-Prompts.html


1

चर comint-prompt-read-onlyको अनुकूलित करने का प्रयास करें t

यह प्रभावित करेगा shell-modeऔर दूसरों से प्राप्त होगा comint-mode, लेकिन नहीं term-mode

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.