From 7851eb98ac0c314cde21f8d28c46a8ca8e0d9ce8 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Thu, 16 Aug 2001 19:48:00 +0000 Subject: [PATCH] (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and original-point for extra CR characters that are added/removed when the buffer is written/read whose EOL type is -dos. --- lisp/ChangeLog | 6 ++++++ lisp/hexl.el | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 8f60cb09d82..b92af6254a0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2001-08-16 Eli Zaretskii + + * hexl.el (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and + original-point for extra CR characters that are added/removed when + the buffer is written/read whose EOL type is -dos. + 2001-08-16 Miles Bader * simple.el (line-move): Undo previous change. diff --git a/lisp/hexl.el b/lisp/hexl.el index e44da8cacda..ae3b88c61e2 100644 --- a/lisp/hexl.el +++ b/lisp/hexl.el @@ -206,6 +206,19 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode. ;; if no argument then we guess at hexl-max-address (setq max-address (+ (* (/ (1- (buffer-size)) 68) 16) 15)) (setq max-address (1- (buffer-size))) + ;; If the buffer's EOL type is -dos, we need to account for + ;; extra CR characters added when hexlify-buffer writes the + ;; buffer to a file. + (when (eq (coding-system-eol-type buffer-file-coding-system) 1) + (setq max-address (+ (count-lines (point-min) (point-max)) + max-address)) + ;; But if there's no newline at the last line, we are off by + ;; one; adjust. + (or (eq (char-before (point-max)) ?\n) + (setq max-address (1- max-address))) + (setq original-point (+ (count-lines (point-min) (point)) + original-point)) + (or (bolp) (setq original-point (1- original-point)))) (hexlify-buffer) (set-buffer-modified-p modified)) (make-local-variable 'hexl-max-address) @@ -306,6 +319,12 @@ With arg, don't unhexlify buffer." (dehexlify-buffer) (remove-hook 'write-contents-hooks 'hexl-save-buffer) (set-buffer-modified-p modified) + (goto-char original-point) + ;; Maybe adjust point for the removed CR characters. + (when (eq (coding-system-eol-type buffer-file-coding-system) 1) + (setq original-point (- original-point + (count-lines (point-min) (point)))) + (or (bobp) (setq original-point (1+ original-point)))) (goto-char original-point))) (remove-hook 'after-revert-hook 'hexl-after-revert-hook t) -- 2.39.5