mirror of
				https://github.com/m00natic/vlfi.git
				synced 2025-10-31 15:11:47 +00:00 
			
		
		
		
	Move vlf information from buffer name to the mode line.
This commit is contained in:
		
							
								
								
									
										11
									
								
								README.org
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.org
									
									
									
									
									
								
							| @@ -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 | ||||
|  | ||||
|   | ||||
							
								
								
									
										18
									
								
								vlf-base.el
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								vlf-base.el
									
									
									
									
									
								
							| @@ -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. | ||||
|   | ||||
| @@ -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) | ||||
|   | ||||
| @@ -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,9 +167,8 @@ 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) | ||||
|         (vlf-move-to-chunk match-chunk-start match-chunk-end)) | ||||
|       (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) | ||||
|                                 '(:hexl :raw) | ||||
| @@ -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")) | ||||
|   | ||||
| @@ -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
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								vlf.el
									
									
									
									
									
								
							| @@ -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." | ||||
|   | ||||
		Reference in New Issue
	
	Block a user