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

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

[elpa] externals/vlf ae775f8 107/310: Extend vlfi-goto-line to count lin


From: Stefan Monnier
Subject: [elpa] externals/vlf ae775f8 107/310: Extend vlfi-goto-line to count lines from the end with negative
Date: Sat, 28 Nov 2020 00:32:56 -0500 (EST)

branch: externals/vlf
commit ae775f88f91957bff5ec093fd944f36b74529a4b
Author: Andrey Kotlarski <m00naticus@gmail.com>
Commit: Andrey Kotlarski <m00naticus@gmail.com>

    Extend vlfi-goto-line to count lines from the end with negative
    argument.
---
 vlfi.el | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/vlfi.el b/vlfi.el
index 2c42013..49548f1 100644
--- a/vlfi.el
+++ b/vlfi.el
@@ -373,6 +373,7 @@ Return number of bytes moved back for this to happen."
 (defun vlfi-re-search (regexp count backward batch-step)
   "Search for REGEXP COUNT number of times forward or BACKWARD.
 BATCH-STEP is amount of overlap between successive chunks."
+  (assert (< 0 count))
   (let* ((match-chunk-start vlfi-start-pos)
          (match-chunk-end vlfi-end-pos)
          (match-start-pos (+ vlfi-start-pos (position-bytes (point))))
@@ -506,18 +507,23 @@ Search is performed chunk by chunk in `vlfi-batch-size' 
memory."
   (vlfi-re-search regexp count t (/ vlfi-batch-size 8)))
 
 (defun vlfi-goto-line (n)
-  "Go to line N."
+  "Go to line N.  If N is negative, count from the end of file."
   (interactive "nGo to line: ")
   (let ((start-pos vlfi-start-pos)
         (end-pos vlfi-end-pos)
         (pos (point))
         (success nil))
     (unwind-protect
-        (progn (vlfi-beginning-of-file)
-               (goto-char (point-min))
-               (setq success (vlfi-re-search "[\n\C-m]" (1- n)
-                                             nil 0)))
-      (unless success
+        (if (< 0 n)
+            (progn (vlfi-beginning-of-file)
+                   (goto-char (point-min))
+                   (setq success (vlfi-re-search "[\n\C-m]" (1- n)
+                                                 nil 0)))
+          (vlfi-end-of-file)
+          (goto-char (point-max))
+          (setq success (vlfi-re-search "[\n\C-m]" (- n) t 0)))
+      (if success
+          (message "Onto line %s" n)
         (vlfi-move-to-chunk start-pos end-pos)
         (goto-char pos)))))
 



reply via email to

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