emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 8ba61ff: * lisp/progmodes/grep.el (grep-find-hide):


From: Juri Linkov
Subject: [Emacs-diffs] master 8ba61ff: * lisp/progmodes/grep.el (grep-find-hide): New defcustom (bug#30503).
Date: Thu, 22 Feb 2018 16:51:53 -0500 (EST)

branch: master
commit 8ba61ffd8cebb0ff9f7a219022f3c1f3eac2f6d0
Author: Juri Linkov <address@hidden>
Commit: Juri Linkov <address@hidden>

    * lisp/progmodes/grep.el (grep-find-hide): New defcustom (bug#30503).
    
    (grep-find-hide-properties): New variable.
    (grep-mode-font-lock-keywords): Put grep-find-hide-properties
    on part of grep command line.
    (grep-find-show): New function.
    * doc/emacs/building.texi (Grep Searching): Document grep-find-hide.
---
 doc/emacs/building.texi |  6 ++++++
 etc/NEWS                |  7 +++++++
 lisp/progmodes/grep.el  | 49 +++++++++++++++++++++++++++++++++++++++++++++++--
 3 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index b6b664d..9170571 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -434,6 +434,12 @@ the variable @code{grep-files-aliases}.
 @kbd{M-x rgrep}.  The default value includes the data directories used
 by various version control systems.
 
address@hidden grep-find-hide
+  The boolean option @code{grep-find-hide} controls shortening of the
+displayed command line by hiding the part containing ignored
+directories and files.  The hidden part can be revealed by clicking on
+the button with ellipsis.
+
 @node Flymake
 @section Finding Syntax Errors On The Fly
 @cindex checking syntax
diff --git a/etc/NEWS b/etc/NEWS
index 848b66d..6a89182 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -182,6 +182,13 @@ by default.
 
 ** Gamegrid
 
+** grep
+
+*** rgrep, lgrep and zrgrep now hide part of the command line
+that contains a list of ignored directories and files.
+Clicking on the button with ellipsis unhides the truncated part.
+This truncation can be disabled by the new option 'grep-find-hide'.
+
 ** ERT
 
 +++
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index 755c9c7..9b2c6f1 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -433,6 +433,26 @@ See `compilation-error-regexp-alist' for format details.")
                       help-echo "Number of matches so far")
     "]"))
 
+(defcustom grep-find-hide t
+  "If non-nil, hide part of rgrep/lgrep/zrgrep command line.
+The hidden part contains a list of ignored directories and files.
+Clicking on the button-like ellipsis unhides the abbreviated part
+and reveals the entire command line."
+  :type 'boolean
+  :version "27.1"
+  :group 'grep)
+
+(defvar grep-find-hide-properties
+  (let ((ellipsis (if (char-displayable-p ?…) "[…]" "[...]"))
+        (map (make-sparse-keymap)))
+    (define-key map [down-mouse-2] 'mouse-set-point)
+    (define-key map [mouse-2] 'grep-find-show)
+    (define-key map "\C-m" 'grep-find-show)
+    `(face nil display ,ellipsis mouse-face highlight
+      help-echo "RET, mouse-2: show unabbreviated command"
+      keymap ,map))
+  "Properties of button-like ellipsis on part of rgrep command line.")
+
 (defvar grep-mode-font-lock-keywords
    '(;; Command output lines.
      (": \\(.+\\): \\(?:Permission denied\\|No such \\(?:file or 
directory\\|device or address\\)\\)$"
@@ -450,9 +470,16 @@ See `compilation-error-regexp-alist' for format details.")
       (2 grep-error-face nil t))
      ;; "filename-linenumber-" format is used for context lines in GNU grep,
      ;; "filename=linenumber=" for lines with function names in "git grep -p".
-     ("^.+?\\([-=\0]\\)[0-9]+\\([-=]\\).*\n" (0 grep-context-face)
+     ("^.+?\\([-=\0]\\)[0-9]+\\([-=]\\).*\n"
+      (0 grep-context-face)
       (1 (if (eq (char-after (match-beginning 1)) ?\0)
-             `(face nil display ,(match-string 2))))))
+             `(face nil display ,(match-string 2)))))
+     ;; Hide excessive part of rgrep command
+     ("^find \\(\\. -type d .*\\\\)\\)"
+      (1 (when grep-find-hide grep-find-hide-properties)))
+     ;; Hide excessive part of lgrep command
+     ("^grep \\( *--exclude.*--exclude[^ ]+\\)"
+      (1 (when grep-find-hide grep-find-hide-properties))))
    "Additional things to highlight in grep output.
 This gets tacked on the end of the generated expressions.")
 
@@ -1168,6 +1195,24 @@ to specify a command to run."
                  (shell-quote-argument ")")
                  " -prune -o ")))))
 
+(defun grep-find-show ()
+  "Show the hidden part of rgrep/lgrep/zrgrep command line."
+  (interactive)
+  (when (get-text-property (point) 'display)
+    (let ((beg (or (previous-single-property-change
+                    (min (point-max) (1+ (point))) 'display)
+                   (point)))
+          (end (or (next-single-property-change
+                    (point) 'display)
+                   (point)))
+          (inhibit-modification-hooks t)
+          (inhibit-read-only t)
+         (buffer-undo-list t)
+         (modified (buffer-modified-p)))
+      (remove-list-of-text-properties
+       beg end '(display help-echo mouse-face help-echo keymap))
+      (set-buffer-modified-p modified))))
+
 ;;;###autoload
 (defun zrgrep (regexp &optional files dir confirm template)
   "Recursively grep for REGEXP in gzipped FILES in tree rooted at DIR.



reply via email to

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