【已解决】imenu-list 如何自动关闭窗口

如下是我的配置

;;========================================================================================
;;                             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

太感谢了,按照您的方式,问题解决了。感谢