emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] scratch/project-auto-tags b0c9085 2/2: Prompt before autom


From: Dmitry Gutov
Subject: [Emacs-diffs] scratch/project-auto-tags b0c9085 2/2: Prompt before automatic generation for the first time
Date: Mon, 15 Jan 2018 18:19:37 -0500 (EST)

branch: scratch/project-auto-tags
commit b0c90851ab7d58625015fef0b990a49b5a85f682
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Prompt before automatic generation for the first time
---
 lisp/progmodes/etags.el | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

diff --git a/lisp/progmodes/etags.el b/lisp/progmodes/etags.el
index f1d8a6f..6ee77d9 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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]