annotate lisp/hexl.el @ 42307:922f0ef2951b

(balance-windows): Use new PRESERVE-BEFORE arg to enlarge-window. Use save-selected-window. Don't try to resize windows that end at the bottom "level". Retry changing the sizes until the windows get the desired sizes. Discount the minibuffer when computing total height available.
author Richard M. Stallman <rms@gnu.org>
date Tue, 25 Dec 2001 10:34:39 +0000
parents be1c031e600f
children 57b39ddab58f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 37722
diff changeset
1 ;;; hexl.el --- edit a file in a hex dump format using the hexl filter
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
2
37722
5d56786629e4 (hexl-current-address): Print a message when called
Gerd Moellmann <gerd@gnu.org>
parents: 37168
diff changeset
3 ;; Copyright (C) 1989, 1994, 1998, 2001 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
4
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
5 ;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu>
5140
9cde7d7fea1f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 5066
diff changeset
6 ;; Maintainer: FSF
9cde7d7fea1f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 5066
diff changeset
7 ;; Keywords: data
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
8
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
11 ;; GNU Emacs is free software; you can redistribute it and/or modify
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
13 ;; the Free Software Foundation; either version 2, or (at your option)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
14 ;; any later version.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
14169
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13988
diff changeset
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13988
diff changeset
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
83f275dcd93a Update FSF's address.
Erik Naggum <erik@naggum.no>
parents: 13988
diff changeset
24 ;; Boston, MA 02111-1307, USA.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
25
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
26 ;;; Commentary:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
27
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
28 ;; This package implements a major mode for editing binary files. It uses
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
29 ;; a program called hexl, supplied with the GNU Emacs distribution, that
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
30 ;; can filter a binary into an editable format or from the format back into
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
31 ;; binary. For full instructions, invoke `hexl-mode' on an empty buffer and
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
32 ;; do `M-x describe-mode'.
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
33 ;;
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 ;; This may be useful in your .emacs:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 ;; (autoload 'hexl-find-file "hexl"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 ;; "Edit file FILENAME in hexl-mode." t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
38 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
39 ;; (define-key global-map "\C-c\C-h" 'hexl-find-file)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
41 ;; NOTE: Remember to change HEXL-PROGRAM or HEXL-OPTIONS if needed.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
42 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
43 ;; Currently hexl only supports big endian hex output with 16 bit
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44 ;; grouping.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
45 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
46 ;; -iso in `hexl-options' will allow iso characters to display in the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 ;; ASCII region of the screen (if your emacs supports this) instead of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48 ;; changing them to dots.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
50 ;;; Code:
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
51
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
52 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
53 ;; vars here
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
54 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
55
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
56 (defgroup hexl nil
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
57 "Edit a file in a hex dump format using the hexl filter."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
58 :group 'data)
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
59
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
60
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
61 (defcustom hexl-program "hexl"
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
62 "The program that will hexlify and dehexlify its stdin.
3215
8463158ec42e Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3137
diff changeset
63 `hexl-program' will always be concatenated with `hexl-options'
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
64 and \"-de\" when dehexlifying a buffer."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
65 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
66 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
68 (defcustom hexl-iso ""
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69 "If your emacs can handle ISO characters, this should be set to
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
70 \"-iso\" otherwise it should be \"\"."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
71 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
72 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
74 (defcustom hexl-options (format "-hex %s" hexl-iso)
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
75 "Options to hexl-program that suit your needs."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
76 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
77 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
78
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
79 (defcustom hexlify-command
24659
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
80 (format "%s %s"
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
81 (shell-quote-argument
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
82 (expand-file-name hexl-program exec-directory))
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
83 hexl-options)
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
84 "The command to use to hexlify a buffer."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
85 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
86 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
87
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
88 (defcustom dehexlify-command
24659
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
89 (format "%s -de %s"
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
90 (shell-quote-argument
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
91 (expand-file-name hexl-program exec-directory))
991a19a97565 (hexlify-command): Apply shell-quote-argument after
Andrew Innes <andrewi@gnu.org>
parents: 23321
diff changeset
92 hexl-options)
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
93 "The command to use to unhexlify a buffer."
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
94 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
95 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
96
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
97 (defcustom hexl-follow-ascii t
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
98 "If non-nil then highlight the ASCII character corresponding to point."
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
99 :type 'boolean
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21566
diff changeset
100 :group 'hexl
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21566
diff changeset
101 :version "20.3")
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
102
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
103 (defvar hexl-max-address 0
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
104 "Maximum offset into hexl buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
105
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
106 (defvar hexl-mode-map nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
107
10976
354c9e79de15 (hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents: 10948
diff changeset
108 (defvar hexl-mode-old-local-map)
354c9e79de15 (hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents: 10948
diff changeset
109 (defvar hexl-mode-old-mode-name)
354c9e79de15 (hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents: 10948
diff changeset
110 (defvar hexl-mode-old-major-mode)
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
111 (defvar hexl-mode-old-write-contents-hooks)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
112 (defvar hexl-mode-old-require-final-newline)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
113 (defvar hexl-mode-old-syntax-table)
10976
354c9e79de15 (hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents: 10948
diff changeset
114
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
115 (defvar hexl-ascii-overlay nil
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
116 "Overlay used to highlight ASCII element corresponding to current point.")
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
117 (make-variable-buffer-local 'hexl-ascii-overlay)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
118
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119 ;; routines
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
120
17656
7b61d509af8a (hexl-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17436
diff changeset
121 (put 'hexl-mode 'mode-class 'special)
7b61d509af8a (hexl-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17436
diff changeset
122
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
123 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124 (defun hexl-mode (&optional arg)
25948
ce46ba443d45 * hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents: 25927
diff changeset
125 "\\<hexl-mode-map>A mode for editing binary files in hex dump format.
ce46ba443d45 * hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents: 25927
diff changeset
126 This is not an ordinary major mode; it alters some aspects
ce46ba443d45 * hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents: 25927
diff changeset
127 if the current mode's behavior, but not all; also, you can exit
ce46ba443d45 * hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents: 25927
diff changeset
128 Hexl mode and return to the previous mode using `hexl-mode-exit'.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 This function automatically converts a buffer into the hexl format
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131 using the function `hexlify-buffer'.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132
208
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
133 Each line in the buffer has an \"address\" (displayed in hexadecimal)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
134 representing the offset into the file that the characters on this line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 are at and 16 characters from the file (displayed as hexadecimal
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136 values grouped every 16 bits) and as their ASCII values.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138 If any of the characters (displayed as ASCII characters) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139 unprintable (control or meta characters) they will be replaced as
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 periods.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141
208
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
142 If `hexl-mode' is invoked with an argument the buffer is assumed to be
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
143 in hexl format.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
144
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145 A sample format:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147 HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ASCII-TEXT
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 -------- ---- ---- ---- ---- ---- ---- ---- ---- ----------------
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149 00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64 This is hexl-mod
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 00000010: 652e 2020 4561 6368 206c 696e 6520 7265 e. Each line re
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 00000020: 7072 6573 656e 7473 2031 3620 6279 7465 presents 16 byte
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 00000030: 7320 6173 2068 6578 6164 6563 696d 616c s as hexadecimal
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153 00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74 ASCII.and print
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 00000050: 6162 6c65 2041 5343 4949 2063 6861 7261 able ASCII chara
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155 00000060: 6374 6572 732e 2020 416e 7920 636f 6e74 cters. Any cont
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949 rol or non-ASCII
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
157 00000080: 2063 6861 7261 6374 6572 730a 6172 6520 characters.are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158 00000090: 6469 7370 6c61 7965 6420 6173 2070 6572 displayed as per
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
159 000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e iods in the prin
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160 000000b0: 7461 626c 6520 6368 6172 6163 7465 7220 table character
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161 000000c0: 7265 6769 6f6e 2e0a region..
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163 Movement is as simple as movement in a normal emacs text buffer. Most
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 cursor movement bindings are the same (ie. Use \\[hexl-backward-char], \\[hexl-forward-char], \\[hexl-next-line], and \\[hexl-previous-line]
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165 to move the cursor left, right, down, and up).
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167 Advanced cursor movement commands (ala \\[hexl-beginning-of-line], \\[hexl-end-of-line], \\[hexl-beginning-of-buffer], and \\[hexl-end-of-buffer]) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 also supported.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
169
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
170 There are several ways to change text in hexl mode:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 ASCII characters (character between space (0x20) and tilde (0x7E)) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
173 bound to self-insert so you can simply type the character and it will
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 insert itself (actually overstrike) into the buffer.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
176 \\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177 it isn't bound to self-insert. An octal number can be supplied in place
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178 of another key to insert the octal number's ASCII representation.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 \\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 \\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 \\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 \\[hexl-mode-exit] will exit hexl-mode.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
191 Note: saving the file with any of the usual Emacs commands
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
192 will actually convert it back to binary format while saving.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193
25948
ce46ba443d45 * hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents: 25927
diff changeset
194 You can use \\[hexl-find-file] to visit a file in Hexl mode.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 \\[describe-bindings] for advanced commands."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 (interactive "p")
25948
ce46ba443d45 * hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents: 25927
diff changeset
198 (unless (eq major-mode 'hexl-mode)
15373
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
199 (let ((modified (buffer-modified-p))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
200 (inhibit-read-only t)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
201 (original-point (1- (point)))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
202 max-address)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
203 (and (eobp) (not (bobp))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
204 (setq original-point (1- original-point)))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
205 (if (not (or (eq arg 1) (not arg)))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
206 ;; if no argument then we guess at hexl-max-address
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
207 (setq max-address (+ (* (/ (1- (buffer-size)) 68) 16) 15))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
208 (setq max-address (1- (buffer-size)))
38853
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
209 ;; If the buffer's EOL type is -dos, we need to account for
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
210 ;; extra CR characters added when hexlify-buffer writes the
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
211 ;; buffer to a file.
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
212 (when (eq (coding-system-eol-type buffer-file-coding-system) 1)
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
213 (setq max-address (+ (count-lines (point-min) (point-max))
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
214 max-address))
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
215 ;; But if there's no newline at the last line, we are off by
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
216 ;; one; adjust.
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
217 (or (eq (char-before (point-max)) ?\n)
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
218 (setq max-address (1- max-address)))
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
219 (setq original-point (+ (count-lines (point-min) (point))
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
220 original-point))
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
221 (or (bolp) (setq original-point (1- original-point))))
15373
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
222 (hexlify-buffer)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
223 (set-buffer-modified-p modified))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
224 (make-local-variable 'hexl-max-address)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
225 (setq hexl-max-address max-address)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
226 (hexl-goto-address original-point))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
227
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
228 ;; We do not turn off the old major mode; instead we just
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
229 ;; override most of it. That way, we can restore it perfectly.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
230 (make-local-variable 'hexl-mode-old-local-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
231 (setq hexl-mode-old-local-map (current-local-map))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
232 (use-local-map hexl-mode-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
233
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
234 (make-local-variable 'hexl-mode-old-mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
235 (setq hexl-mode-old-mode-name mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
236 (setq mode-name "Hexl")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
237
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
238 (make-local-variable 'hexl-mode-old-major-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
239 (setq hexl-mode-old-major-mode major-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
240 (setq major-mode 'hexl-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
241
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
242 (make-local-variable 'hexl-mode-old-syntax-table)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
243 (setq hexl-mode-old-syntax-table (syntax-table))
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
244 (set-syntax-table (standard-syntax-table))
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
245
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
246 (make-local-variable 'hexl-mode-old-write-contents-hooks)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
247 (setq hexl-mode-old-write-contents-hooks write-contents-hooks)
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
248 (make-local-variable 'write-contents-hooks)
4966
82353ffa44b7 (hexl-mode): Use `add-hook' to modify buffer local `write-contents-hooks'.
Richard M. Stallman <rms@gnu.org>
parents: 3978
diff changeset
249 (add-hook 'write-contents-hooks 'hexl-save-buffer)
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
250
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
251 (make-local-variable 'hexl-mode-old-require-final-newline)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
252 (setq hexl-mode-old-require-final-newline require-final-newline)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
253 (make-local-variable 'require-final-newline)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
254 (setq require-final-newline nil)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
255
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
256 ;; Add hooks to rehexlify or dehexlify on various events.
10948
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
257 (add-hook 'after-revert-hook 'hexl-after-revert-hook nil t)
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
258
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
259 (add-hook 'change-major-mode-hook 'hexl-maybe-dehexlify-buffer nil t)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
260
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
261 (if hexl-follow-ascii (hexl-follow-ascii 1)))
15402
46fad1457030 (hexl-mode): Run hexl-mode-hook.
Richard M. Stallman <rms@gnu.org>
parents: 15373
diff changeset
262 (run-hooks 'hexl-mode-hook))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
263
10948
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
264 (defun hexl-after-revert-hook ()
25927
776bf3692d9d * hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents: 24659
diff changeset
265 (setq hexl-max-address (1- (buffer-size)))
10948
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
266 (hexlify-buffer)
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
267 (set-buffer-modified-p nil))
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
268
3891
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
269 (defvar hexl-in-save-buffer nil)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
270
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
271 (defun hexl-save-buffer ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
272 "Save a hexl format buffer as binary in visited file if modified."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 (interactive)
3891
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
274 (if hexl-in-save-buffer nil
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
275 (set-buffer-modified-p (if (buffer-modified-p)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
276 (save-excursion
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
277 (let ((buf (generate-new-buffer " hexl"))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
278 (name (buffer-name))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
279 (file-name (buffer-file-name))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
280 (start (point-min))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
281 (end (point-max))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
282 modified)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
283 (set-buffer buf)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
284 (insert-buffer-substring name start end)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
285 (set-buffer name)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
286 (dehexlify-buffer)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
287 ;; Prevent infinite recursion.
19113
c21a3a07b6fd (hexlify-buffer, dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 17710
diff changeset
288 (let ((hexl-in-save-buffer t))
3891
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
289 (save-buffer))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
290 (setq modified (buffer-modified-p))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
291 (delete-region (point-min) (point-max))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
292 (insert-buffer-substring buf start end)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
293 (kill-buffer buf)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
294 modified))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
295 (message "(No changes need to be saved)")
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
296 nil))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
297 ;; Return t to indicate we have saved t
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
298 t))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
299
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
300 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301 (defun hexl-find-file (filename)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 "Edit file FILENAME in hexl-mode.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
303 Switch to a buffer visiting file FILENAME, creating one in none exists."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
304 (interactive "fFilename: ")
19113
c21a3a07b6fd (hexlify-buffer, dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 17710
diff changeset
305 (find-file-literally filename)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
306 (if (not (eq major-mode 'hexl-mode))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
307 (hexl-mode)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
308
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
309 (defun hexl-mode-exit (&optional arg)
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
310 "Exit Hexl mode, returning to previous mode.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
311 With arg, don't unhexlify buffer."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
313 (if (or (eq arg 1) (not arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314 (let ((modified (buffer-modified-p))
5819
b047e246c13d (hexl-mode-exit): Bind inhibit-read-only; don't alter buffer-read-only.
Richard M. Stallman <rms@gnu.org>
parents: 5818
diff changeset
315 (inhibit-read-only t)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
316 (original-point (1+ (hexl-current-address))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
317 (dehexlify-buffer)
14693
db61bfe289aa (hexl-mode-exit, hexl-maybe-dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 14423
diff changeset
318 (remove-hook 'write-contents-hooks 'hexl-save-buffer)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
319 (set-buffer-modified-p modified)
38853
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
320 (goto-char original-point)
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
321 ;; Maybe adjust point for the removed CR characters.
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
322 (when (eq (coding-system-eol-type buffer-file-coding-system) 1)
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
323 (setq original-point (- original-point
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
324 (count-lines (point-min) (point))))
a2845b455cbd (hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents: 38412
diff changeset
325 (or (bobp) (setq original-point (1+ original-point))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
326 (goto-char original-point)))
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
327
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
328 (remove-hook 'after-revert-hook 'hexl-after-revert-hook t)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
329 (remove-hook 'change-major-mode-hook 'hexl-maybe-dehexlify-buffer t)
20902
117024af99ea (hexl-mode-exit): Remove hexl-follow-ascii-find from post-command-hook
Stephen Eglen <stephen@gnu.org>
parents: 20657
diff changeset
330 (remove-hook 'post-command-hook 'hexl-follow-ascii-find t)
117024af99ea (hexl-mode-exit): Remove hexl-follow-ascii-find from post-command-hook
Stephen Eglen <stephen@gnu.org>
parents: 20657
diff changeset
331 (setq hexl-ascii-overlay nil)
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
332
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
333 (setq write-contents-hooks hexl-mode-old-write-contents-hooks)
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
334 (setq require-final-newline hexl-mode-old-require-final-newline)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
335 (setq mode-name hexl-mode-old-mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
336 (use-local-map hexl-mode-old-local-map)
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
337 (set-syntax-table hexl-mode-old-syntax-table)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
338 (setq major-mode hexl-mode-old-major-mode)
8222
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
339 (force-mode-line-update))
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
340
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
341 (defun hexl-maybe-dehexlify-buffer ()
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
342 "Convert a hexl format buffer to binary.
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
343 Ask the user for confirmation."
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
344 (if (y-or-n-p "Convert contents back to binary format? ")
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
345 (let ((modified (buffer-modified-p))
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
346 (inhibit-read-only t)
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
347 (original-point (1+ (hexl-current-address))))
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
348 (dehexlify-buffer)
14693
db61bfe289aa (hexl-mode-exit, hexl-maybe-dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 14423
diff changeset
349 (remove-hook 'write-contents-hooks 'hexl-save-buffer)
8222
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
350 (set-buffer-modified-p modified)
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
351 (goto-char original-point))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
352
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
353 (defun hexl-current-address (&optional validate)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
354 "Return current hexl-address."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
355 (interactive)
37168
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
356 (let ((current-column (- (% (point) 68) 11))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
357 (hexl-address 0))
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
358 (if (< current-column 0)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
359 (if validate
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
360 (error "Point is not on a character in the file")
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
361 (setq current-column 0)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
362 (setq hexl-address
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
363 (+ (* (/ (point) 68) 16)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
364 (if (>= current-column 41)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
365 (- current-column 41)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
366 (/ (- current-column (/ current-column 5)) 2))))
37722
5d56786629e4 (hexl-current-address): Print a message when called
Gerd Moellmann <gerd@gnu.org>
parents: 37168
diff changeset
367 (when (interactive-p)
5d56786629e4 (hexl-current-address): Print a message when called
Gerd Moellmann <gerd@gnu.org>
parents: 37168
diff changeset
368 (message "Current address is %d" hexl-address))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
369 hexl-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
370
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
371 (defun hexl-address-to-marker (address)
25927
776bf3692d9d * hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents: 24659
diff changeset
372 "Return buffer position for ADDRESS."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
373 (interactive "nAddress: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
374 (+ (* (/ address 16) 68) 11 (/ (* (% address 16) 5) 2)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
375
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376 (defun hexl-goto-address (address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377 "Goto hexl-mode (decimal) address ADDRESS.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
378 Signal error if ADDRESS out of range."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 (interactive "nAddress: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
380 (if (or (< address 0) (> address hexl-max-address))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
381 (error "Out of hexl region"))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382 (goto-char (hexl-address-to-marker address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
383
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384 (defun hexl-goto-hex-address (hex-address)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
385 "Go to hexl-mode address (hex string) HEX-ADDRESS.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
386 Signal error if HEX-ADDRESS is out of range."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
387 (interactive "sHex Address: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
388 (hexl-goto-address (hexl-hex-string-to-integer hex-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
389
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
390 (defun hexl-hex-string-to-integer (hex-string)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
391 "Return decimal integer for HEX-STRING."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
392 (interactive "sHex number: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
393 (let ((hex-num 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
394 (while (not (equal hex-string ""))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 (setq hex-num (+ (* hex-num 16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
396 (hexl-hex-char-to-integer (string-to-char hex-string))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397 (setq hex-string (substring hex-string 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398 hex-num))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
400 (defun hexl-octal-string-to-integer (octal-string)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
401 "Return decimal integer for OCTAL-STRING."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
402 (interactive "sOctal number: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
403 (let ((oct-num 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
404 (while (not (equal octal-string ""))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
405 (setq oct-num (+ (* oct-num 8)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
406 (hexl-oct-char-to-integer
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
407 (string-to-char octal-string))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
408 (setq octal-string (substring octal-string 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
409 oct-num))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
410
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
411 ;; move point functions
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
412
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
413 (defun hexl-backward-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
414 "Move to left ARG bytes (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
415 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
416 (hexl-goto-address (- (hexl-current-address) arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
417
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
418 (defun hexl-forward-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
419 "Move right ARG bytes (left if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
420 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
421 (hexl-goto-address (+ (hexl-current-address) arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
422
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
423 (defun hexl-backward-short (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
424 "Move to left ARG shorts (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
425 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
426 (hexl-goto-address (let ((address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
427 (if (< arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
428 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
429 (setq arg (- arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
430 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
431 (if (not (equal address (logior address 3)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
432 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
433 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
434 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
435 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
436 (setq address (logior address 3)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
437 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
438 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
439 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
440 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
441 (setq address (+ address 4))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
442 (setq arg (1- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
443 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
444 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
445 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
446 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
447 (setq address (logior address 3))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
448 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
449 (if (not (equal address (logand address -4)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
450 (setq address (logand address -4))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
451 (if (not (equal address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
452 (setq address (- address 4))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
453 (message "Beginning of buffer.")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
454 (setq arg (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
455 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
456
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
457 (defun hexl-forward-short (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
458 "Move right ARG shorts (left if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
459 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
460 (hexl-backward-short (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
461
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
462 (defun hexl-backward-word (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
463 "Move to left ARG words (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
464 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
465 (hexl-goto-address (let ((address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
466 (if (< arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
467 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
468 (setq arg (- arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
469 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
470 (if (not (equal address (logior address 7)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
471 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
472 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
473 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
474 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
475 (setq address (logior address 7)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
476 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
477 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
478 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
479 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
480 (setq address (+ address 8))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
481 (setq arg (1- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
482 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
483 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
484 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
485 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
486 (setq address (logior address 7))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
487 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
488 (if (not (equal address (logand address -8)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
489 (setq address (logand address -8))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
490 (if (not (equal address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
491 (setq address (- address 8))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
492 (message "Beginning of buffer.")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
493 (setq arg (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
494 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
495
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
496 (defun hexl-forward-word (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
497 "Move right ARG words (left if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
498 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
499 (hexl-backward-word (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
500
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
501 (defun hexl-previous-line (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
502 "Move vertically up ARG lines [16 bytes] (down if ARG negative) in hexl-mode.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
503 If there is byte at the target address move to the last byte in that line."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
504 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
505 (hexl-next-line (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
506
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
507 (defun hexl-next-line (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
508 "Move vertically down ARG lines [16 bytes] (up if ARG negative) in hexl-mode.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
509 If there is no byte at the target address move to the last byte in that line."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
510 (interactive "p")
923
9f3cc03dae67 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 918
diff changeset
511 (hexl-goto-address (let ((address (+ (hexl-current-address) (* arg 16))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
512 (if (and (< arg 0) (< address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
513 (progn (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
514 (setq address
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
515 (% (hexl-current-address) 16)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
516 (if (and (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
517 (< (% hexl-max-address 16) (% address 16)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
518 (setq address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
519 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
520 (progn (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
521 (setq
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
522 address
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
523 (+ (logand hexl-max-address -16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
524 (% (hexl-current-address) 16)))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
525 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
526
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
527 (defun hexl-beginning-of-buffer (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
528 "Move to the beginning of the hexl buffer.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
529 Leaves `hexl-mark' at previous position.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
530 With prefix arg N, puts point N bytes of the way from the true beginning."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
531 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
532 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
533 (hexl-goto-address (+ 0 (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
534
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
535 (defun hexl-end-of-buffer (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
536 "Go to `hexl-max-address' minus ARG."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
537 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
538 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
539 (hexl-goto-address (- hexl-max-address (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
540
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
541 (defun hexl-beginning-of-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
542 "Goto beginning of line in hexl mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
543 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
544 (goto-char (+ (* (/ (point) 68) 68) 11)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
545
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
546 (defun hexl-end-of-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
547 "Goto end of line in hexl mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
548 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
549 (hexl-goto-address (let ((address (logior (hexl-current-address) 15)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
550 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
551 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
552 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
553
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
554 (defun hexl-scroll-down (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
555 "Scroll hexl buffer window upward ARG lines; or near full window if no ARG."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
556 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
557 (if (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
558 (setq arg (1- (window-height)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
559 (setq arg (prefix-numeric-value arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
560 (hexl-scroll-up (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
561
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
562 (defun hexl-scroll-up (arg)
37168
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
563 "Scroll hexl buffer window upward ARG lines; or near full window if no ARG.
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
564 If there's no byte at the target address, move to the first or last line."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
565 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
566 (if (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
567 (setq arg (1- (window-height)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
568 (setq arg (prefix-numeric-value arg)))
37168
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
569 (let* ((movement (* arg 16))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
570 (address (hexl-current-address))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
571 (dest (+ address movement)))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
572 (cond
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
573 ;; If possible, try to stay at the same offset from the beginning
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
574 ;; of the 16-byte group, even if we move to the first or last
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
575 ;; group.
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
576 ((and (> dest hexl-max-address)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
577 (>= (% hexl-max-address 16) (% address 16)))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
578 (setq dest (+ (logand hexl-max-address -16) (% address 16))))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
579 ((> dest hexl-max-address)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
580 (setq dest hexl-max-address))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
581 ((< dest 0)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
582 (setq dest (% address 16))))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
583 (if (/= dest (+ address movement))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
584 (message "Out of hexl region."))
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
585 (hexl-goto-address dest)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
586 (recenter 0)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
587
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
588 (defun hexl-beginning-of-1k-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
589 "Go to beginning of 1k boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
590 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
591 (hexl-goto-address (logand (hexl-current-address) -1024)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
592
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
593 (defun hexl-end-of-1k-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
594 "Go to end of 1k boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
595 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
596 (hexl-goto-address (let ((address (logior (hexl-current-address) 1023)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
597 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
598 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
599 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
600
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
601 (defun hexl-beginning-of-512b-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
602 "Go to beginning of 512 byte boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
603 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
604 (hexl-goto-address (logand (hexl-current-address) -512)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
605
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
606 (defun hexl-end-of-512b-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
607 "Go to end of 512 byte boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
608 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
609 (hexl-goto-address (let ((address (logior (hexl-current-address) 511)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
610 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
611 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
612 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
613
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
614 (defun hexl-quoted-insert (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
615 "Read next input character and insert it.
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
616 Useful for inserting control characters and non-ASCII characters given their
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
617 numerical code.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
618 You may also type octal digits, to insert a character with that code."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
619 (interactive "p")
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
620 (hexl-insert-multibyte-char (read-quoted-char) arg))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
621
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
622 ;00000000: 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
623
5066
8abe8fb9621c (hexlify-buffer): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 4966
diff changeset
624 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
625 (defun hexlify-buffer ()
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
626 "Convert a binary buffer to hexl format.
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
627 This discards the buffer's undo information."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
628 (interactive)
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
629 (and buffer-undo-list
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
630 (or (y-or-n-p "Converting to hexl format discards undo info; ok? ")
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
631 (error "Aborted")))
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
632 (setq buffer-undo-list nil)
21566
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
633 ;; Don't decode text in the ASCII part of `hexl' program output.
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
634 (let ((coding-system-for-read 'raw-text)
32385
ce4c7a83ed43 (hexlify-buffer): Bind coding-system-for-write to
Eli Zaretskii <eliz@gnu.org>
parents: 28657
diff changeset
635 (coding-system-for-write buffer-file-coding-system)
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
636 (buffer-undo-list t))
25927
776bf3692d9d * hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents: 24659
diff changeset
637 (shell-command-on-region (point-min) (point-max) hexlify-command t)
776bf3692d9d * hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents: 24659
diff changeset
638 (if (> (point) (hexl-address-to-marker hexl-max-address))
776bf3692d9d * hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents: 24659
diff changeset
639 (hexl-goto-address hexl-max-address))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
640
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
641 (defun dehexlify-buffer ()
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
642 "Convert a hexl format buffer to binary.
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
643 This discards the buffer's undo information."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
644 (interactive)
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
645 (and buffer-undo-list
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
646 (or (y-or-n-p "Converting from hexl format discards undo info; ok? ")
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
647 (error "Aborted")))
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
648 (setq buffer-undo-list nil)
21566
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
649 (let ((coding-system-for-write 'raw-text)
32385
ce4c7a83ed43 (hexlify-buffer): Bind coding-system-for-write to
Eli Zaretskii <eliz@gnu.org>
parents: 28657
diff changeset
650 (coding-system-for-read buffer-file-coding-system)
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
651 (buffer-undo-list t))
5458
0873b536e71d (dehexlify-buffer): If msdos, bind binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5140
diff changeset
652 (shell-command-on-region (point-min) (point-max) dehexlify-command t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
653
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
654 (defun hexl-char-after-point ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
655 "Return char for ASCII hex digits at point."
3216
85f44565e821 (hexl-char-after-point): Get rid of mistakenly free variables.
Richard M. Stallman <rms@gnu.org>
parents: 3215
diff changeset
656 (hexl-htoi (char-after (point))
85f44565e821 (hexl-char-after-point): Get rid of mistakenly free variables.
Richard M. Stallman <rms@gnu.org>
parents: 3215
diff changeset
657 (char-after (1+ (point)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
658
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
659 (defun hexl-htoi (lh rh)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
660 "Hex (char) LH (char) RH to integer."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
661 (+ (* (hexl-hex-char-to-integer lh) 16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
662 (hexl-hex-char-to-integer rh)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
663
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
664 (defun hexl-hex-char-to-integer (character)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
665 "Take a char and return its value as if it was a hex digit."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
666 (if (and (>= character ?0) (<= character ?9))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
667 (- character ?0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
668 (let ((ch (logior character 32)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
669 (if (and (>= ch ?a) (<= ch ?f))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
670 (- ch (- ?a 10))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
671 (error "Invalid hex digit `%c'" ch)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
672
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
673 (defun hexl-oct-char-to-integer (character)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
674 "Take a char and return its value as if it was a octal digit."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
675 (if (and (>= character ?0) (<= character ?7))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
676 (- character ?0)
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
677 (error "Invalid octal digit `%c'" character)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
678
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
679 (defun hexl-printable-character (ch)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
680 "Return a displayable string for character CH."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
681 (format "%c" (if hexl-iso
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
682 (if (or (< ch 32) (and (>= ch 127) (< ch 160)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
683 46
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
684 ch)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
685 (if (or (< ch 32) (>= ch 127))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
686 46
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
687 ch))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
688
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
689 (defun hexl-insert-multibyte-char (ch num)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
690 "Insert a possibly multibyte character CH NUM times.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
691
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
692 Non-ASCII characters are first encoded with `buffer-file-coding-system',
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
693 and their encoded form is inserted byte by byte."
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
694 (let ((charset (char-charset ch))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
695 (coding (if (or (null buffer-file-coding-system)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
696 ;; coding-system-type equals t means undecided.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
697 (eq (coding-system-type buffer-file-coding-system) t))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
698 default-buffer-file-coding-system
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
699 buffer-file-coding-system)))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
700 (cond ((and (> ch 0) (< ch 256))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
701 (hexl-insert-char ch num))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
702 ((eq charset 'unknown)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
703 (error
38959
c59671f19daa (hexl-insert-multibyte-char, hexl-insert-char): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 38917
diff changeset
704 "0x%x -- invalid character code; use \\[hexl-insert-hex-string]"
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
705 ch))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
706 (t
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
707 (let ((encoded (encode-coding-char ch coding))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
708 (internal (string-as-unibyte (char-to-string ch)))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
709 internal-hex)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
710 ;; If encode-coding-char returns nil, it means our character
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
711 ;; cannot be safely encoded with buffer-file-coding-system.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
712 ;; In that case, we offer to insert the internal representation
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
713 ;; of that character, byte by byte.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
714 (when (null encoded)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
715 (setq internal-hex
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
716 (mapconcat (function (lambda (c) (format "%x" c)))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
717 internal " "))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
718 (if (yes-or-no-p
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
719 (format
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
720 "Insert char 0x%x's internal representation \"%s\"? "
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
721 ch internal-hex))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
722 (setq encoded internal)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
723 (error
38959
c59671f19daa (hexl-insert-multibyte-char, hexl-insert-char): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 38917
diff changeset
724 "Can't encode `0x%x' with this buffer's coding system; try \\[hexl-insert-hex-string]"
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
725 ch)))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
726 (while (> num 0)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
727 (mapc
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
728 (function (lambda (c) (hexl-insert-char c 1))) encoded)
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
729 (setq num (1- num))))))))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
730
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
731 (defun hexl-self-insert-command (arg)
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
732 "Insert this character.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
733 Interactively, with a numeric argument, insert this character that many times.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
734
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
735 Non-ASCII characters are first encoded with `buffer-file-coding-system',
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
736 and their encoded form is inserted byte by byte."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
737 (interactive "p")
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
738 (hexl-insert-multibyte-char last-command-char arg))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
739
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
740 (defun hexl-insert-char (ch num)
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
741 "Insert the character CH NUM times in a hexl buffer.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
742
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
743 CH must be a unibyte character whose value is between 0 and 255."
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
744 (if (or (< ch 0) (> ch 255))
38959
c59671f19daa (hexl-insert-multibyte-char, hexl-insert-char): Remove
Eli Zaretskii <eliz@gnu.org>
parents: 38917
diff changeset
745 (error "Invalid character 0x%x -- must be in the range [0..255]"))
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
746 (let ((address (hexl-current-address t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
747 (while (> num 0)
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
748 (let ((hex-position
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
749 (+ (* (/ address 16) 68)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
750 11
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
751 (* 2 (% address 16))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
752 (/ (% address 16) 2)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
753 (ascii-position
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
754 (+ (* (/ address 16) 68) 52 (% address 16)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
755 at-ascii-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
756 (if (= (point) ascii-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
757 (setq at-ascii-position t))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
758 (goto-char hex-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
759 (delete-char 2)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
760 (insert (format "%02x" ch))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
761 (goto-char ascii-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
762 (delete-char 1)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
763 (insert (hexl-printable-character ch))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
764 (or (eq address hexl-max-address)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
765 (setq address (1+ address)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
766 (hexl-goto-address address)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
767 (if at-ascii-position
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
768 (progn
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
769 (beginning-of-line)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
770 (forward-char 51)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
771 (forward-char (% address 16)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
772 (setq num (1- num)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
773
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
774 ;; hex conversion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
775
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
776 (defun hexl-insert-hex-char (arg)
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
777 "Insert a character given by its hexadecimal code ARG times at point."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
778 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
779 (let ((num (hexl-hex-string-to-integer (read-string "Hex number: "))))
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
780 (if (< num 0)
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
781 (error "Hex number out of range")
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
782 (hexl-insert-multibyte-char num arg))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
783
28657
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
784 (defun hexl-insert-hex-string (str arg)
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
785 "Insert hexadecimal string STR at point ARG times.
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
786 Embedded whitespace, dashes, and periods in the string are ignored."
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
787 (interactive "sHex string: \np")
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
788 (setq str (replace-regexp-in-string "[- \t.]" "" str))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
789 (let ((chars '()))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
790 (let ((len (length str))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
791 (idx 0))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
792 (if (eq (logand len 1) 1)
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
793 (let ((num (hexl-hex-string-to-integer (substring str 0 1))))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
794 (setq chars (cons num chars))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
795 (setq idx 1)))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
796 (while (< idx len)
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
797 (let* ((nidx (+ idx 2))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
798 (num (hexl-hex-string-to-integer (substring str idx nidx))))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
799 (setq chars (cons num chars))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
800 (setq idx nidx))))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
801 (setq chars (nreverse chars))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
802 (while (> arg 0)
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
803 (let ((chars chars))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
804 (while chars
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
805 (hexl-insert-char (car chars) 1)
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
806 (setq chars (cdr chars))))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
807 (setq arg (- arg 1)))))
02edb3ce6745 (hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents: 25948
diff changeset
808
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
809 (defun hexl-insert-decimal-char (arg)
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
810 "Insert a character given by its decimal code ARG times at point."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
811 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
812 (let ((num (string-to-int (read-string "Decimal Number: "))))
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
813 (if (< num 0)
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
814 (error "Decimal number out of range")
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
815 (hexl-insert-multibyte-char num arg))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
816
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
817 (defun hexl-insert-octal-char (arg)
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
818 "Insert a character given by its octal code ARG times at point."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
819 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
820 (let ((num (hexl-octal-string-to-integer (read-string "Octal Number: "))))
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
821 (if (< num 0)
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
822 (error "Decimal number out of range")
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
823 (hexl-insert-multibyte-char num arg))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
824
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
825 (defun hexl-follow-ascii (&optional arg)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
826 "Toggle following ASCII in Hexl buffers.
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
827 With prefix ARG, turn on following if and only if ARG is positive.
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
828 When following is enabled, the ASCII character corresponding to the
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
829 element under the point is highlighted.
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
830 Customize the variable `hexl-follow-ascii' to disable this feature."
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
831 (interactive "P")
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
832 (let ((on-p (if arg
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
833 (> (prefix-numeric-value arg) 0)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
834 (not hexl-ascii-overlay))))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
835
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
836 (if on-p
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
837 ;; turn it on
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
838 (if (not hexl-ascii-overlay)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
839 (progn
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
840 (setq hexl-ascii-overlay (make-overlay 1 1)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
841 hexl-follow-ascii t)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
842 (overlay-put hexl-ascii-overlay 'face 'highlight)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
843 (add-hook 'post-command-hook 'hexl-follow-ascii-find nil t)))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
844 ;; turn it off
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
845 (if hexl-ascii-overlay
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
846 (progn
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
847 (delete-overlay hexl-ascii-overlay)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
848 (setq hexl-ascii-overlay nil
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
849 hexl-follow-ascii nil)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
850 (remove-hook 'post-command-hook 'hexl-follow-ascii-find t)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
851 )))))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
852
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
853 (defun hexl-follow-ascii-find ()
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
854 "Find and highlight the ASCII element corresponding to current point."
37168
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
855 (let ((pos (+ 51
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
856 (- (point) (current-column))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
857 (mod (hexl-current-address) 16))))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
858 (move-overlay hexl-ascii-overlay pos (1+ pos))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
859 ))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
860
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
861 ;; startup stuff.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
862
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
863 (if hexl-mode-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
864 nil
39384
bdd2e9a9bb71 (hexl-mode-map): Fix the change of 2001-08-23: use
Eli Zaretskii <eliz@gnu.org>
parents: 38959
diff changeset
865 (setq hexl-mode-map (make-keymap))
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
866 ;; Make all self-inserting keys go through hexl-self-insert-command,
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
867 ;; because we need to convert them to unibyte characters before
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
868 ;; inserting them into the buffer.
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
869 (substitute-key-definition 'self-insert-command 'hexl-self-insert-command
39384
bdd2e9a9bb71 (hexl-mode-map): Fix the change of 2001-08-23: use
Eli Zaretskii <eliz@gnu.org>
parents: 38959
diff changeset
870 hexl-mode-map (current-global-map))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
871
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
872 (define-key hexl-mode-map [left] 'hexl-backward-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
873 (define-key hexl-mode-map [right] 'hexl-forward-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
874 (define-key hexl-mode-map [up] 'hexl-previous-line)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
875 (define-key hexl-mode-map [down] 'hexl-next-line)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
876 (define-key hexl-mode-map [M-left] 'hexl-backward-short)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
877 (define-key hexl-mode-map [M-right] 'hexl-forward-short)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
878 (define-key hexl-mode-map [next] 'hexl-scroll-up)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
879 (define-key hexl-mode-map [prior] 'hexl-scroll-down)
37168
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
880 (define-key hexl-mode-map [home] 'hexl-beginning-of-line)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
881 (define-key hexl-mode-map [end] 'hexl-end-of-line)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
882 (define-key hexl-mode-map [C-home] 'hexl-beginning-of-buffer)
000c8e6eff3d (hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents: 32385
diff changeset
883 (define-key hexl-mode-map [C-end] 'hexl-end-of-buffer)
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
884 (define-key hexl-mode-map [deletechar] 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
885 (define-key hexl-mode-map [deleteline] 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
886 (define-key hexl-mode-map [insertline] 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
887 (define-key hexl-mode-map [S-delete] 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
888 (define-key hexl-mode-map "\177" 'undefined)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
889
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
890 (define-key hexl-mode-map "\C-a" 'hexl-beginning-of-line)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
891 (define-key hexl-mode-map "\C-b" 'hexl-backward-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
892 (define-key hexl-mode-map "\C-d" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
893 (define-key hexl-mode-map "\C-e" 'hexl-end-of-line)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
894 (define-key hexl-mode-map "\C-f" 'hexl-forward-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
895
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
896 (if (not (eq (key-binding (char-to-string help-char)) 'help-command))
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
897 (define-key hexl-mode-map (char-to-string help-char) 'undefined))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
898
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
899 (define-key hexl-mode-map "\C-k" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
900 (define-key hexl-mode-map "\C-n" 'hexl-next-line)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
901 (define-key hexl-mode-map "\C-o" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
902 (define-key hexl-mode-map "\C-p" 'hexl-previous-line)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
903 (define-key hexl-mode-map "\C-q" 'hexl-quoted-insert)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
904 (define-key hexl-mode-map "\C-t" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
905 (define-key hexl-mode-map "\C-v" 'hexl-scroll-up)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
906 (define-key hexl-mode-map "\C-w" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
907 (define-key hexl-mode-map "\C-y" 'undefined)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
908
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
909 (fset 'hexl-ESC-prefix (copy-keymap 'ESC-prefix))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
910 (define-key hexl-mode-map "\e" 'hexl-ESC-prefix)
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
911 (define-key hexl-mode-map "\e\C-a" 'hexl-beginning-of-512b-page)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
912 (define-key hexl-mode-map "\e\C-b" 'hexl-backward-short)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
913 (define-key hexl-mode-map "\e\C-d" 'hexl-insert-decimal-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
914 (define-key hexl-mode-map "\e\C-e" 'hexl-end-of-512b-page)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
915 (define-key hexl-mode-map "\e\C-f" 'hexl-forward-short)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
916 (define-key hexl-mode-map "\e\C-i" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
917 (define-key hexl-mode-map "\e\C-j" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
918 (define-key hexl-mode-map "\e\C-k" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
919 (define-key hexl-mode-map "\e\C-o" 'hexl-insert-octal-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
920 (define-key hexl-mode-map "\e\C-q" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
921 (define-key hexl-mode-map "\e\C-t" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
922 (define-key hexl-mode-map "\e\C-x" 'hexl-insert-hex-char)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
923 (define-key hexl-mode-map "\eb" 'hexl-backward-word)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
924 (define-key hexl-mode-map "\ec" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
925 (define-key hexl-mode-map "\ed" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
926 (define-key hexl-mode-map "\ef" 'hexl-forward-word)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
927 (define-key hexl-mode-map "\eg" 'hexl-goto-hex-address)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
928 (define-key hexl-mode-map "\ei" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
929 (define-key hexl-mode-map "\ej" 'hexl-goto-address)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
930 (define-key hexl-mode-map "\ek" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
931 (define-key hexl-mode-map "\el" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
932 (define-key hexl-mode-map "\eq" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
933 (define-key hexl-mode-map "\es" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
934 (define-key hexl-mode-map "\et" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
935 (define-key hexl-mode-map "\eu" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
936 (define-key hexl-mode-map "\ev" 'hexl-scroll-down)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
937 (define-key hexl-mode-map "\ey" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
938 (define-key hexl-mode-map "\ez" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
939 (define-key hexl-mode-map "\e<" 'hexl-beginning-of-buffer)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
940 (define-key hexl-mode-map "\e>" 'hexl-end-of-buffer)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
941
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
942 (fset 'hexl-C-c-prefix (copy-keymap mode-specific-map))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
943 (define-key hexl-mode-map "\C-c" 'hexl-C-c-prefix)
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
944 (define-key hexl-mode-map "\C-c\C-c" 'hexl-mode-exit)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
945
38917
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
946 (fset 'hexl-C-x-prefix (copy-keymap 'Control-X-prefix))
7f8686d21c31 (hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents: 38853
diff changeset
947 (define-key hexl-mode-map "\C-x" 'hexl-C-x-prefix)
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
948 (define-key hexl-mode-map "\C-x[" 'hexl-beginning-of-1k-page)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
949 (define-key hexl-mode-map "\C-x]" 'hexl-end-of-1k-page)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
950 (define-key hexl-mode-map "\C-x\C-p" 'undefined)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
951 (define-key hexl-mode-map "\C-x\C-s" 'hexl-save-buffer)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
952 (define-key hexl-mode-map "\C-x\C-t" 'undefined))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
953
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
954 (provide 'hexl)
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
955
660
08eb386dd0f3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 209
diff changeset
956 ;;; hexl.el ends here