emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master d86ef9f: xref-prompt-for-identifier: Use a list val


From: Dmitry Gutov
Subject: [Emacs-diffs] master d86ef9f: xref-prompt-for-identifier: Use a list value
Date: Tue, 26 May 2015 16:28:55 +0000

branch: master
commit d86ef9fc4a45bd1f3c79c4814b9e1e545ce0a07c
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    xref-prompt-for-identifier: Use a list value
    
    * lisp/progmodes/xref.el (xref-prompt-for-identifier): Allow list
    value, to be interpreted as a list of commands.
    (xref--prompt-p): New function.
    (xref--read-identifier): Use it.
---
 lisp/progmodes/xref.el |   36 ++++++++++++++++++++++++++++++------
 1 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 3bb4fde..c9bffc6 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -283,13 +283,25 @@ backward."
   :type 'integer
   :version "25.1")
 
-(defcustom xref-prompt-for-identifier nil
-  "When non-nil, always prompt for the identifier name.
+(defcustom xref-prompt-for-identifier '(not xref-find-definitions
+                                            xref-find-definitions-other-window
+                                            xref-find-definitions-other-frame)
+  "When t, always prompt for the identifier name.
 
-Otherwise, only prompt when there's no value at point we can use,
-or when the command has been called with the prefix argument."
+When nil, prompt only when there's no value at point we can use,
+or when the command has been called with the prefix argument.
+
+Otherwise, it's a list of xref commands which will prompt
+anyway (the value at point, if any, will be used as the default).
+
+If the list starts with `not', the meaning of the rest of the
+elements is negated."
   :type '(choice (const :tag "always" t)
-                 (const :tag "auto" nil))
+                 (const :tag "auto" nil)
+                 (set :menu-tag "command specific" :tag "commands"
+                     :value (not)
+                     (const :tag "Except" not)
+                     (repeat :inline t (symbol :tag "command"))))
   :version "25.1")
 
 (defcustom xref-pulse-on-jump t
@@ -621,10 +633,18 @@ Return an alist of the form ((FILENAME . (XREF ...)) 
...)."
                `((window . ,window)
                  (temporary-buffers . ,tb)))))))
 
+(defun xref--prompt-p (command)
+  (or (eq xref-prompt-for-identifier t)
+      (if (eq (car xref-prompt-for-identifier) 'not)
+          (not (memq command (cdr xref-prompt-for-identifier)))
+        (memq command xref-prompt-for-identifier))))
+
 (defun xref--read-identifier (prompt)
   "Return the identifier at point or read it from the minibuffer."
   (let ((id (funcall xref-identifier-at-point-function)))
-    (cond ((or current-prefix-arg xref-prompt-for-identifier (not id))
+    (cond ((or current-prefix-arg
+               (not id)
+               (xref--prompt-p this-command))
            (completing-read prompt
                             (funcall xref-identifier-completion-table-function)
                             nil nil nil
@@ -667,6 +687,7 @@ With prefix argument, prompt for the identifier."
 ;;;###autoload
 (defun xref-find-regexp (regexp)
   "Find all matches for REGEXP."
+  ;; FIXME: Prompt for directory.
   (interactive (list (xref--read-identifier "Find regexp: ")))
   (xref--show-xrefs regexp 'matches regexp nil))
 
@@ -736,6 +757,9 @@ details on which tools are used, and when."
   (cl-assert (directory-name-p dir))
   (when (null kind)
     (setq input (regexp-quote input)))
+  ;; FIXME: When regexp, search in all files, except
+  ;; `grep-find-ignored-directories' and `grep-find-ignored-files',
+  ;; like `rgrep' does.
   (let* ((default-directory dir)
          (semantic-symref-tool 'detect)
          (res (if (eq kind 'symbol)



reply via email to

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