2010-10-24 23 views
5

W 1987 roku napisałem kod, który zamierzam wkleić za chwilę. Mechanizm użyty tutaj do przechwytywania początkowego powiązania funkcji przełączania z buforem nie działa więcej, co powoduje nieskończoną rekursję. Wydaje mi się, że jest odpowiedni sposób, aby zrobić coś takiego teraz, czy ktoś mógłby mnie wypełnić?zawijanie funkcji w 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) 

Odpowiedz

3

Nie jestem pewien, dlaczego kod, który pracował już nie działa (chyba że *real-buffer-switcher* jakoś ustawić 'better-buffer-switcher. Czy jest jakiś powód, dla którego nie tylko wiążą Cx b rutynę naprawdę chcesz i pozostawić switch-to-buffer sam

tak:?

(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

To było dawno temu. Myślę, że był powód. – bmargulies

2

wydaje się, że prawidłowa odpowiedź na moje pytanie jest defadvice

.
+0

To była moja pierwsza myśl, ale to całkowita przesada, jeśli nie możesz zrozumieć, dlaczego robiłeś rzeczy tak zawiłym sposobem, jak pierwotnie. –

Powiązane problemy