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

spacemacs

#1

参考imenu-list重写了一个类似tagbar的插件 maple-imenu , 其实imenu-list已经足够了, 唯一的缺点就是和golden-ratio搭配起来很难受

imenu-list与golden-ratio冲突如何解决?

原本想要自定义一下,但看了源码之后, 发现需要改动的地方越来越多, 最后不如自己重写

使用: 下载下来复制到 $HOME/.emacs.d/site-lisp/maple-imenu 目录, 然后

(use-package maple-imenu
  :load-path "site-lisp/maple-imenu"
  :commands (maple-imenu)
  :config
  (with-eval-after-load 'evil
    (evil-make-overriding-map maple-imenu-mode-map 'normal)))

代码和逻辑与imenu-list比起来更加通俗易懂,如果有什么需要,自定义一下即可


#2

修改链接为 https://github.com/honmaple/emacs-maple-imenu


#3

我希望能把imenu-list单独嵌到左边的下半部分(就和大部分IDE的功能一样),因为你在写代码的时候除了outline之外,还有一个工程窗口,而两个竖着的窗口中间夹一个代码区会让人很不舒服。

楼主可以看一下这个帖子:imenu里的数据能单独显示在一个窗口里吗?

不知道楼主的插件是否能解决这个问题。

我最后解决方案是使用了treemacs集成的imenu(但仍然不是很喜欢这个方案)


#4

这个暂时没有好的办法, Side Windows貌似不能再split-window


#5

以前ECB就可以分割


#6

话说 ECB 是不是已经死了?


#7

imenu-list其实够用了。为了简单,我也直接使用了treemacs自带的。另外一个就是 lsp-mode 里带的lsp-ui-imenu,挺好的。楼主可以把 maple-imenu 发布到 melpa 了。


#8

例图中的python代码的这个list,是要依托于lsp-mode么?还是treemacs自然就可以啦?谢谢!

我暂时lsp用于python问题多多,1月份那版没跑起来,于是回去用jedi了。你这个imenu看着很心动,想试试。我现在用的neotree,也就看看文件,没什么用,基本不开。


#9

图上的是 lsp-ui-imenu 的效果,treemacs 的效果如下:

image


#10

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


#11

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

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


#12

应该是因为只添加了

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

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

advice-add 'select-window

#13

这个我研究一下


#14

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


#15

目前只能浏览。


#16

偶然间发现其实 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的上面,反之则为下,相同则单独显示


#17

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


#18

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


#19

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


#20

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