1
0
mirror of https://github.com/m00natic/vlfi.git synced 2024-10-05 18:30:51 +01:00

Move vlf information from buffer name to the mode line.

This commit is contained in:
Andrey Kotlarski 2014-12-12 01:45:04 +02:00
parent a7be7136be
commit d1a6800b5b
6 changed files with 26 additions and 43 deletions

View File

@ -91,6 +91,12 @@ default. Here's example how to add another prefix (*C-x v*):
'(define-key vlf-prefix-map "\C-xv" vlf-mode-map))
#+END_SRC
** Overall position indicators
To see which part of the file is currently visited and how many
batches there are in overall (using the current batch size), look at
the VLF section in the mode line, file size is also there.
** Batch size control
By default *VLF* gathers statistics over how primitive operations
@ -133,10 +139,7 @@ append prefix number of batches.
*C-c C-v [* and *C-c C-v ]* take you to the beginning and end of file
respectively.
*C-c C-v j* jumps to given chunk. To see where you are in file and
how many chunks there are (using the current batch size), look at the
parenthesized part of the buffer name, batch size is also indicated at
the end.
*C-c C-v j* jumps to particular batch number.
** Follow point

View File

@ -71,15 +71,6 @@ FILE if given is filename to be used, otherwise `buffer-file-truename'."
"Print FILE-SIZE in MB."
(format "%.3fMB" (/ file-size 1048576.0))))
(defun vlf-update-buffer-name ()
"Update the current buffer name."
(rename-buffer (format "%s(%d/%d)[%s]"
(file-name-nondirectory buffer-file-name)
(/ vlf-end-pos vlf-batch-size)
(/ vlf-file-size vlf-batch-size)
(file-size-human-readable vlf-batch-size))
t))
(defmacro vlf-with-undo-disabled (&rest body)
"Execute BODY with temporarily disabled undo."
`(let ((undo-list buffer-undo-list))
@ -87,9 +78,8 @@ FILE if given is filename to be used, otherwise `buffer-file-truename'."
(unwind-protect (progn ,@body)
(setq buffer-undo-list undo-list))))
(defun vlf-move-to-chunk (start end &optional minimal)
(defun vlf-move-to-chunk (start end)
"Move to chunk enclosed by START END bytes.
When given MINIMAL flag, skip non important operations.
If same as current chunk is requested, do nothing.
Return number of bytes moved back for proper decoding and number of
bytes added to the end."
@ -105,17 +95,13 @@ bytes added to the end."
0)))
(setq vlf-start-pos place
vlf-end-pos place)
(or minimal (vlf-update-buffer-name))
(cons (- start place) (- place end))))
(if (derived-mode-p 'hexl-mode)
(setq start (- start (mod start hexl-bits))
end (+ end (- hexl-bits (mod end hexl-bits)))))
(if (or (/= start vlf-start-pos)
(/= end vlf-end-pos))
(let ((shifts (vlf-move-to-chunk-1 start end)))
(and shifts (not minimal)
(vlf-update-buffer-name))
shifts))))
(vlf-move-to-chunk-1 start end))))
(defun vlf-move-to-chunk-1 (start end)
"Move to chunk enclosed by START END keeping as much edits if any.

View File

@ -143,11 +143,11 @@ beginning of difference list."
(defun vlf-next-chunk ()
"Move to next chunk."
(vlf-move-to-chunk vlf-end-pos (+ vlf-end-pos vlf-batch-size) t))
(vlf-move-to-chunk vlf-end-pos (+ vlf-end-pos vlf-batch-size)))
(defun vlf-prev-chunk ()
"Move to previous chunk."
(vlf-move-to-chunk (- vlf-start-pos vlf-batch-size) vlf-start-pos t))
(vlf-move-to-chunk (- vlf-start-pos vlf-batch-size) vlf-start-pos))
(defun vlf-ediff-next (buffer-A buffer-B ediff-buffer
&optional next-func)
@ -205,10 +205,7 @@ logical chunks in case there is no difference at the current ones."
(- vlf-file-size
vlf-start-pos))))
(progress-reporter-done reporter)
(if (or (not end-A) (not end-B))
(progn (vlf-update-buffer-name)
(set-buffer buffer-A)
(vlf-update-buffer-name))
(when (and end-A end-B)
(if forward-p
(let ((max-file-size vlf-file-size))
(vlf-move-to-chunk (- max-file-size vlf-batch-size)

View File

@ -90,7 +90,7 @@ Return t if search has been at least partially successful."
batch-move
match-start-pos)))
(vlf-move-to-chunk (- end vlf-batch-size)
end t))
end))
(goto-char (if (or is-hexl
(<= vlf-end-pos
match-start-pos))
@ -124,8 +124,7 @@ Return t if search has been at least partially successful."
batch-move
match-end-pos)))
(vlf-move-to-chunk start
(+ start vlf-batch-size)
t))
(+ start vlf-batch-size)))
(goto-char (if (or is-hexl
(<= match-end-pos
vlf-start-pos))
@ -168,8 +167,7 @@ Return nil if nothing found."
(message "Not found (%f secs)" (- (float-time) time))
nil)
(let ((success (zerop to-find)))
(if success
(vlf-update-buffer-name)
(or success
(vlf-move-to-chunk match-chunk-start match-chunk-end))
(setq vlf-batch-size (vlf-tune-optimal-load
(if (derived-mode-p 'hexl-mode)
@ -310,7 +308,6 @@ Search is performed chunk by chunk in `vlf-batch-size' memory."
(unless success
(vlf-with-undo-disabled
(vlf-move-to-chunk-2 start-pos end-pos))
(vlf-update-buffer-name)
(goto-char pos)
(setq vlf-batch-size batch-size)
(message "Unable to find line"))

View File

@ -58,8 +58,7 @@ If changing size of chunk, shift remaining file content."
(if hexl (vlf-tune-hexlify))
(setq vlf-file-size (vlf-get-file-size
buffer-file-truename)
vlf-end-pos vlf-file-size)
(vlf-update-buffer-name))
vlf-end-pos vlf-file-size))
(let* ((region-length (vlf-tune-encode-length (point-min)
(point-max)))
(size-change (- vlf-end-pos vlf-start-pos
@ -99,7 +98,6 @@ If changing size of chunk, shift remaining file content."
vlf-batch-size)
(+ vlf-start-pos vlf-batch-size)
vlf-end-pos))
(vlf-update-buffer-name)
(goto-char pos)
(message "Save took %f seconds" (- (float-time) time)))))))
(run-hook-with-args 'vlf-after-batch-functions 'write))

