2010-10-24 22 views
5

1987'de, bir an yapıştırmayacağım kodu yazdım. Burada, anahtardan arabelleğe ilk işlev bağlayıcısını yakalamak için kullanılan mekanizma artık işe yaramaz ve sonsuz yineleme ile sonuçlanır. Sanırım şimdi bu tür bir şey yapmanın doğru bir yolu var, birisi beni içeri doldurabilir mi? Sadece Cx b rutin bağlamaz herhangi bir nedenemacs lisp içinde bir işlev sarmak

(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) 

cevap

3

sizin *real-buffer-switcher* nasılsa 'better-buffer-switcher ayarlı var sürece kullanılan kod (artık eserlerini çalışmaya neden emin değilim. var mı Eğer gerçekten istediğiniz ve yalnız switch-to-buffer bırakıyorum gibi

:?

(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

Uzun zaman önceydi. Sanırım bir sebep vardı. – bmargulies

2

benim soruya doğru cevap defadvice gibi görünüyor

.
+0

Bu benim ilk düşüncemdi, ama neden yaptığınız şeyleri orijinal olarak yaptığınızı anlayamazsanız, aşırı derecede fazladır. –

İlgili konular