emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] feature/gnus-select ad8d136 054/218: Allow toggling Grep c


From: Andrew G Cohen
Subject: [Emacs-diffs] feature/gnus-select ad8d136 054/218: Allow toggling Grep command abbreviation, and rename related symbols
Date: Fri, 14 Dec 2018 03:34:54 -0500 (EST)

branch: feature/gnus-select
commit ad8d136989d1299b510625a39280ab20caf8985c
Author: Charles A. Roelli <address@hidden>
Commit: Andrew G Cohen <address@hidden>

    Allow toggling Grep command abbreviation, and rename related symbols
    
    * lisp/progmodes/grep.el (grep-find-hide): Rename 'grep-find-hide'
    to 'grep-find-abbreviate'.
    (grep-find-hide-properties): Rename to
    'grep-find-abbreviate-properties'.
    (grep-mode-font-lock-keywords): Even when 'grep-find-abbreviate'
    is nil, fontify the verbose command options with property
    'abbreviated-command', so that the toggling command can later find
    these parts without refontifying.
    (grep-find-show): Rename to 'grep-find-toggle-abbreviation',
    simplify the code, and permit toggling the hidden command options.
    (grep-mode-map): Add a menu-bar item and new separator for
    'grep-find-toggle-abbreviation', and fix the incumbent separators
    in the "Grep" menu-bar, of which only one was showing before this
    commit, even though two were specified.
    * etc/NEWS (grep):
    * doc/emacs/building.texi (Grep Searching): Document these
    changes, and mention 'grep-find-toggle-abbreviation'.
---
 doc/emacs/building.texi | 11 ++++++----
 etc/NEWS                |  6 ++++--
 lisp/progmodes/grep.el  | 55 +++++++++++++++++++++++++++----------------------
 3 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/doc/emacs/building.texi b/doc/emacs/building.texi
index 0697e1b..e1c3cea 100644
--- a/doc/emacs/building.texi
+++ b/doc/emacs/building.texi
@@ -434,14 +434,17 @@ 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
address@hidden grep-find-abbreviate
address@hidden grep-find-toggle-abbreviation
   By default, the shell commands constructed for @code{lgrep},
 @code{rgrep}, and @code{zgrep} are abbreviated for display by
 concealing the part that contains a long list of files and directories
 to ignore.  You can reveal the concealed part by clicking on the
-button with ellipsis, which represents them.  To disable this
-abbreviation of the shell commands, customize the option
address@hidden to a @code{nil} value.
+button with ellipsis, which represents them.  You can also
+interactively toggle viewing the concealed part by typing @kbd{M-x
+grep-find-toggle-abbreviation}.  To disable this abbreviation of the
+shell commands, customize the option @code{grep-find-abbreviate} to a
address@hidden value.
 
 @node Flymake
 @section Finding Syntax Errors On The Fly
diff --git a/etc/NEWS b/etc/NEWS
index bf2b116..57a8ccd 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -228,8 +228,10 @@ by default.
 
 *** 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'.
+Clicking on the button with ellipsis unhides it.
+The abbreviation can be disabled by the new option
+'grep-find-abbreviate'.  The new command
+'grep-find-toggle-abbreviation' toggles it interactively.
 
 ** ERT
 
diff --git a/lisp/progmodes/grep.el b/lisp/progmodes/grep.el
index dc74ad2..8c0e46f 100644
--- a/lisp/progmodes/grep.el
+++ b/lisp/progmodes/grep.el
@@ -286,6 +286,11 @@ See `compilation-error-screen-columns'"
     (define-key map [menu-bar grep]
       (cons "Grep" (make-sparse-keymap "Grep")))
 
+    (define-key map [menu-bar grep grep-find-toggle-abbreviation]
+      '(menu-item "Toggle command abbreviation"
+                  grep-find-toggle-abbreviation
+                  :help "Toggle showing verbose command options"))
+    (define-key map [menu-bar grep compilation-separator3] '("----"))
     (define-key map [menu-bar grep compilation-kill-compilation]
       '(menu-item "Kill Grep" kill-compilation
                  :help "Kill the currently running grep process"))
@@ -308,7 +313,7 @@ See `compilation-error-screen-columns'"
     (define-key map [menu-bar grep compilation-recompile]
       '(menu-item "Repeat grep" recompile
                  :help "Run grep again"))
-    (define-key map [menu-bar grep compilation-separator2] '("----"))
+    (define-key map [menu-bar grep compilation-separator1] '("----"))
     (define-key map [menu-bar grep compilation-first-error]
       '(menu-item "First Match" first-error
                  :help "Restart at the first match, visit corresponding 
location"))
@@ -433,24 +438,26 @@ See `compilation-error-regexp-alist' for format details.")
                       help-echo "Number of matches so far")
     "]"))
 
-(defcustom grep-find-hide t
+(defcustom grep-find-abbreviate 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."
+and reveals the entire command line.  The visibility of the
+abbreviated part can also be toggled with
+`grep-find-toggle-abbreviation'."
   :type 'boolean
   :version "27.1"
   :group 'grep)
 
-(defvar grep-find-hide-properties
+(defvar grep-find-abbreviate-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)
+    (define-key map [mouse-2] 'grep-find-toggle-abbreviation)
+    (define-key map "\C-m" 'grep-find-toggle-abbreviation)
     `(face nil display ,ellipsis mouse-face highlight
       help-echo "RET, mouse-2: show unabbreviated command"
-      keymap ,map))
+      keymap ,map abbreviated-command t))
   "Properties of button-like ellipsis on part of rgrep command line.")
 
 (defvar grep-mode-font-lock-keywords
@@ -476,10 +483,12 @@ and reveals the entire command line."
              `(face nil display ,(match-string 2)))))
      ;; Hide excessive part of rgrep command
      ("^find \\(\\. -type d .*\\\\)\\)"
-      (1 (when grep-find-hide grep-find-hide-properties)))
+      (1 (if grep-find-abbreviate grep-find-abbreviate-properties
+           '(face nil abbreviated-command t))))
      ;; Hide excessive part of lgrep command
      ("^grep \\( *--exclude.*--exclude[^ ]+\\)"
-      (1 (when grep-find-hide grep-find-hide-properties))))
+      (1 (if grep-find-abbreviate grep-find-abbreviate-properties
+           '(face nil abbreviated-command t)))))
    "Additional things to highlight in grep output.
 This gets tacked on the end of the generated expressions.")
 
@@ -1195,23 +1204,19 @@ 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."
+(defun grep-find-toggle-abbreviation ()
+  "Toggle showing 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))))
+  (with-silent-modifications
+    (let* ((beg (next-single-property-change (point-min) 'abbreviated-command))
+           (end (when beg
+                  (next-single-property-change beg 'abbreviated-command))))
+      (if end
+          (if (get-text-property beg 'display)
+              (remove-list-of-text-properties
+               beg end '(display help-echo mouse-face help-echo keymap))
+            (add-text-properties beg end grep-find-abbreviate-properties))
+        (user-error "No abbreviated part to hide/show")))))
 
 ;;;###autoload
 (defun zrgrep (regexp &optional files dir confirm template)



reply via email to

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