[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: best practices for TAGS
From: |
Peter Münster |
Subject: |
Re: best practices for TAGS |
Date: |
Mon, 05 Dec 2011 07:28:05 +0100 |
User-agent: |
Gnus/5.110018 (No Gnus v0.18) Emacs/24.0.91 (gnu/linux) |
On Mon, Dec 05 2011, Xavier Noria wrote:
> For example, define the current tags file as the first one you find
> from the current directory up the hierarchy, nil if none found.
>
> If the tags file is outdated, I'd like to run some shell command
> automatically and revisit it, then do the find-tag.
--8<---------------cut here---------------start------------->8---
(defun pm/find-tags-file ()
"Recursively searches each parent directory for a file named `TAGS'
and returns the path to that file or nil if a tags file is not found.
Returns nil if the buffer is not visiting a file.
(from jds-find-tags-file in the emacs-wiki)"
(labels ((find-tags-file-r
(path)
(let* ((parent (if path (file-name-directory path)
default-directory))
(possible-tags-file (concat parent "TAGS")))
(cond
((file-exists-p possible-tags-file)
(shell-command (concat "make -C" parent " TAGS"))
(throw 'found-it possible-tags-file))
((string= "/TAGS" possible-tags-file)
(error "no tags file found"))
(t
(find-tags-file-r (directory-file-name parent)))))))
(catch 'found-it
(find-tags-file-r (buffer-file-name)))))
(defadvice find-tag (before pm/before-find-tag activate)
(setq tags-file-name (pm/find-tags-file)))
--8<---------------cut here---------------end--------------->8---
--
Peter