2010-10-24 16 views
5

1 9 87 में, मैंने एक कोड में पेस्ट करने के लिए कोड लिखा था। स्विच-टू-बफर के प्रारंभिक फ़ंक्शन बाध्यकारी को कैप्चर करने के लिए यहां उपयोग की जाने वाली तंत्र अब और काम नहीं करती है, जिसके परिणामस्वरूप अनंत रिकर्सन होता है। मुझे लगता है कि अब इस तरह की चीज करने का सही तरीका है, क्या कोई मुझे कृपया भर सकता है?emacs lisp में एक फ़ंक्शन लपेटें

(defvar *real-buffer-switcher* nil) 

(defun improve-buffer-switch() 
    (if *real-buffer-switcher* nil 
    (setq *real-buffer-switcher* (symbol-function 'switch-to-buffer)) 
    (fset 'switch-to-buffer 'better-switch-to-buffer) 
    t)) 

;(setq *real-buffer-switcher* (symbol-function 'switch-to-buffer)) 

(defun better-switch-to-buffer (buffer-name &optional no-record) 
    (interactive "p") ; c-u c-x b goes ahead and creates. Note that 
      ; buffer-name is fraudulently named so as to permit 
      ; non-interactive calls. 
    ;; first, filter out the noninteractive case. 
    (if (or (stringp buffer-name) 
     (bufferp buffer-name)) 
     (funcall *real-buffer-switcher* buffer-name no-record) 
    ;; interactive. Numeric arg? 
    (funcall *real-buffer-switcher* 
     (read-buffer "Buffer name: " 
       (other-buffer (current-buffer)) 
       (= buffer-name 1))))) 

(improve-buffer-switch) 

उत्तर

3

मुझे यकीन है कि क्यों कोड का उपयोग किया जाता है अब काम करता है काम करने के लिए (जब तक अपने *real-buffer-switcher* किसी भी तरह 'better-buffer-switcher करने के लिए सेट किया गया नहीं हूँ। वहाँ किसी भी कारण है कि तुम सिर्फ बाध्य नहीं है Cx ख दिनचर्या है आप वास्तव में चाहते हैं और switch-to-buffer अकेला छोड़ दो

तो जैसा

:

(defun better-switch-to-buffer (buffer-name &optional no-record) 
    (interactive "p") 
    ;; interactive. Numeric arg? 
    (switch-to-buffer 
    (read-buffer "Buffer name: " 
       (other-buffer (current-buffer)) 
       (= buffer-name 1)))) 

(global-set-key (kbd "C-x b") 'better-switch-to-buffer) 
+0

यह बहुत समय पहले था। मुझे लगता है कि एक कारण था। – bmargulies

2

ऐसा लगता है कि मेरे सवाल का सही जवाब defadvice है

+0

यह मेरा पहला विचार था, लेकिन यह कुल ओवरकिल है यदि आप यह नहीं समझ सकते कि आपने चीजों को मूल रूप से क्यों किया है। –

संबंधित मुद्दे