如下是我的配置
;;========================================================================================
;; imenu-list右侧显示函数列表
;;========================================================================================
(require 'imenu-list)
;; 绑定快捷键
(global-set-key (kbd "M-j") #'imenu-list-smart-toggle)
;; 将焦点移动到imenu-list
(setq imenu-list-focus-after-activation t)
;; 自动调整imenu-list窗口大小
;; (setq imenu-list-auto-resize t)
现在我通过Alt+j 调出 imenu-list 之后,回车选择完函数后,能不能让他自动关闭这个窗口?
好吧,我这个要求很奇葩,但希望能有办法,大家有思路吗?
我在 company 里看到的一段代码,稍微简化了下,原理比较简单就是在执行一段代码的之前保存当前窗口的配置,然后在任意按键之前恢复。
(defvar my-electric-saved-window-configuration nil)
(defun my-pre-command ()
(when my-electric-saved-window-configuration ; 可以加一些其他条件,比如一些按键绑定时不要触发
(set-window-configuration my-electric-saved-window-configuration)
(setq my-electric-saved-window-configuration nil)))
(add-hook 'pre-command-hook 'my-pre-command nil t)
(defmacro my-electric-do (&rest body)
`(progn
(setq my-electric-saved-window-configuration (current-window-configuration))
,@body))
(my-electric-do
(display-buffer (with-current-buffer (get-buffer-create "*company-documentation*")
(erase-buffer)
(save-excursion
(insert "Hello, world"))
(current-buffer)) t))
非常感谢您提供的思路,但还是没实现效果.再次感谢.
(advice-add 'imenu-list-goto-entry :after
#'(lambda (&rest args)
(imenu-list-smart-toggle)))
感觉你的这个需求可以直接使用自带的 imenu 啊 ,如果有安装 counsel 的话可以使用 counsel-imenu