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

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

[elpa] externals/vlf de1948e 108/310: Merge branch 'master' into chunk-o


From: Stefan Monnier
Subject: [elpa] externals/vlf de1948e 108/310: Merge branch 'master' into chunk-opt2
Date: Sat, 28 Nov 2020 00:32:56 -0500 (EST)

branch: externals/vlf
commit de1948ed36c087565add3c59f98c5d001b90d04a
Merge: bbda9ab ae775f8
Author: Andrey Kotlarski <m00naticus@gmail.com>
Commit: Andrey Kotlarski <m00naticus@gmail.com>

    Merge branch 'master' into chunk-opt2
---
 vlfi.el | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/vlfi.el b/vlfi.el
index 0b1137e..9b3cbc9 100644
--- a/vlfi.el
+++ b/vlfi.el
@@ -200,9 +200,9 @@ with the prefix argument DECREASE it is halved."
   "Update the current buffer name."
   (rename-buffer (vlfi-format-buffer-name) t))
 
-(defmacro vlfi-get-file-size (file)
+(defun vlfi-get-file-size (file)
   "Get size in bytes of FILE."
-  `(nth 7 (file-attributes ,file)))
+  (nth 7 (file-attributes file)))
 
 (defun vlfi-insert-file (&optional from-end)
   "Insert first chunk of current file contents in current buffer.
@@ -428,6 +428,7 @@ Return cons \(success-status . 
number-of-bytes-moved-back\)."
 (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))))
@@ -561,18 +562,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]