1
0
mirror of https://github.com/m00natic/vlfi.git synced 2025-04-18 16:50:19 +01:00

Use set-visited-file-name and abstract getting current file size and

updating visited time.
This commit is contained in:
Andrey Kotlarski 2013-08-06 16:23:04 +03:00
parent ce9441fc83
commit 34dfbd202d

30
vlfi.el
View File

@ -102,10 +102,9 @@ buffer. You can customize number of bytes displayed by customizing
`vlfi-batch-size'." `vlfi-batch-size'."
(interactive "fFile to open: ") (interactive "fFile to open: ")
(with-current-buffer (generate-new-buffer "*vlfi*") (with-current-buffer (generate-new-buffer "*vlfi*")
(setq default-directory (file-name-directory (expand-file-name file))) (set-visited-file-name file)
(vlfi-mode) (vlfi-mode)
(setq buffer-file-name file (setq vlfi-file-size (vlfi-get-file-size buffer-file-name))
vlfi-file-size (vlfi-get-file-size file))
(vlfi-insert-file) (vlfi-insert-file)
(switch-to-buffer (current-buffer)))) (switch-to-buffer (current-buffer))))
@ -209,6 +208,12 @@ with the prefix argument DECREASE it is halved."
"Get size in bytes of FILE." "Get size in bytes of FILE."
(nth 7 (file-attributes file))) (nth 7 (file-attributes file)))
(defun vlfi-verify-size ()
"Update file size information if necessary and visited file time."
(unless (verify-visited-file-modtime (current-buffer))
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name))
(set-visited-file-modtime)))
(defun vlfi-insert-file (&optional from-end) (defun vlfi-insert-file (&optional from-end)
"Insert first chunk of current file contents in current buffer. "Insert first chunk of current file contents in current buffer.
With FROM-END prefix, start from the back." With FROM-END prefix, start from the back."
@ -252,8 +257,7 @@ When prefix argument is supplied and positive
When prefix argument is negative When prefix argument is negative
append next APPEND number of batches to the existing buffer." append next APPEND number of batches to the existing buffer."
(interactive "p") (interactive "p")
(or (verify-visited-file-modtime (current-buffer)) (vlfi-verify-size)
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name)))
(let ((end (min (+ vlfi-end-pos (* vlfi-batch-size (let ((end (min (+ vlfi-end-pos (* vlfi-batch-size
(abs append))) (abs append)))
vlfi-file-size))) vlfi-file-size)))
@ -284,8 +288,7 @@ When prefix argument is negative
(interactive "p") (interactive "p")
(if (zerop vlfi-start-pos) (if (zerop vlfi-start-pos)
(error "Already at BOF")) (error "Already at BOF"))
(or (verify-visited-file-modtime (current-buffer)) (vlfi-verify-size)
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name)))
(let ((inhibit-read-only t) (let ((inhibit-read-only t)
(start (max 0 (- vlfi-start-pos (* vlfi-batch-size (start (max 0 (- vlfi-start-pos (* vlfi-batch-size
(abs prepend))))) (abs prepend)))))
@ -314,8 +317,7 @@ When prefix argument is negative
"Move to batch determined by START. "Move to batch determined by START.
Adjust according to file start/end and show `vlfi-batch-size' bytes. Adjust according to file start/end and show `vlfi-batch-size' bytes.
When given MINIMAL flag, skip non important operations." When given MINIMAL flag, skip non important operations."
(or (verify-visited-file-modtime (current-buffer)) (vlfi-verify-size)
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name)))
(setq vlfi-start-pos (max 0 start) (setq vlfi-start-pos (max 0 start)
vlfi-end-pos (min (+ vlfi-start-pos vlfi-batch-size) vlfi-end-pos (min (+ vlfi-start-pos vlfi-batch-size)
vlfi-file-size)) vlfi-file-size))
@ -335,8 +337,7 @@ When given MINIMAL flag, skip non important operations."
(defun vlfi-move-to-chunk (start end &optional minimal) (defun vlfi-move-to-chunk (start end &optional minimal)
"Move to chunk determined by START END. "Move to chunk determined by START END.
When given MINIMAL flag, skip non important operations." When given MINIMAL flag, skip non important operations."
(or (verify-visited-file-modtime (current-buffer)) (vlfi-verify-size)
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name)))
(setq vlfi-start-pos (max 0 start) (setq vlfi-start-pos (max 0 start)
vlfi-end-pos (min end vlfi-file-size)) vlfi-end-pos (min end vlfi-file-size))
(let ((inhibit-read-only t) (let ((inhibit-read-only t)
@ -802,6 +803,7 @@ Save anyway? ")))
(progress-reporter-update reporter read-start-pos)) (progress-reporter-update reporter read-start-pos))
;; pad end with space ;; pad end with space
(erase-buffer) (erase-buffer)
(vlfi-verify-size)
(insert-char 32 size-change) (insert-char 32 size-change)
(write-region nil nil buffer-file-name (- vlfi-file-size (write-region nil nil buffer-file-name (- vlfi-file-size
size-change) t) size-change) t)
@ -811,8 +813,7 @@ Save anyway? ")))
"Read `vlfi-batch-size' bytes from READ-POS and write them \ "Read `vlfi-batch-size' bytes from READ-POS and write them \
back at WRITE-POS. Return nil if EOF is reached, t otherwise." back at WRITE-POS. Return nil if EOF is reached, t otherwise."
(erase-buffer) (erase-buffer)
(or (verify-visited-file-modtime (current-buffer)) (vlfi-verify-size)
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name)))
(let ((read-end (+ read-pos vlfi-batch-size))) (let ((read-end (+ read-pos vlfi-batch-size)))
(insert-file-contents-literally buffer-file-name nil (insert-file-contents-literally buffer-file-name nil
read-pos read-pos
@ -846,8 +847,7 @@ Done by saving content up front and then writing previous batch."
Then write initial buffer content to file at WRITE-POS. Then write initial buffer content to file at WRITE-POS.
If HIDE-READ is non nil, temporarily hide literal read content. If HIDE-READ is non nil, temporarily hide literal read content.
Return nil if EOF is reached, t otherwise." Return nil if EOF is reached, t otherwise."
(or (verify-visited-file-modtime (current-buffer)) (vlfi-verify-size)
(setq vlfi-file-size (vlfi-get-file-size buffer-file-name)))
(let ((read-more (< read-pos vlfi-file-size)) (let ((read-more (< read-pos vlfi-file-size))
(start-write-pos (point-min)) (start-write-pos (point-min))
(end-write-pos (point-max))) (end-write-pos (point-max)))