mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-29 19:48:19 +00:00
(hexl-current-address): New arg VALIDATE.
Handle point values in the ASCII text section and in the addresses. (hexl-insert-char): Handle point located in the ASCII text.
This commit is contained in:
parent
aaf6c7ef84
commit
6bbb008e7e
48
lisp/hexl.el
48
lisp/hexl.el
@ -269,13 +269,20 @@ Ask the user for confirmation."
|
||||
(set-buffer-modified-p modified)
|
||||
(goto-char original-point))))
|
||||
|
||||
(defun hexl-current-address ()
|
||||
(defun hexl-current-address (&optional validate)
|
||||
"Return current hexl-address."
|
||||
(interactive)
|
||||
(let ((current-column (- (% (point) 68) 11))
|
||||
(hexl-address 0))
|
||||
(setq hexl-address (+ (* (/ (point) 68) 16)
|
||||
(/ (- current-column (/ current-column 5)) 2)))
|
||||
(if (< current-column 0)
|
||||
(if validate
|
||||
(error "Point is not on a character in the file")
|
||||
(setq current-column 0)))
|
||||
(setq hexl-address
|
||||
(+ (* (/ (point) 68) 16)
|
||||
(if (>= current-column 41)
|
||||
(- current-column 41)
|
||||
(/ (- current-column (/ current-column 5)) 2))))
|
||||
hexl-address))
|
||||
|
||||
(defun hexl-address-to-marker (address)
|
||||
@ -577,17 +584,32 @@ You may also type up to 3 octal digits, to insert a character with that code"
|
||||
|
||||
(defun hexl-insert-char (ch num)
|
||||
"Insert a character in a hexl buffer."
|
||||
(let ((address (hexl-current-address)))
|
||||
(let ((address (hexl-current-address t)))
|
||||
(while (> num 0)
|
||||
(delete-char 2)
|
||||
(insert (format "%02x" ch))
|
||||
(goto-char
|
||||
(+ (* (/ address 16) 68) 52 (% address 16)))
|
||||
(delete-char 1)
|
||||
(insert (hexl-printable-character ch))
|
||||
(or (eq address hexl-max-address)
|
||||
(setq address (1+ address)))
|
||||
(hexl-goto-address address)
|
||||
(let ((hex-position
|
||||
(+ (* (/ address 16) 68)
|
||||
11
|
||||
(* 2 (% address 16))
|
||||
(/ (% address 16) 2)))
|
||||
(ascii-position
|
||||
(+ (* (/ address 16) 68) 52 (% address 16)))
|
||||
at-ascii-position)
|
||||
(if (= (point) ascii-position)
|
||||
(setq at-ascii-position t))
|
||||
(goto-char hex-position)
|
||||
(delete-char 2)
|
||||
(insert (format "%02x" ch))
|
||||
(goto-char ascii-position)
|
||||
(delete-char 1)
|
||||
(insert (hexl-printable-character ch))
|
||||
(or (eq address hexl-max-address)
|
||||
(setq address (1+ address)))
|
||||
(hexl-goto-address address)
|
||||
(if at-ascii-position
|
||||
(progn
|
||||
(beginning-of-line)
|
||||
(forward-char 51)
|
||||
(forward-char (% address 16)))))
|
||||
(setq num (1- num)))))
|
||||
|
||||
;; hex conversion
|
||||
|
Loading…
Reference in New Issue
Block a user