[Top][All Lists]

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

[elpa] master c4b9e25 249/272: Add much faster scrolling to counsel-grep

From: Oleh Krehel
Subject: [elpa] master c4b9e25 249/272: Add much faster scrolling to counsel-grep
Date: Mon, 25 Apr 2016 10:13:28 +0000

branch: master
commit c4b9e2576b527109e8c09b29d6e102edb5c5492f
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>

    Add much faster scrolling to counsel-grep
    * counsel.el (counsel-grep-last-line): New defvar.
    (counsel-grep): Set `counsel-grep-last-line' to nil.
    (counsel-grep-action): Instead of going to `point-min' and
    `forward-line' with a huge arg (e.g. to scroll 50K lines). Scroll
    relative to the last position stored in `counsel-grep-last-line'.
    This change resulted in a much smoother scrolling in a 50K line file
    with 22K matches.
 counsel.el |   12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/counsel.el b/counsel.el
index 864340a..745d054 100644
--- a/counsel.el
+++ b/counsel.el
@@ -1411,6 +1411,8 @@ the command."
        (format counsel-grep-base-command regex counsel--git-grep-dir))
+(defvar counsel-grep-last-line nil)
 (defun counsel-grep-action (x)
@@ -1424,8 +1426,13 @@ the command."
                    (setq line-number (match-string-no-properties 2 x)))
                   (t nil))
         (find-file file-name)
-        (goto-char (point-min))
-        (forward-line (1- (string-to-number line-number)))
+        (setq line-number (string-to-number line-number))
+        (if (null counsel-grep-last-line)
+            (progn
+              (goto-char (point-min))
+              (forward-line (1- (setq counsel-grep-last-line line-number))))
+          (forward-line (- line-number counsel-grep-last-line))
+          (setq counsel-grep-last-line line-number))
         (re-search-forward (ivy--regex ivy-text t) (line-end-position) t)
         (if (eq ivy-exit 'done)
@@ -1465,6 +1472,7 @@ the command."
 (defun counsel-grep ()
   "Grep for a string in the current file."
+  (setq counsel-grep-last-line nil)
   (setq counsel--git-grep-dir (buffer-file-name))
   (let ((init-point (point))

reply via email to

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