[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/vlf d2bd47c 100/310: More attempts to optimize decoding
From: |
Stefan Monnier |
Subject: |
[elpa] externals/vlf d2bd47c 100/310: More attempts to optimize decoding. |
Date: |
Sat, 28 Nov 2020 00:32:55 -0500 (EST) |
branch: externals/vlf
commit d2bd47c2b4365293d6153daaa9c3ce26958c2b48
Author: Andrey Kotlarski <m00naticus@gmail.com>
Commit: Andrey Kotlarski <m00naticus@gmail.com>
More attempts to optimize decoding.
---
vlfi.el | 95 ++++++++++++++++++++++++++++++++++++++++++-----------------------
1 file changed, 62 insertions(+), 33 deletions(-)
diff --git a/vlfi.el b/vlfi.el
index b6f778d..5e10c60 100644
--- a/vlfi.el
+++ b/vlfi.el
@@ -287,7 +287,7 @@ When given MINIMAL flag, skip non important operations."
vlfi-file-size)))
(if (= vlfi-file-size end) ; re-adjust start
(setq start (max 0 (- end vlfi-batch-size))))
- (vlfi-move-to-chunk start end)))
+ (vlfi-move-to-chunk start end minimal)))
(defun vlfi-move-to-chunk (start end &optional minimal)
"Move to chunk determined by START END.
@@ -313,8 +313,8 @@ When given MINIMAL flag, skip non important operations."
(let ((inhibit-read-only t)
(pos (position-bytes (point))))
(erase-buffer)
- (insert-file-contents buffer-file-name nil
- vlfi-start-pos vlfi-end-pos)
+ (insert-file-contents-literally
+ buffer-file-name nil vlfi-start-pos vlfi-end-pos)
(goto-char (or (byte-to-position
(+ pos (vlfi-adjust-chunk)))
(point-max))))
@@ -327,66 +327,95 @@ When given MINIMAL flag, skip non important operations."
(let ((pos (+ (position-bytes (point))
vlfi-start-pos))
(adjust-encoding (or (< vlfi-end-pos end)
- (< start vlfi-start-pos))))
+ (< start vlfi-start-pos)))
+ (adjust-chunk (< start vlfi-start-pos)))
(if adjust-encoding
(let ((inhibit-read-only t))
(encode-coding-region (point-min) (point-max)
buffer-file-coding-system)))
+ (vlfi-print-offset "require goto:" start end)
(cond ((< end vlfi-end-pos) ; adjust ends
- (let ((inhibit-read-only t))
- (delete-region (1+ (- end vlfi-start-pos))
- (point-max))))
+ (let ((inhibit-read-only t)
+ (offset (- end vlfi-start-pos)))
+ (if adjust-encoding
+ (progn (delete-region offset (point-max))
+ (setq vlfi-end-pos end)))
+ (setq offset (byte-to-position offset))
+ (delete-region offset (point-max))
+ (setq vlfi-end-pos (+ vlfi-start-pos
+ (position-bytes
+ (1- offset))))))
((< vlfi-end-pos end)
(goto-char (point-max))
(let ((inhibit-read-only t))
(insert-file-contents-literally
- buffer-file-name nil vlfi-end-pos end))))
+ buffer-file-name nil vlfi-end-pos end))
+ (setq vlfi-end-pos end)))
(cond ((< start vlfi-start-pos) ; adjust start
(goto-char (point-min))
(let ((inhibit-read-only t))
(insert-file-contents-literally
- buffer-file-name nil start (1- vlfi-start-pos)))
+ buffer-file-name nil start vlfi-start-pos))
(setq vlfi-start-pos start))
((< 3 (- start vlfi-start-pos))
- (let ((inhibit-read-only t))
- (delete-region (point-min)
- (byte-to-position
- (- start vlfi-start-pos 1))))
+ (let ((inhibit-read-only t)
+ (offset (- start vlfi-start-pos)))
+ (if adjust-encoding
+ (progn (delete-region (point-min) offset)
+ (setq vlfi-start-pos start))
+ (setq offset (byte-to-position offset))
+ (setq vlfi-start-pos (+ vlfi-start-pos
+ (position-bytes
+ (1+ offset))))
+ (delete-region (point-min) offset)))
(setq vlfi-start-pos start)))
+ (vlfi-print-offset "actual goto:" vlfi-start-pos vlfi-end-pos)
+ (if adjust-chunk (vlfi-adjust-chunk))
(if adjust-encoding
(let ((inhibit-read-only t))
(decode-coding-region (point-min) (point-max)
buffer-file-coding-system)))
- (or modified
- (set-buffer-modified-p nil))
- (setq vlfi-end-pos end)
+ (or modified (set-buffer-modified-p nil))
(goto-char
(cond ((< pos vlfi-start-pos) (point-min))
((< vlfi-end-pos pos) (point-max))
(t (or (byte-to-position (- pos vlfi-start-pos))
(point-min)))))))
- (if changed
- (set-visited-file-modtime)))
+ (if changed (set-visited-file-modtime)))
(or minimal (vlfi-update-buffer-name))))
+(defun vlfi-print-offset (text start end)
+ (message "%s: %d %d" text start end))
+
(defun vlfi-adjust-chunk ()
"Adjust chunk beginning until content can be properly decoded.
Return number of bytes moved back for this to happen."
- (let ((shift 0))
- (while (and (not (zerop vlfi-start-pos))
- (< shift 3)
- (/= (- vlfi-end-pos vlfi-start-pos)
- (length (encode-coding-region
- (point-min) (point-max)
- buffer-file-coding-system t))))
- (setq shift (1+ shift)
- vlfi-start-pos (1- vlfi-start-pos))
- (let ((inhibit-read-only t))
- (erase-buffer)
- (insert-file-contents buffer-file-name nil
- vlfi-start-pos vlfi-end-pos)))
- (set-buffer-modified-p nil)
- shift))
+ (with-coding-priority '(utf-8)
+ (setq buffer-file-coding-system 'utf-8;; (detect-coding-region (point-min)
+ ;; (point-max)
+ ;; t)
+ )
+ (let ((shift 0)
+ (inhibit-read-only t))
+ (while (and (not (zerop vlfi-start-pos))
+ (< shift 3)
+ (/= (- vlfi-end-pos vlfi-start-pos)
+ (length (encode-coding-string
+ (decode-coding-region
+ (point-min) (point-max)
+ buffer-file-coding-system t)
+ buffer-file-coding-system t))))
+ (setq shift (1+ shift)
+ vlfi-start-pos (1- vlfi-start-pos))
+ (goto-char (point-min))
+ (insert-file-contents-literally
+ buffer-file-name nil vlfi-start-pos (1+ vlfi-start-pos))
+ (setq buffer-file-coding-system 'utf-8
+ ;; (detect-coding-region (point-min) (point-max) t)
+ ))
+ (decode-coding-region (point-min) (point-max)
+ buffer-file-coding-system)
+ shift)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; search
- [elpa] externals/vlf 681d3d9 084/310: Add vlfi-occur-mode., (continued)
- [elpa] externals/vlf 681d3d9 084/310: Add vlfi-occur-mode., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 641ff4b 085/310: First feature complete version of vlfi-occur., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 1dcd122 086/310: Use overlays for number indicators., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf f14ef6c 087/310: Usability improvements to vlfi-occur., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 54927af 088/310: Update README and bump version., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf b8cc344 091/310: Add more detailed usage details., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf eaf85e5 093/310: Add key-binding to vlfi-mode-map in vlfi-edit-mode-map., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf e4d886a 092/310: Add check if VLFI buffer has been modified before occur jumping to new, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf a63ea7a 095/310: Grammar fixes., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 57eb4c2 099/310: Initial attempt at optimizing chunk access., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf d2bd47c 100/310: More attempts to optimize decoding.,
Stefan Monnier <=
- [elpa] externals/vlf 7bfe665 102/310: More secure chunk decode adjustment and minor fixes., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf bbda9ab 105/310: Merge branch 'master' into chunk-opt2, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 1ac1eec 106/310: Turn vlfi-get-file-size to function., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf de1948e 108/310: Merge branch 'master' into chunk-opt2, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf c827c3e 110/310: Prevent standard save procedure invocation in case user postpones, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf b943008 113/310: Bump version and update README., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf c1aedbc 116/310: Update README: VLFI is now development version of VLF., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 616d676 114/310: Alters vlfi to respect the default-directory variable when opening, Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 3d652fe 103/310: Minor documentation fixes., Stefan Monnier, 2020/11/28
- [elpa] externals/vlf 4589c25 112/310: Return to current position after occur ending with quit., Stefan Monnier, 2020/11/28