emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/consult bd0e74d 1/2: consult-grep: Improve handling of


From: ELPA Syncer
Subject: [elpa] externals/consult bd0e74d 1/2: consult-grep: Improve handling of context lines
Date: Thu, 11 Nov 2021 01:57:13 -0500 (EST)

branch: externals/consult
commit bd0e74d026d721c5f8ed71e98ba54d4605002e1c
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Daniel Mendler <mail@daniel-mendler.de>

    consult-grep: Improve handling of context lines
    
    * Add face consult-grep-context
    * Filter out empty context lines
---
 consult.el | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/consult.el b/consult.el
index 3c94657..fd0bf7c 100644
--- a/consult.el
+++ b/consult.el
@@ -218,7 +218,7 @@ See `consult--multi' for a description of the source 
values."
   :type 'integer)
 
 (defconst consult--grep-match-regexp
-  "\\`\\(?:\\./\\)?\\([^\n\0]+\\)\0\\([0-9]+\\)[-:\0]"
+  "\\`\\(?:\\./\\)?\\([^\n\0]+\\)\0\\([0-9]+\\)\\([-:\0]\\)"
   "Regexp used to match file and line of grep output.")
 
 (defcustom consult-grep-args
@@ -372,6 +372,10 @@ Used by `consult-completion-in-region', `consult-yank' and 
`consult-history'.")
   '((t :inherit font-lock-function-name-face))
   "Face used to highlight files in `consult-buffer'.")
 
+(defface consult-grep-context
+  '((t :inherit shadow))
+  "Face used to highlight grep context in `consult-grep'.")
+
 (defface consult-bookmark
   '((t :inherit font-lock-constant-face))
   "Face used to highlight bookmarks in `consult-buffer'.")
@@ -4084,19 +4088,26 @@ BUILDER is the command argument builder."
         (let (result)
           (save-match-data
             (dolist (str action)
-              (when (string-match consult--grep-match-regexp str)
+              (when (and (string-match consult--grep-match-regexp str)
+                         ;; Filter out empty context lines
+                         (or (/= (aref str (match-beginning 3)) ?-)
+                             (/= (match-end 0) (length str))))
                 (let* ((file (match-string 1 str))
                        (line (match-string 2 str))
+                       (ctx (= (aref str (match-beginning 3)) ?-))
                        (content (substring str (match-end 0)))
-                       (file-len (length file)))
+                       (file-len (length file))
+                       (line-len (length line)))
                   (when (> (length content) consult-grep-max-columns)
                     (setq content (substring content 0 
consult-grep-max-columns)))
                   (when highlight
                     (funcall highlight content))
-                  (setq str (concat file ":" line ":" content))
+                  (setq str (concat file ":" line (if ctx "-" ":") content))
                   ;; Store file name in order to avoid allocations in 
`consult--grep-group'
                   (add-text-properties 0 file-len `(face consult-file 
consult--grep-file ,file) str)
-                  (put-text-property (1+ file-len) (+ 1 file-len (length 
line)) 'face 'consult-line-number str)
+                  (put-text-property (1+ file-len) (+ 1 file-len line-len) 
'face 'consult-line-number str)
+                  (when ctx
+                    (add-face-text-property (+ 1 file-len line-len) (length 
str) 'consult-grep-context 'append str))
                   (push str result)))))
           (funcall async (nreverse result))))
        (t (funcall async action))))))



reply via email to

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