26 lines
963 B
EmacsLisp
26 lines
963 B
EmacsLisp
(defadvice find-tag (around refresh-etags activate)
|
|
"Rerun etags and reload tags if tag not found and redo find-tag.
|
|
If buffer is modified, ask about save before running etags."
|
|
(let ((extension (file-name-extension (buffer-file-name))))
|
|
(condition-case err
|
|
ad-do-it
|
|
(error (and (buffer-modified-p)
|
|
(not (ding))
|
|
(y-or-n-p "Buffer is modified, save it? ")
|
|
(save-buffer))
|
|
(er-refresh-etags extension)
|
|
ad-do-it))))
|
|
|
|
(defun er-refresh-etags (&optional extension)
|
|
"Run etags on all peer files in current dir and reload them silently."
|
|
(interactive)
|
|
(shell-command (format "etags *.%s" (or extension "el")))
|
|
(let ((tags-revert-without-query t)) ; don't query, revert silently
|
|
(visit-tags-table default-directory nil)))
|
|
|
|
(defun create-tags (dir-name)
|
|
"Create tags file."
|
|
(interactive "DDirectory: ")
|
|
(eshell-command
|
|
(format "find %s -type f -name \"*.[ch]\" | etags -" dir-name)))
|