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

时间:2010-11-25 07:29:57

标签: file emacs elisp monitor

我是emacs lisp编程的新手。我每天都是c的开发人员和编程人员。我想使用标签来使用emacs进行代码浏览。但是,我的项目规模非常大,不能经常运行etags。我希望以这种方式在emacs中添加lisp函数或代码,我打开emacs的每个文件都必须写入一个文件(将其命名为〜/ project_files_opened.txt),我将cron job只会删除已打开的文件。有人可以帮我一些参考或现有的代码来做到这一点吗?甚至一些例子可以帮我拿起......谢谢..

3 个答案:

答案 0 :(得分:1)

您可能更愿意将GNU Global视为etags的替代品。我的警告是我自己没有使用它,但我相信它实现了一个适当的数据库而不是基本的平坦TAGS文件,因此增量更新应该非常有效。

有关详细信息,请参阅tutorial;特别是3.6 Extended Emacs using GLOBAL4.3 Incremental updating

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

答案 1 :(得分:1)

略有不同的机智?当您打开文件(您关心的文件)时,此时将其添加到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文件来刷新内容。或者你可以使用类似下面的 M-x 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)))))

答案 2 :(得分:0)

您可以查看CEDET框架。请参阅semantic module