1987年,我写了一段时间我要粘贴的代码.这里用于捕获switch-to-buffer的初始函数绑定的机制不再起作用,导致无限递归.我想现在有一种正确的方法可以做这种事情,有人可以请我填一下吗?
(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)
Run Code Online (Sandbox Code Playgroud)
我不确定为什么以前可以工作的代码不再工作(除非你*real-buffer-switcher*以某种方式设置为'better-buffer-switcher)。有什么理由让你不只绑定C-x b你真正想要的例程而不去管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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
665 次 |
| 最近记录: |