繁体   English   中英

emacs lisp代码以添加文件进行监视

[英]emacs lisp code to add files for monitoring

我是emacs lisp编程的新手。 我是一名开发人员,每天使用c进行编程。 我想使用标记对emacs进行代码浏览。 但是,我的项目规模很大,无法承受时不时运行etags的麻烦。 我想以这种方式在emacs中添加lisp函数或代码,我打开emacs的每个文件都必须写入一个文件(将其命名为〜/ project_files_opened.txt),然后我将执行cron job,该操作只会标记打开的文件。有人可以帮我一些参考文献或现有代码来帮助我吗? 甚至还有一些例子也可以帮助我学习...谢谢..

您可能希望将GNU Global视为etag的替代品。 我需要说明的是,我自己并没有使用过它,但是我相信它实现了一个适当的数据库,而不是基本的平面TAGS文件,因此增量更新应该非常有效。

有关详细信息,请参见教程 特别是使用GLOBAL的3.6扩展Emacs4.3增量更新

Emacs Wiki上还有一个页面:
http://www.emacswiki.org/emacs/GnuGlobal

机敏稍有不同怎么办? 当您打开一个文件(您关心的)时,将其添加到TAGS文件中。 您可以使用以下代码轻松完成此操作:

(setq tags-file-name "/scratch2/TAGS")
(setq tags-revert-without-query t)
(add-hook 'find-file-hooks 'add-opened-file-to-tags)
(defun add-opened-file-to-tags ()
  "every time a file is opened, add it to the TAGS file (if not already present)
Note: only add it to the TAGS file when the major mode is one we care about"
  (when (memq major-mode '(c-mode c++-mode))
(let ((opened-file (buffer-file-name)))
  (save-excursion
    (visit-tags-table-buffer)
    (unless (member opened-file (tags-table-files))
      (shell-command 
            (format "etags -a --output %s %s" tags-file-name opened-file)))))))
;; create an empty TAGS file if necessary
(unless (file-exists-p tags-file-name)
  (shell-command (format "touch %s" tags-file-name)))

每隔一段时间,您会希望删除TAGS文件以刷新内容。 或者,您可以使用类似以下Mx refresh-tags-table的内容

(defun refresh-tags-file ()
  "rebuild the tags file"
  (interactive)
  (let ((tags-files 
     (save-excursion
       (visit-tags-table-buffer)
       (tags-table-files))))
(delete-file tags-file-name)
(dolist (file tags-files)
  (shell-command (format "etags -a --output %s %s" tags-file-name file)))))

您可以看一下CEDET框架。 请参阅语义模块

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM