2011-11-02 15 views
12

विभाजन के बाद Emacs शैल-मोड डिस्प्ले बहुत व्यापक है यदि मैं टर्मिनल प्राप्त करने के लिए emacs में M-x shell चलाता हूं, तो यह जानता है कि लाइनों को स्वचालित रूप से कहां लपेटें। उदाहरण के लिए, ls का आउटपुट कॉलम में स्वरूपित है जो विंडो को ठीक से फिट करता है।विंडो

मेरी समस्या यह है कि यदि मैं C-x 3 के साथ लंबवत विंडो को विभाजित करता हूं, तो शेल-मोड अभी भी सोचता है कि खिड़की पूरे फ्रेम को भरती है। परिणाम कमांड आउटपुट की बदसूरत लपेटना है। क्या शैल-मोड को यह जानने का कोई तरीका है कि इसे स्क्रीन चौड़ाई को अपडेट करना है?

संपादित करें:

नीचे HN के जवाब का उपयोग करना, मैं इसे ठीक के साथ आया था:

(defun my-resize-window() 
    "Reset the COLUMNS environment variable to the current width of the window." 
    (interactive) 
    (let ((proc (get-buffer-process (current-buffer))) 
     (str (format "export COLUMNS=%s" (window-width)))) 
    (funcall comint-input-sender proc str))) 

(defun my-shell-mode-hook() 
    (local-set-key "\C-cw" 'my-resize-window)) 

उत्तर

14

मैं पार्टी के लिए थोड़ा देर हो चुकी हूं, लेकिन COLUMNS ऐसा करने का तरीका नहीं है। यहाँ मेरी .emacs से एक अंश है:

(defun comint-fix-window-size() 
    "Change process window size." 
    (when (derived-mode-p 'comint-mode) 
    (set-process-window-size (get-buffer-process (current-buffer)) 
         (window-height) 
         (window-width)))) 

(defun my-shell-mode-hook() 
    ;; add this hook as buffer local, so it runs once per window. 
    (add-hook 'window-configuration-change-hook 'comint-fix-window-size nil t)) 

(add-hook 'shell-mode-hook 'my-shell-mode-hook) 

कॉलम हर बार निर्यात के विपरीत, इस विधि इस समय बैश में होने की आवश्यकता नहीं है और यह खाली संकेतों के साथ अपने सत्र स्पैम नहीं है। यह कोड शायद धूमकेतु में होना चाहिए, शायद मैं एक बग रिपोर्ट दर्ज करूंगा।

संपादित करें: यदि आप एक बफर-स्थानीय तरह में window-configuration-change-hook संशोधित करते हैं हुक, के रूप में फ्रेम प्रति एक बार विरोध किया एक बार खिड़की प्रति चलाता है।

+0

यह वास्तव में एक उपयोगी फिक्स है। कृपया एक बग रिपोर्ट के रूप में जमा करें! –

+1

उपयोगी फ़ंक्शन के लिए धन्यवाद, हालांकि यह प्रक्रिया शून्य होने पर समस्याएं पैदा करेगी, इसलिए मैंने सेट प्रक्रिया विंडो आकार से पहले एक शून्य जांच जोड़ा - [मेरा जवाब देखें] (http://stackoverflow.com/a/20015336/554279) –

2

इस प्रदर्शन कॉलम वातावरण चर से निर्धारित होता। मेरी सेटअप कॉलम में अगर मैं के माध्यम से

export COLUMNS=80 

80 करने के लिए कॉलम सेट इस कोड करने के लिए एक तरीका होना चाहिए खोल मोड पर सही ढंग से एक ऊर्ध्वाधर विभाजन ls प्रदर्शित करता है के बाद 202 के एक मूल्य है, लेकिन मैं नहीं है ऐसा करने के लिए पर्याप्त elisp-fu। यदि आप परेशानी बहु-अवधि से बचें तो यह स्वचालित रूप से प्रबंधित करें। ; एक्सeshell -

http://www.emacswiki.org/emacs/MultiTerm

0

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

5

यहां @ क्रिस्टोफर मोन्सेंटो के उत्तर से थोड़ा बेहतर आकार बदलने का कार्य है। मूल प्रक्रिया शून्य प्रक्रिया के कारण समस्या का कारण बन जाएगी। (उदाहरण के लिए exit शेल-मोड में)

(defun comint-fix-window-size() 
    "Change process window size." 
    (when (derived-mode-p 'comint-mode) 
    (let ((process (get-buffer-process (current-buffer)))) 
     (unless (eq nil process) 
     (set-process-window-size process (window-height) (window-width)))))) 
+2

(जब प्रक्रिया की तुलना में अधिक मूर्खतापूर्ण है (जब तक (eq nil प्रक्रिया) –