如何突出显示Emacs缓冲区中的标记?
我使用如何突出显示Emacs缓冲区中的标记?,emacs,elisp,Emacs,Elisp,我使用find tag和kill this buffer在键绑定的帮助下浏览Fortran 90代码,如 (global-set-key [(control return)] 'find-tag ) ; (global-set-key (kbd "C-w") 'kill-this-buffer) ; 这在代码浏览方面提供了相对流畅的体验。不幸的是,并非我所有的标签都有相同的突出显示。因此,我最终使用如下表达式手动将目标添加到字体锁定关键字中 (add-hook 'after-change-ma
find tag
和kill this buffer
在键绑定的帮助下浏览Fortran 90代码,如
(global-set-key [(control return)] 'find-tag ) ;
(global-set-key (kbd "C-w") 'kill-this-buffer) ;
这在代码浏览方面提供了相对流畅的体验。不幸的是,并非我所有的标签都有相同的突出显示。因此,我最终使用如下表达式手动将目标添加到字体锁定关键字中
(add-hook 'after-change-major-mode-hook
(lambda ()
(font-lock-add-keywords 'f90-mode
'(
("\\(my_function\\)" 1 font-lock-function-name-face t )
))))
在my~/.emacs.d/init.el
中
如果出现在f90模式的缓冲区中,是否有突出显示标记
文件中列出的每个名称的解决方案
我最感兴趣的是
f90模式的解决方案,但当然,一般解决方案会更好。也许吧,但不太清楚您所说的“此类突出显示”是什么意思,尤其是“基于标记文件的内容”
- “此类突出显示”--字体锁定突出显示用于查看缓冲区,在本例中为
f90模式下的缓冲区。因此,无论如何,您确实需要为该模式添加字体锁定。这与您进入模式的方式无关(通过访问标记或其他方式)
- “基于标记文件的内容”——这些内容将告诉您定义了什么名称(以及在哪里),但仅此而已
但是,您可能是说您从标记
文件中获得了名称my_函数
,并且希望按定义对标记
中列出的每个名称进行字体锁定(在f90模式下
)。如果是这种情况,那么是的,您可以解析标记
以获得已定义名称的列表,并将每个名称添加到字体锁定关键字
(对于f90模式
)。您可以使用(标记完成表)
获取标记中的标记(定义名称)列表
只需使用mapatoms
迭代(标记完成表)
返回的obarray即可。函数参数将为符号添加字体锁定关键字
条目。类似这样(未经测试):
但请注意,(a)执行需要一段时间,(b)添加标记中定义的每个符号,因此它将在f90模式下锁定字体。这真的是你想要的吗?如果您的标记
表是专门从(仅)Fortran文件创建的,那么这可能是有意义的;否则,可能不会
因为这可能需要一段时间,所以只能调用一次foo
,而不是每次进入f90模式时都调用一次。您可以在更新标记
文件后再次执行此操作,以获取任何更改。如果(b)是一个考虑因素,那么您可以向函数arg添加一些过滤测试,以mapautoms
,这样只有某些符号被字体锁定
无论如何,也许这会让你开始。HTH.可能吧,但您所说的“此类突出显示”是什么意思,尤其是“基于标记文件的内容”还不太清楚
- “此类突出显示”--字体锁定突出显示用于查看缓冲区,在本例中为
f90模式下的缓冲区。因此,无论如何,您确实需要为该模式添加字体锁定。这与您进入模式的方式无关(通过访问标记或其他方式)
- “基于标记文件的内容”——这些内容将告诉您定义了什么名称(以及在哪里),但仅此而已
但是,您可能是说您从标记
文件中获得了名称my_函数
,并且希望按定义对标记
中列出的每个名称进行字体锁定(在f90模式下
)。如果是这种情况,那么是的,您可以解析标记
以获得已定义名称的列表,并将每个名称添加到字体锁定关键字
(对于f90模式
)。您可以使用(标记完成表)
获取标记中的标记(定义名称)列表
只需使用mapatoms
迭代(标记完成表)
返回的obarray即可。函数参数将为符号添加字体锁定关键字
条目。类似这样(未经测试):
但请注意,(a)执行需要一段时间,(b)添加标记中定义的每个符号,因此它将在f90模式下锁定字体。这真的是你想要的吗?如果您的标记
表是专门从(仅)Fortran文件创建的,那么这可能是有意义的;否则,可能不会
因为这可能需要一段时间,所以只能调用一次foo
,而不是每次进入f90模式时都调用一次。您可以在更新标记
文件后再次执行此操作,以获取任何更改。如果(b)是一个考虑因素,那么您可以向函数arg添加一些过滤测试,以mapautoms
,这样只有某些符号被字体锁定
无论如何,也许这会让你开始。是的,你完全理解我的问题。谢谢你的真知灼见。是的,你完全理解我的问题。感谢您的深刻见解。编辑以回答问题中@Drew的评论。编辑以回答问题中@Drew的评论。
(defun foo ()
(require 'etags)
(let ((defined-symbs (tags-completion-table)))
(mapatoms (lambda (symb)
(font-lock-add-keywords
'f90-mode `((,(format "\\(%s\\)" symb)
1 font-lock-function-name-face t)))))))