16
vlf.el
View File

@ -103,7 +103,11 @@ values are: `write', `ediff', `occur', `search', `goto-line'."
(define-minor-mode vlf-mode
"Mode to browse large files in."
:lighter " VLF" :group 'vlf :keymap vlf-prefix-map
:group 'vlf :keymap vlf-prefix-map
:lighter (:eval (format " VLF[%d/%d](%s)"
(/ vlf-end-pos vlf-batch-size)
(/ vlf-file-size vlf-batch-size)
(file-size-human-readable vlf-file-size)))
(cond (vlf-mode
(set (make-local-variable 'require-final-newline) nil)
(add-hook 'write-file-functions 'vlf-write nil t)
@ -146,8 +150,7 @@ values are: `write', `ediff', `occur', `search', `goto-line'."
(let ((pos (+ vlf-start-pos (position-bytes (point)))))
(vlf-with-undo-disabled
(insert-file-contents buffer-file-name t nil nil t))
(goto-char (byte-to-position pos))))
(rename-buffer (file-name-nondirectory buffer-file-name) t))
(goto-char (byte-to-position pos)))))
(t (setq vlf-mode t))))
(defun vlf-keep-alive ()
@ -331,16 +334,15 @@ Ask for confirmation if NOCONFIRM is nil."
(error "Save or discard your changes first")
t))
(defun vlf-move-to-batch (start &optional minimal)
(defun vlf-move-to-batch (start)
"Move to batch determined by START.
Adjust according to file start/end and show `vlf-batch-size' bytes.
When given MINIMAL flag, skip non important operations."
Adjust according to file start/end and show `vlf-batch-size' bytes."
(vlf-verify-size)
(let* ((start (max 0 start))
(end (min (+ start vlf-batch-size) vlf-file-size)))
(if (= vlf-file-size end) ; re-adjust start
(setq start (max 0 (- end vlf-batch-size))))
(vlf-move-to-chunk start end minimal)))
(vlf-move-to-chunk start end)))
(defun vlf-next-batch-from-point ()
"Display batch of file data starting from current point."