Emacs边缘的可行代码折叠


15

我想配置我的Emacs边缘以显示代码折叠部分。

例如,在Mac上,BBEdit在编辑JSON文件时将显示以下内容:

BBEdit代码折叠标记

标记本身是可操作的:单击标记将展开或折叠相应的代码部分。当文档没有支持代码折叠的模式时,不会显示边缘。

是否可以通过这种方式扩展Emacs边缘功能?

Answers:


16

Hideshowvis将可单击图标添加到边缘,但是由于某些奇怪的原因,它不包含在elpa或melpa中。默认情况下,它-在可折叠代码的边缘显示a ,然后使用省略内容...。通过同时启用hideshowvis-symbols它,添加了+,并使对折叠内容的提示更响亮。

Hideshow本身还允许在行上单击鼠标以切换显示S-mouse-2(或单击中键)。那是内置的,可以通过启用hs-minor-mode


1
不错,hideshowvis.el使用了与我建议的类似的黑客手段,但没有双击(通过阅读原始事件)的麻烦。感谢您的指导。
Sigma

3
Hideshowvis.el效果很好,谢谢!我有一些问题,它让对JSON文件与工作js3-mode; 要解决这些问题,我必须确保只有在队列中的所有操作之后才启用hideshowvis,例如:(dolist (hook '(emacs-lisp-mode-hook c++-mode-hook)) (add-hook hook 'hideshowvis-enable)) (defun hideshowvis-enable-immediately () (run-at-time "0 seconds" nil 'hideshowvis-enable)) (add-hook 'js3-mode-hook 'hideshowvis-enable-immediately)
Mathieu Legrand 2014年

现在在melpa上。
dshepherd '17

4

虽然我认为边缘项目无法直接获得点击(尽管我可能是错的),但可能的破解方法是绑定 (kbd "<left-fringe> <double-mouse-1>")

由于第一次单击会将点移动到与条纹图标相对应的行的开头,因此(point)在假设的(展开)折叠功能中测试的值将使您能够确定要折叠(展开)的代码部分,或者您根本不需要执行任何操作(以防在此行没有边缘图标的情况下)

具有组织模式缓冲区的示例:

(define-key org-mode-map (kbd "<left-fringe> <double-mouse-1>") 'org-cycle)

双击边缘会循环相应的子树。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.