一千萬個為什麽

搜索

調試自定義查找功能

運行以下自定義查找功能時,Emacs正在凍結,我正在尋找一些幫助,請調試它。

我想要前綴參數 C-u 來區分 switch-to-buffer-other-windowswitch-to-buffer 。通過從交互式語句中刪除 find-function-read ,該函數不再返回符號 - 這就是我使用 make-symbol 的原因。我沒有看到Googling的一個例子,它顯示了如何在同一個交互式語句中使用“P”的交互式命令和另一個函數,例如 find-function-read

(defun my-find-function (arg)
  "Find, in another window, the definition of FUNCTION near point.
See `find-function' for more details."
  (interactive "P")
  (let ((function (make-symbol (format "%s" (car (find-function-read))))))
    (if (eq arg '(4))
      (find-function-do-it function nil 'switch-to-buffer-other-window)
      (find-function-do-it function nil 'switch-to-buffer))))

最佳答案

固定:

(defun my-find-function (arg)
  "Find, in another window, the definition of FUNCTION near point.
See `find-function' for more details."
  (interactive "p")
  (let* ((thing (thing-at-point 'symbol))
         (function
          (when thing (intern thing))))
    (if (eq arg 4)
      (find-function-do-it function nil 'switch-to-buffer-other-window)
      (find-function-do-it function nil 'switch-to-buffer))))

請註意, eq 僅適用於數字和符號,不適用於列表。 你不能這樣做:

(setq x '(1))
(eq x '(1))
;=> nil 

轉載註明原文: 調試自定義查找功能