参考imenu-list重写了一个类似tagbar的插件

这些tag list 类的插件都有一个共同的问题,就是切换文件后不自动刷新内容,导致我其实用的最多的还是counsel-imenu,只有浏览时偶尔开一下这些。是使用姿势不对吗?

同大量使用counsel-imenu的飘过~

求哪位使用treemacs这类侧边栏的大大提供个正确姿势 (可能我们得重开个贴?)

应该是因为只添加了

(add-hook 'after-save-hook 'maple-imenu-update)

如果想要切换文件自动刷新,可能还需要设置

advice-add 'select-window
1 个赞

这个我研究一下

treemacs可以重构代码吗?也就是,在treemacs中改函数名或变量名,所有文件自动跟着变动?

目前只能浏览。

偶然间发现其实 Side Windows默认是支持多窗口的, 以上是 neotreemaple-imenu 搭配使用的效果, 相关配置

(use-package neotree
  :config
  ;; (setq neo-mode-line-type 'none)
  (defun neo-default-display-fn(buffer _alist)
    (let ((window-pos (if (eq neo-window-position 'left) 'left 'right)))
      (display-buffer-in-side-window buffer `((side . ,window-pos)(slot . -2))))))
(use-package maple-imenu
  :ensure nil
  :commands (maple-imenu)
  :config
  (setq maple-imenu-display-alist '((side . left) (slot . -1)))

  (defun maple-sidebar()
    (interactive)
    (maple-imenu)
    (neotree-toggle)))

注意(slot . -2)这个参数, maple-imenu默认是(slot . -1), neotree设置为-2代表neotree显示在maple-imenu的上面,反之则为下,相同则单独显示

2 个赞

有没有imenu 可以显示参数列表的,比如java 中那么多重载的方法,方法显示都是同一个名字。

我使用 maple-imenu一段时间了,发现 maple-imenu的窗口不能扩大,有时候一些函数很长,想把窗口放大些,但是 maple-imenu没有这个功能。但是 imenu-list就可以。

我加了一个maple-imenu-autoresize的选项,你可以测试一下

1 个赞

然后我在使用的时候,还有一个不太好的地方,就是在这个imenu的buffer中仍然可以打开其他buffer,因为这个buffer很窄,就特别难看。建议不能打开其他buffer. 第二点:这个mode-line 的显示也不是很好。对比一下:

为什么会在maple-imenu这个buffer里打开其它buffer,难道不应该只会用到上下键(jkq键),enter键或者鼠标点击吗

关于modeline可以自定义设置

(add-hook 'maple-imenu-mode-hook
            (lambda() (setq-local maple-modeline-style 'sidebar)))

其实这是误操作,有时候不小心打开其他buffer。针对这种操作,应该内部直接就打不开 才好

如果只有imenu buffer一个window的话,岂不是永远切换不出去?

你这个疑问,我立马去试了一下 imenu-list。确实切不出去。但是目前处于imenu buffer,里面有很多list啊,随便 按一个,就能创建一个windos 出来

试用了lsp-treemacs,效果也不错哦。下面是我的改装版本

大佬知道怎么禁用imenu-list里的evil吗?

不好意思,这两个我目前都没有用。不过肯定是可以的,在imenu-list buffer里的major-mode下禁用evil-mode就可以。

祝楼主: 新春快乐, 龙年腾飞!

这个包, 刚好, 符合我的需求, 直接抄了, 小改一点

本来过年不想问, 但是看 论坛里 好热闹, 也就向您请教个问题, 非IT, 问的比较直接 过程描述下, 比如:

  1. 就一个单窗口, 打开1个 el 文件

  2. 垂直分成 2个屏幕,

  3. 打开 emacs-maple-imenu, 已设置在 最右侧

  4. 当回车后, 会定位到 最左边的 窗口, 即 第1个

现在我想, 让它回车后 定位 到 (2个缓冲区是 相同的) 第2个窗口

据目前 现有 知识 它是 从这里 (require 'imenu) 来的, 是个 文本按钮

但 非IT 不会, 在那里 拦截, 还是再这里, 重新指定个 打开函数, 这怎么加, 也不会

(insert-button
       $text
       'action  ; 大概 乱猜测 是这里
       `(lambda (_)
          (pop-to-buffer maple-imenu-buffer)
          (goto-char ,point))
       'follow-link t
       'face 'maple-imenu-item-face)

还是要用 advice, 这个只知道个 大概, 实在没空学, 相关资料也不多

再补问个, 搜了这个, 没搞明白

现在,想要按 在文件中的顺序, 来排序, 是用在 org-mode 中的, 来显示 大纲标题的