2010-10-24 2 views
5

В 1987 году я написал код, который я собираюсь вставить в одно мгновение. Механизм, используемый здесь для захвата первоначальной привязки функции switch-to-buffer, больше не работает, что приводит к бесконечной рекурсии. Я предполагаю, что есть правильный способ сделать это сейчас, может кто-то, пожалуйста, заполните меня?обернуть функцию в 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

Это была моя первая мысль, но это полный перебор, если вы не можете понять, почему вы делали вещи изначально, как вы это делали. –

Смежные вопросы