diff options
author | Dmitry Gutov <dgutov@yandex.ru> | 2018-01-16 02:19:16 +0300 |
---|---|---|
committer | Dmitry Gutov <dgutov@yandex.ru> | 2018-01-16 02:19:16 +0300 |
commit | b0c90851ab7d58625015fef0b990a49b5a85f682 (patch) | |
tree | 6cc151528de2403369ef23a5d6d678d61307114d | |
parent | e93e1a6bc9ce7e30fdbc8a1b39fa0af0d9342264 (diff) | |
download | emacs-scratch/project-auto-tags.tar.gz |
Prompt before automatic generation for the first timescratch/project-auto-tags
-rw-r--r-- | lisp/progmodes/etags.el | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el index f1d8a6fe3a7..6ee77d9e079 100644 --- a/lisp/progmodes/etags.el +++ b/lisp/progmodes/etags.el @@ -2185,26 +2185,31 @@ for \\[find-tag] (which see)." (defvar etags--project-tags-file nil) (defvar etags--project-tags-root nil) +(defvar etags--project-confirmed-roots nil) (defun etags--maybe-use-project-tags () - (let (proj) + (let (proj root) (when (and etags--project-tags-root (not (file-in-directory-p default-directory etags--project-tags-root))) (etags--project-tags-cleanup)) (when (and (not (or tags-file-name tags-table-list)) - (setq proj (project-current))) - (etags--project-tags-generate proj) + (setq proj (project-current)) + (setq root (cl-find default-directory + (project-roots proj) + :test #'file-in-directory-p)) + (or (member root etags--project-confirmed-roots) + (yes-or-no-p + (format "Generate tags table for %s automatically? " root)))) + (cl-pushnew root etags--project-confirmed-roots) + (etags--project-tags-generate proj root) ;; Invalidate the scanned tags after any change is written to disk. (add-hook 'after-save-hook #'etags--project-tags-cleanup) (visit-tags-table etags--project-tags-file)))) -(defun etags--project-tags-generate (proj) - (let* ((root (cl-find default-directory - (project-roots proj) - :test #'file-in-directory-p)) - (default-directory root) +(defun etags--project-tags-generate (proj root) + (let* ((default-directory root) (files (all-completions "" (project-file-completion-table proj (list root)))) (etags-command (executable-find "etags")) ;; FIXME: List all extensions, or wait for etags fix. |