changeset 38853:a2845b455cbd

(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.
author Eli Zaretskii <eliz@gnu.org>
date Thu, 16 Aug 2001 19:47:24 +0000
parents 6eef1c0f4e74
children 3e55b265569a
files lisp/hexl.el
diffstat 1 files changed, 19 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/hexl.el	Thu Aug 16 17:59:38 2001 +0000
+++ b/lisp/hexl.el	Thu Aug 16 19:47:24 2001 +0000
@@ -206,6 +206,19 @@
 	  ;; 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 @@
 	(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)