शेल-मोड और टर्म-मोड में PWD में बदलाव होने पर डिफ़ॉल्ट-निर्देशिका को स्वचालित रूप से अपडेट करें


12

क्या कोई विकल्प या पैकेज है जो default-directoryअद्यतन होने का कारण बनता है यदि कार्य निर्देशिका में परिवर्तन होता है shell-modeऔर term-mode? उपयोग करते समय Ie cd, लेकिन समाधान केवल इस विशेष कमांड के लिए देखने की तुलना में अधिक मजबूत होगा और शायद कुछ अन्य - यह वास्तव में $PWDहर कमांड के बाद के मूल्य की जांच करना चाहिए , मुझे लगता है।

इससे भी महत्वपूर्ण बात यह है कि यह एक दूरस्थ मशीन से कनेक्ट करते समय भी काम करना चाहिए shell-modeया एक term-modeबफर जो पहले default-directoryएक स्थानीय निर्देशिका होने के साथ बनाया गया था । यह वास्तव में वह विशेषता है जिसकी मुझे वास्तव में आवश्यकता है: प्रोग्रामेटिक रूप से यह बताने में सक्षम होना चाहिए कि क्या मैं ऐसे टर्मिनलों में टाइप करता हूं जो रिमोट मशीन पर चलाए जाते हैं। मैं उस जानकारी को ठीक से सेट default-directoryऔर फिगर के रूप में प्राप्त करना चाहूंगा यदि ऐसा करने का कोई तरीका है, तो ऐसा करने वाला टूल स्थानीय रूप से भी काम करेगा जैसा कि ऊपर वर्णित है।


क्या आपने गौर किया है dirtrack-mode? इसमें एक हुक है जो आप चाहते हैं।
जे डेविड स्मिथ

जवाबों:


12

मुझे लगता है कि आपके प्रश्न का पहला भाग के साथ किया जा सकता है dirtrack-mode। सबसे पहले, आप अपने शेल प्रॉम्प्ट को वर्तमान कार्य निर्देशिका को शामिल करने के लिए सेट करते हैं। अगला, आप dirtrack-listएक रेगेक्स पर सेट करते हैं जो बताता है dirtrack-modeकि इसे कैसे निकालना है। उदाहरण: मैं PS1यह होने के लिए बैश में सेट हूं :

export PS1="[\h:\w] $ "

और Emacs में मैंने सेट किया dirtrack-listऔर चालू किया dirtrack-mode:

(set-variable 'dirtrack-list '("^.*[^ ]+:\\(.*\\)]" 1 nil))
(dirtrack-mode 1)

( इस बेहतरीन ब्लॉग पोस्ट से लिया गया ।)

उसके बाद, मैं अपनी इच्छानुसार निर्देशिकाओं को बदलने में सक्षम हूं, और default-directoryजैसे ही मैं जाता हूं , परिवर्तन होता है। यह भी काम करता है अगर, एक शेल में, मैं एक दूरस्थ मशीन के लिए SSH करता हूं, जहां मैंने प्रॉम्प्ट को उसी तरह सेट किया है - cd /etc/apache2रिमोट मशीन पर, में परिवर्तन default-directoryहोता है /etc/apache2। ध्यान दें, हालांकि, यह स्थानीय है - रिमोट मशीन के मामले में, default-directoryअभी भी स्थानीय मशीन /etc/apache2पर सेट किया जाएगा ।

अगर मुझे आपके प्रश्न का दूसरा भाग समझ में आता है, तो आप चाहते हैं कि जब आप किसी अन्य मशीन पर SSHing करें तो default-directoryकुछ इस तरह सेट करें remote-machine:/etc/apache2Ssh-el का उपयोग करते समय , आप ssh-directory-tracking-modeयह काम करने के लिए दौड़ सकते हैं । उदाहरण के लिए, अगर मैं दौड़ता हूं M-x ssh, cd to /etc/apache2, तो दौड़ता C-x C-fहूं, मुझे जो प्रॉम्प्ट दिखाई देता है वह है:

Find Files or Url: /scp:aardvark@remote-machine:/etc/apache2

आप हाथ से 'Mx ssh-निर्देशिका-ट्रैकिंग-मोड' चला सकते हैं, लेकिन इसे ssh-mode के लिए हुक के रूप में सेट करना अधिक सुविधाजनक है:

(setq ssh-mode-hook 'ssh-directory-tracking-mode)

अधिक जानकारी:


2
बहुत बढ़िया जवाब, धन्यवाद! मुझे वास्तव में इसमें दिलचस्पी है क्योंकि मैंने जो पैकेज लिखा है, उसमें ऐसी विशेषताएं हैं जो इसे वांछनीय बना देंगे। यह with-editorमैगिट की अगली रिलीज तक उपयोग किया जाएगा। Magit स्वयं with-editors shell-mode/ term-mode-support का उपयोग नहीं करता है , इसलिए मैं संभवतः रिलीज़ से पहले इसे एकीकृत नहीं करूंगा। लेकिन आपके द्वारा दी गई जानकारी से ऐसा करना बहुत आसान हो जाएगा, एक बार जब मैं मैगिट रिलीज के साथ कर रहा हूं और फिर से अन्य चीजों पर ध्यान केंद्रित कर सकता हूं।
तारसियस

यहाँ with-editorमैगिट के बाहर आरंभ करने का तरीका बताया गया है: emacs.stackexchange.com/questions/27/… । और मैगिट मुद्दा जिसने मुझे यह सवाल पूछने के लिए प्रेरित किया: github.com/magit/magit/issues/1638
तारसियस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.