假设我有一个功能:
(defun test (file line)
(let ((currwin (get-buffer-window (current-buffer))))
(other-window 1)
;; (find-file filename)
(ggtags-find-file file)
(goto-line line)
(select-window currwin)
)
)
这使用ggtags
包中的新ggtags
函数。
ggtags-find-file
在“我的窗口”中显示但goto-line
在其他窗口(应显示ggtags-find-file
时)发生了什么事情!
现在让我们采取一个有趣的变化:
(defun test (file line)
(let (currwin (get-buffer-window (current-buffer)))
;; (setq currwin (get-buffer-window (current-buffer))) ;; (A)
(other-window 1)
;; (find-file filename)
(ggtags-find-file file)
(goto-line line)
;; (select-window currwin) ;; (B)
;; (other-window 1) ;; (C)
)
)
在这个变化中(实际上是一个错字,因为我忘记了外部封闭()),
我在“其他窗口”中显示了显示,但goto-line
无法正常工作。 [事实上,它在它下面的缓冲区工作!]
更有趣的是,如果我取消注释(C)OR(A)& (B),我回到了早先的状态。
似乎ggtags-find-file
是一个衍生出来的过程。
我做了这个实验:
(defun test (file line)
(with-output-to-temp-buffer "*Test*"
(ggtags-find-file file)
(goto-line line)
)
(switch-to-buffer-other-window "*Test*")
)
在这种情况下,我看到 Test 显示半秒,并显示ggtags-file
。
N.B。
我可能会注意到,如果我使用find-file
,似乎所有人都在工作!