summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2018-01-16 02:19:16 +0300
committerDmitry Gutov <dgutov@yandex.ru>2018-01-16 02:19:16 +0300
commitb0c90851ab7d58625015fef0b990a49b5a85f682 (patch)
tree6cc151528de2403369ef23a5d6d678d61307114d
parente93e1a6bc9ce7e30fdbc8a1b39fa0af0d9342264 (diff)
downloademacs-scratch/project-auto-tags.tar.gz
Prompt before automatic generation for the first timescratch/project-auto-tags
-rw-r--r--lisp/progmodes/etags.el21
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.