2010-02-05 16 views
6

मैं संकलन बफर के छोटे आकार (लेकिन डिलीट विंडो पर बंद नहीं) के स्वचालित पतन को कार्यान्वित करना चाहता हूं, जैसे खिड़की के सफल संकलन न्यूनतम आकार में घट गया है।emacs प्रोग्राम आकार में विंडो आकार बदलते हैं

get-buffer-create एक बफर देता है। मैं उस बफर से जुड़े विंडो पर shrink-window कैसे कर सकता हूं? भी, पिछले विंडो आकार को स्टोर करने का कोई तरीका है?

यह एमएसीएस लिस्प प्रोग्रामिंग में मेरा पहला प्रयास है, आपकी मदद के लिए धन्यवाद।

उत्तर

8

मेरा मानना ​​है कि इस समस्या को हल करने के दो तरीके हैं।

पहले हुक ` 'संकलन-फ़िनिश-कार्यों' है, जो है उपयोग करने के लिए है:

कॉल करने के लिए जब एक संकलन प्रक्रिया खत्म unctions [च की सूची]। प्रत्येक फ़ंक्शन को दो तर्कों के साथ बुलाया जाता है: संकलन बफर, और एक स्ट्रिंग वर्णन करती है कि प्रक्रिया कैसे समाप्त हुई।

कौन इस तरह एक समाधान की ओर जाता है:

(add-hook 'compilation-finish-functions 'my-compilation-finish-function) 
(defun my-compilation-finish-function (buffer resstring) 
    "Shrink the window if the process finished successfully." 
    (let ((compilation-window-height (if (string-match-p "finished" resstring) 5 nil))) 
    (compilation-set-window-height (get-buffer-window buffer 0)))) 

समस्या सिर्फ मुझे लगता है कि समाधान के साथ है यह मानता है कि है कि सफलता स्ट्रिंग खोजने के द्वारा निर्धारित किया जा सकता है परिणाम स्ट्रिंग में "समाप्त हो गया है।"

दूसरा विकल्प 'compilation-handle-exit को सलाह देना है - स्पष्ट रूप से निकास-स्थिति को पारित कर देता है। मैंने यह सलाह लिखी है कि विंडो से बाहर निकलता है जब बाहर निकलने की स्थिति शून्य होती है।

(defadvice compilation-handle-exit (around my-compilation-handle-exit-shrink-height activate) 
    (let ((compilation-window-height (if (zerop (car (ad-get-args 1))) 5 nil))) 
    (compilation-set-window-height (get-buffer-window (current-buffer) 0)) 
    ad-do-it)) 

नोट: यदि *compilation* खिड़की अभी भी दिखाई दे रहा है, जब आप अपने दूसरे संकलन करते हैं, यह असफलता पर बड़ा फिर से नहीं लगाया जाएगा। यदि आप इसे आकार बदलना चाहते हैं, तो आपको nil की बजाय ऊंचाई निर्दिष्ट करने की आवश्यकता होगी।

(if (string-match-p "finished" resstring) 5 (/ (frame-height) 2)) 

nil(/ (frame-height) 2)

से बदला गया: शायद यह अपनी पसंद (पहला उदाहरण बदलते) होगा
संबंधित मुद्दे