imenu是emacs自带的一个工具,它能够分析当前缓冲区中的定义。
他基于什么机制分析定义,我不是很清楚(没有去深究,可能是基于正则表达式吧。他似乎能分析racket,其他语言的支持情况我不是很清楚,不过至少能满足我目前的需求)
我的问题是,有没有办法把imenu的数据显示在一个独立窗口里?然后我们可以通过鼠标去点他,就像eclipse等IDE里的outline view功能?
我现在的办法是把他放到菜单栏上,但感觉不是很方便。。。
;; automatically add an Imenu menu to the menu bar
(defun try-to-add-imenu ()
(condition-case nil (imenu-add-to-menubar "imenu") (error nil)))
(add-hook 'prog-mode-hook 'try-to-add-imenu)
想听听你们的意见
helm的imenu好像就是这样的,以前用过,现在用ivy了,他的imenu就和原生差不多,不过我现在用lsp-ui-imenu也是这个效果,但感觉更好看,而且lsp识别要准确多了
lsp-ui-imenu能有独立outline窗口吗?
就和Eclipse和Visual Studio那样?
谢谢,已经用上了。
不过这个窗口似乎只能显示在最左边和最右边,能卡到treemac下面去吗?
我所希望的布局:
目前的做法是:
使用imenu-list-minor-mode,然后在Treemacs窗口下,手动打开一个下部窗口,然后再转Ilist,不过每次打开编辑器后都要手动调,不是很方便。
他的imenu-list-smart-toggle不是很智能,只支持:
left, right, above or below, to display the window at the left, right, top or bottom of the frame.
。。。
ivy 可以按 C-c C-o,counsel-imenu 和 swiper 都有效,应该是通用的。
同一个作者还有一个包:
这个是专门解决窗口配位置的问题的,可以把你弄好的layout保存下来。
不过我没有用过 ¯\_(ツ)_/¯
treemacs集成了imenu,在对应文件按tab就能够显示outline了。
4 个赞
wsug
2020 年4 月 24 日 09:34
12
没人说speedbar的,更喜欢speedbar的独占一个frame,不需要时隐藏节省屏幕空间,需要时出来但不改变当前窗口大小和位置。
speedbar中显示imenu里下一级的数据,在对应文件按+和-,显示imenu中的全部数据按 “[” 和 “]”(数据太多可能会卡),不知道为什么speedbar不用tab。
补充:speedbar里用空格和用tab的展开折叠差不多
Youmu
2020 年4 月 24 日 10:58
13
你说的这种有人喜欢有人不喜欢。
在平铺窗口下,这种单独的frame
其实是比较讨厌的,还得再为它单独写个规则。而如果直接在Emacs
里面,就不用WM
特殊处理了。
wsug
2020 年5 月 6 日 19:58
14
@Youmu 还得再为它单独写个规则
,可能是我没用过平铺窗口的原因吧,单独写个规则控制speedbar的位置大小也不麻烦,几行代码,我的是
(defun my-speedbar-width() (interactive)(progn
;(speedbar t)(setq header-line-format nil) (setq mode-line-format nil)
(set-frame-width (selected-frame) 34)
(set-frame-height (selected-frame) 46)
(set-frame-position (selected-frame) 121 158) ))
是根据不同屏幕大小来设置的,这段代码用于1920*1080分辨率屏幕时speedbar的大小位置,遇到的主要问题是这段代码如果写在speedbar-mode-hook
里老出问题,不知道怎么去解决它?
只好单独写出来调用占一个快捷键(emacs启动后只需调用一次),这也没什么,我没有快捷键不够用或者不好按之类的问题,多按下也就自然记住,按键使用方式见这里
嗨,wsug,你好。请问你的speedbar配置能否公开
wsug
2023 年7 月 24 日 07:51
16
我现在也用得少了,我这个不能通用,我是把位置固定写死的(针对不同显示器分辨率),先按f2启动speedbar,这时在按f3把speedbar的位置定死,然后在多次按f2就可以达成那个效果: 显示和隐藏侧边栏时不改变当前emacs窗口的大小和位置
,原来做过一一个动图展示 treemacs显示和隐藏侧边栏时不改变当前emacs窗口的大小和位置.gif 。
但应该很多人更喜欢直接全屏,而不是在多个frame中切换的用法