En 1987, escribí el código que voy a pegar en un momento. El mecanismo utilizado aquí para capturar el enlace de función inicial de conmutar a búfer ya no funciona, lo que da como resultado una recursión infinita. Supongo que hay una manera correcta de hacer este tipo de cosas ahora, ¿podría alguien por favor llenarme?envuelve una función en 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)
Fue hace mucho tiempo. Creo que hay una razón. – bmargulies