annotate lisp/hexl.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents b352f37246ba
children 991a19a97565
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3137
1e7d462c176f (hexlify-command, dehexlify-command): Use exec-directory.
Richard M. Stallman <rms@gnu.org>
parents: 2307
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
20657
635d8acc7755 Update copyright year.
Richard M. Stallman <rms@gnu.org>
parents: 20654
diff changeset
3 ;; Copyright (C) 1989, 1994, 1998 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
3137
1e7d462c176f (hexlify-command, dehexlify-command): Use exec-directory.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
80 (format "%s%s %s" exec-directory hexl-program hexl-options)
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
81 "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
82 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
83 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
84
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
85 (defcustom dehexlify-command
3137
1e7d462c176f (hexlify-command, dehexlify-command): Use exec-directory.
Richard M. Stallman <rms@gnu.org>
parents: 2307
diff changeset
86 (format "%s%s -de %s" exec-directory hexl-program hexl-options)
17436
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
87 "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
88 :type 'string
2a9fdbfcb993 Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents: 15402
diff changeset
89 :group 'hexl)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
90
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
91 (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
92 "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
93 :type 'boolean
21669
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21566
diff changeset
94 :group 'hexl
9861518505cb *** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents: 21566
diff changeset
95 :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
96
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97 (defvar hexl-max-address 0
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98 "Maximum offset into hexl buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
100 (defvar hexl-mode-map nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101
10976
354c9e79de15 (hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents: 10948
diff changeset
102 (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
103 (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
104 (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
105 (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
106 (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
107 (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
108
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
109 (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
110 "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
111 (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
112
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
113 ;; routines
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
114
17656
7b61d509af8a (hexl-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17436
diff changeset
115 (put 'hexl-mode 'mode-class 'special)
7b61d509af8a (hexl-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents: 17436
diff changeset
116
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
117 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
118 (defun hexl-mode (&optional arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
119 "\\<hexl-mode-map>
2307
10e417efb12a Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1978
diff changeset
120 A major mode for editing binary files in hex dump format.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
121
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
122 This function automatically converts a buffer into the hexl format
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
123 using the function `hexlify-buffer'.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
124
208
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
125 Each line in the buffer has an \"address\" (displayed in hexadecimal)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
126 representing the offset into the file that the characters on this line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
127 are at and 16 characters from the file (displayed as hexadecimal
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
128 values grouped every 16 bits) and as their ASCII values.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
129
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
130 If any of the characters (displayed as ASCII characters) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
131 unprintable (control or meta characters) they will be replaced as
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
132 periods.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
133
208
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
134 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
135 in hexl format.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
136
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
137 A sample format:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
138
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
139 HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ASCII-TEXT
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
140 -------- ---- ---- ---- ---- ---- ---- ---- ---- ----------------
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141 00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64 This is hexl-mod
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
142 00000010: 652e 2020 4561 6368 206c 696e 6520 7265 e. Each line re
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
143 00000020: 7072 6573 656e 7473 2031 3620 6279 7465 presents 16 byte
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
144 00000030: 7320 6173 2068 6578 6164 6563 696d 616c s as hexadecimal
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145 00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74 ASCII.and print
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146 00000050: 6162 6c65 2041 5343 4949 2063 6861 7261 able ASCII chara
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147 00000060: 6374 6572 732e 2020 416e 7920 636f 6e74 cters. Any cont
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148 00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949 rol or non-ASCII
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
149 00000080: 2063 6861 7261 6374 6572 730a 6172 6520 characters.are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 00000090: 6469 7370 6c61 7965 6420 6173 2070 6572 displayed as per
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e iods in the prin
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 000000b0: 7461 626c 6520 6368 6172 6163 7465 7220 table character
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153 000000c0: 7265 6769 6f6e 2e0a region..
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155 Movement is as simple as movement in a normal emacs text buffer. Most
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 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
157 to move the cursor left, right, down, and up).
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
158
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
159 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
160 also supported.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162 There are several ways to change text in hexl mode:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 ASCII characters (character between space (0x20) and tilde (0x7E)) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165 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
166 insert itself (actually overstrike) into the buffer.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 \\[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
169 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
170 of another key to insert the octal number's ASCII representation.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 \\[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
173 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175 \\[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
176 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
178 \\[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
179 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 \\[hexl-mode-exit] will exit hexl-mode.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
183 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
184 will actually convert it back to binary format while saving.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 You can use \\[hexl-find-file] to visit a file in hexl-mode.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188 \\[describe-bindings] for advanced commands."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 (if (eq major-mode 'hexl-mode)
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
191 (error "You are already in hexl mode")
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
192
15373
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
193 (let ((modified (buffer-modified-p))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
194 (inhibit-read-only t)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
195 (original-point (1- (point)))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
196 max-address)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
197 (and (eobp) (not (bobp))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
198 (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
199 (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
200 ;; 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
201 (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
202 (setq max-address (1- (buffer-size)))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
203 (hexlify-buffer)
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
204 (set-buffer-modified-p modified))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
205 (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
206 (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
207 (hexl-goto-address original-point))
76072cbcae84 (hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents: 15339
diff changeset
208
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
209 ;; 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
210 ;; override most of it. That way, we can restore it perfectly.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211 (make-local-variable 'hexl-mode-old-local-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 (setq hexl-mode-old-local-map (current-local-map))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
213 (use-local-map hexl-mode-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
214
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
215 (make-local-variable 'hexl-mode-old-mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
216 (setq hexl-mode-old-mode-name mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
217 (setq mode-name "Hexl")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
219 (make-local-variable 'hexl-mode-old-major-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 (setq hexl-mode-old-major-mode major-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
221 (setq major-mode 'hexl-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
222
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
223 (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
224 (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
225 (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
226
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
227 (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
228 (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
229 (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
230 (add-hook 'write-contents-hooks 'hexl-save-buffer)
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
231
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
232 (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
233 (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
234 (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
235 (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
236
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
237 ;; 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
238 (make-local-hook 'after-revert-hook)
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
239 (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
240
13897
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
241 (make-local-hook 'change-major-mode-hook)
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
242 (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
243
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
244 (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
245 (run-hooks 'hexl-mode-hook))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246
10948
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
247 (defun hexl-after-revert-hook ()
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
248 (hexlify-buffer)
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
249 (set-buffer-modified-p nil))
2e151c5d8485 (hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents: 9780
diff changeset
250
3891
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
251 (defvar hexl-in-save-buffer nil)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
252
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
253 (defun hexl-save-buffer ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
254 "Save a hexl format buffer as binary in visited file if modified."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
255 (interactive)
3891
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
256 (if hexl-in-save-buffer nil
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
257 (set-buffer-modified-p (if (buffer-modified-p)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
258 (save-excursion
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
259 (let ((buf (generate-new-buffer " hexl"))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
260 (name (buffer-name))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
261 (file-name (buffer-file-name))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
262 (start (point-min))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
263 (end (point-max))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
264 modified)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
265 (set-buffer buf)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
266 (insert-buffer-substring name start end)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
267 (set-buffer name)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
268 (dehexlify-buffer)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
269 ;; Prevent infinite recursion.
19113
c21a3a07b6fd (hexlify-buffer, dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 17710
diff changeset
270 (let ((hexl-in-save-buffer t))
3891
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
271 (save-buffer))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
272 (setq modified (buffer-modified-p))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
273 (delete-region (point-min) (point-max))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
274 (insert-buffer-substring buf start end)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
275 (kill-buffer buf)
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
276 modified))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
277 (message "(No changes need to be saved)")
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
278 nil))
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
279 ;; Return t to indicate we have saved t
f457e67ddb6b (hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents: 3216
diff changeset
280 t))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
281
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
282 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
283 (defun hexl-find-file (filename)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
284 "Edit file FILENAME in hexl-mode.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
285 Switch to a buffer visiting file FILENAME, creating one in none exists."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
286 (interactive "fFilename: ")
19113
c21a3a07b6fd (hexlify-buffer, dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 17710
diff changeset
287 (find-file-literally filename)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
288 (if (not (eq major-mode 'hexl-mode))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
289 (hexl-mode)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
290
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
291 (defun hexl-mode-exit (&optional arg)
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
292 "Exit Hexl mode, returning to previous mode.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
293 With arg, don't unhexlify buffer."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
294 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
295 (if (or (eq arg 1) (not arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
296 (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
297 (inhibit-read-only t)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
298 (original-point (1+ (hexl-current-address))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
299 (dehexlify-buffer)
14693
db61bfe289aa (hexl-mode-exit, hexl-maybe-dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 14423
diff changeset
300 (remove-hook 'write-contents-hooks 'hexl-save-buffer)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
301 (set-buffer-modified-p modified)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
302 (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
303
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
304 (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
305 (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
306 (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
307 (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
308
1960e2c77da7 (hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents: 13599
diff changeset
309 (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
310 (setq require-final-newline hexl-mode-old-require-final-newline)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
311 (setq mode-name hexl-mode-old-mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
312 (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
313 (set-syntax-table hexl-mode-old-syntax-table)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
314 (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
315 (force-mode-line-update))
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
316
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
317 (defun hexl-maybe-dehexlify-buffer ()
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
318 "Convert a hexl format buffer to binary.
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
319 Ask the user for confirmation."
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
320 (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
321 (let ((modified (buffer-modified-p))
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
322 (inhibit-read-only t)
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
323 (original-point (1+ (hexl-current-address))))
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
324 (dehexlify-buffer)
14693
db61bfe289aa (hexl-mode-exit, hexl-maybe-dehexlify-buffer):
Richard M. Stallman <rms@gnu.org>
parents: 14423
diff changeset
325 (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
326 (set-buffer-modified-p modified)
e03e94b14ba4 (hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents: 7711
diff changeset
327 (goto-char original-point))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
328
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
329 (defun hexl-current-address (&optional validate)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
330 "Return current hexl-address."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
331 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
332 (let ((current-column (- (% (point) 68) 11))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
333 (hexl-address 0))
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
334 (if (< current-column 0)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
335 (if validate
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
336 (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
337 (setq current-column 0)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
338 (setq hexl-address
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
339 (+ (* (/ (point) 68) 16)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
340 (if (>= current-column 41)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
341 (- current-column 41)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
342 (/ (- current-column (/ current-column 5)) 2))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
343 hexl-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
344
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
345 (defun hexl-address-to-marker (address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
346 "Return marker for ADDRESS."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
347 (interactive "nAddress: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
348 (+ (* (/ address 16) 68) 11 (/ (* (% address 16) 5) 2)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
349
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
350 (defun hexl-goto-address (address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
351 "Goto hexl-mode (decimal) address ADDRESS.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
352 Signal error if ADDRESS out of range."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
353 (interactive "nAddress: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
354 (if (or (< address 0) (> address hexl-max-address))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
355 (error "Out of hexl region"))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
356 (goto-char (hexl-address-to-marker address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
357
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
358 (defun hexl-goto-hex-address (hex-address)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
359 "Go to hexl-mode address (hex string) HEX-ADDRESS.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
360 Signal error if HEX-ADDRESS is out of range."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
361 (interactive "sHex Address: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
362 (hexl-goto-address (hexl-hex-string-to-integer hex-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
363
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
364 (defun hexl-hex-string-to-integer (hex-string)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
365 "Return decimal integer for HEX-STRING."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
366 (interactive "sHex number: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
367 (let ((hex-num 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
368 (while (not (equal hex-string ""))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
369 (setq hex-num (+ (* hex-num 16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
370 (hexl-hex-char-to-integer (string-to-char hex-string))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
371 (setq hex-string (substring hex-string 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
372 hex-num))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
373
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
374 (defun hexl-octal-string-to-integer (octal-string)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
375 "Return decimal integer for OCTAL-STRING."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
376 (interactive "sOctal number: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377 (let ((oct-num 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
378 (while (not (equal octal-string ""))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 (setq oct-num (+ (* oct-num 8)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
380 (hexl-oct-char-to-integer
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
381 (string-to-char octal-string))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382 (setq octal-string (substring octal-string 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
383 oct-num))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
385 ;; move point functions
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
386
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
387 (defun hexl-backward-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
388 "Move to left ARG bytes (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
389 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
390 (hexl-goto-address (- (hexl-current-address) arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
391
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
392 (defun hexl-forward-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
393 "Move right ARG bytes (left if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
394 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
395 (hexl-goto-address (+ (hexl-current-address) arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
396
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397 (defun hexl-backward-short (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
398 "Move to left ARG shorts (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
399 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
400 (hexl-goto-address (let ((address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
401 (if (< arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
402 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
403 (setq arg (- arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
404 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
405 (if (not (equal address (logior address 3)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
406 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
407 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
408 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
409 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
410 (setq address (logior address 3)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
411 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
412 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
413 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
414 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
415 (setq address (+ address 4))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
416 (setq arg (1- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
417 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
418 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
419 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
420 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
421 (setq address (logior address 3))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
422 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
423 (if (not (equal address (logand address -4)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
424 (setq address (logand address -4))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
425 (if (not (equal address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
426 (setq address (- address 4))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
427 (message "Beginning of buffer.")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
428 (setq arg (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
429 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
430
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
431 (defun hexl-forward-short (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
432 "Move right ARG shorts (left if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
433 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
434 (hexl-backward-short (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
435
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
436 (defun hexl-backward-word (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
437 "Move to left ARG words (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
438 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
439 (hexl-goto-address (let ((address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
440 (if (< arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
441 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
442 (setq arg (- arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
443 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
444 (if (not (equal address (logior address 7)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
445 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
446 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
447 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
448 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
449 (setq address (logior address 7)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
450 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
451 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
452 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
453 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
454 (setq address (+ address 8))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
455 (setq arg (1- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
456 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
457 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
458 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
459 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
460 (setq address (logior address 7))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
461 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
462 (if (not (equal address (logand address -8)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
463 (setq address (logand address -8))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
464 (if (not (equal address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
465 (setq address (- address 8))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
466 (message "Beginning of buffer.")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
467 (setq arg (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
468 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
469
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
470 (defun hexl-forward-word (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
471 "Move right ARG words (left if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
472 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
473 (hexl-backward-word (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
474
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
475 (defun hexl-previous-line (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
476 "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
477 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
478 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
479 (hexl-next-line (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
480
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
481 (defun hexl-next-line (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
482 "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
483 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
484 (interactive "p")
923
9f3cc03dae67 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 918
diff changeset
485 (hexl-goto-address (let ((address (+ (hexl-current-address) (* arg 16))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
486 (if (and (< arg 0) (< address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
487 (progn (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
488 (setq address
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
489 (% (hexl-current-address) 16)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
490 (if (and (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
491 (< (% hexl-max-address 16) (% address 16)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
492 (setq address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
493 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
494 (progn (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
495 (setq
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
496 address
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
497 (+ (logand hexl-max-address -16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
498 (% (hexl-current-address) 16)))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
499 address)))
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-beginning-of-buffer (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
502 "Move to the beginning of the hexl buffer.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
503 Leaves `hexl-mark' at previous position.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
504 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
505 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
506 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
507 (hexl-goto-address (+ 0 (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
508
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
509 (defun hexl-end-of-buffer (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
510 "Go to `hexl-max-address' minus ARG."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
511 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
512 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
513 (hexl-goto-address (- hexl-max-address (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
514
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
515 (defun hexl-beginning-of-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
516 "Goto beginning of line in hexl mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
517 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
518 (goto-char (+ (* (/ (point) 68) 68) 11)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
519
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
520 (defun hexl-end-of-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
521 "Goto end of line in hexl mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
522 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
523 (hexl-goto-address (let ((address (logior (hexl-current-address) 15)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
524 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
525 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
526 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
527
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
528 (defun hexl-scroll-down (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
529 "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
530 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
531 (if (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
532 (setq arg (1- (window-height)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
533 (setq arg (prefix-numeric-value arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
534 (hexl-scroll-up (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
535
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
536 (defun hexl-scroll-up (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
537 "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
538 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
539 (if (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
540 (setq arg (1- (window-height)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
541 (setq arg (prefix-numeric-value arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
542 (let ((movement (* arg 16))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
543 (address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
544 (if (or (> (+ address movement) hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
545 (< (+ address movement) 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
546 (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
547 (hexl-goto-address (+ address movement))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
548 (recenter 0))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
549
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
550 (defun hexl-beginning-of-1k-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
551 "Go to beginning of 1k boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
552 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
553 (hexl-goto-address (logand (hexl-current-address) -1024)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
554
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
555 (defun hexl-end-of-1k-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
556 "Go to end of 1k boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
557 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
558 (hexl-goto-address (let ((address (logior (hexl-current-address) 1023)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
559 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
560 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
561 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
562
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
563 (defun hexl-beginning-of-512b-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
564 "Go to beginning of 512 byte boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
565 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
566 (hexl-goto-address (logand (hexl-current-address) -512)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
567
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
568 (defun hexl-end-of-512b-page ()
13988
118f028ac3dd (hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents: 13897
diff changeset
569 "Go to end of 512 byte boundary."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
570 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
571 (hexl-goto-address (let ((address (logior (hexl-current-address) 511)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
572 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
573 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
574 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
575
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
576 (defun hexl-quoted-insert (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
577 "Read next input character and insert it.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
578 Useful for inserting control characters.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
579 You may also type up to 3 octal digits, to insert a character with that code"
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
580 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
581 (hexl-insert-char (read-quoted-char) arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
582
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
583 ;00000000: 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
584
5066
8abe8fb9621c (hexlify-buffer): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 4966
diff changeset
585 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
586 (defun hexlify-buffer ()
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
587 "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
588 This discards the buffer's undo information."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
589 (interactive)
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
590 (and buffer-undo-list
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
591 (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
592 (error "Aborted")))
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
593 (setq buffer-undo-list nil)
21566
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
594 ;; 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
595 (let ((coding-system-for-read 'raw-text)
19877
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
596 ;; If the buffer was read with EOL conversions, be sure to use the
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
597 ;; same conversions when passing the region to the `hexl' program.
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
598 (coding-system-for-write
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
599 (let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
600 (cond ((eq eol-type 1)
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
601 'raw-text-dos)
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
602 ((eq eol-type 2)
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
603 'raw-text-mac)
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
604 ((eq eol-type 0)
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
605 'raw-text-unix)
3b008d891adb (hexlify-buffer): Bind coding-system-for-write to
Richard M. Stallman <rms@gnu.org>
parents: 19113
diff changeset
606 (t 'no-conversion))))
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
607 (buffer-undo-list t))
7398
abb02a91f4cb (dehexlify-buffer): Reflect that binary-process was
Richard M. Stallman <rms@gnu.org>
parents: 7387
diff changeset
608 (shell-command-on-region (point-min) (point-max) hexlify-command t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
609
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
610 (defun dehexlify-buffer ()
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
611 "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
612 This discards the buffer's undo information."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
613 (interactive)
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
614 (and buffer-undo-list
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
615 (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
616 (error "Aborted")))
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
617 (setq buffer-undo-list nil)
21566
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
618 (let ((coding-system-for-write 'raw-text)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
619 (coding-system-for-read
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
620 (let ((eol-type (coding-system-eol-type buffer-file-coding-system)))
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
621 (cond ((eq eol-type 1)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
622 'raw-text-dos)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
623 ((eq eol-type 2)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
624 'raw-text-mac)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
625 ((eq eol-type 0)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
626 'raw-text-unix)
0641f568d88f (hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents: 20902
diff changeset
627 (t 'no-conversion))))
14930
382c7659273e (hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents: 14693
diff changeset
628 (buffer-undo-list t))
5458
0873b536e71d (dehexlify-buffer): If msdos, bind binary-process.
Richard M. Stallman <rms@gnu.org>
parents: 5140
diff changeset
629 (shell-command-on-region (point-min) (point-max) dehexlify-command t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
630
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
631 (defun hexl-char-after-point ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
632 "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
633 (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
634 (char-after (1+ (point)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
635
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
636 (defun hexl-htoi (lh rh)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
637 "Hex (char) LH (char) RH to integer."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
638 (+ (* (hexl-hex-char-to-integer lh) 16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
639 (hexl-hex-char-to-integer rh)))
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 hexl-hex-char-to-integer (character)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
642 "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
643 (if (and (>= character ?0) (<= character ?9))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
644 (- character ?0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
645 (let ((ch (logior character 32)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
646 (if (and (>= ch ?a) (<= ch ?f))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
647 (- ch (- ?a 10))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
648 (error "Invalid hex digit `%c'" ch)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
649
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
650 (defun hexl-oct-char-to-integer (character)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
651 "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
652 (if (and (>= character ?0) (<= character ?7))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
653 (- character ?0)
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
654 (error "Invalid octal digit `%c'" character)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
655
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
656 (defun hexl-printable-character (ch)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
657 "Return a displayable string for character CH."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
658 (format "%c" (if hexl-iso
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
659 (if (or (< ch 32) (and (>= ch 127) (< ch 160)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
660 46
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
661 ch)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
662 (if (or (< ch 32) (>= ch 127))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
663 46
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
664 ch))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
665
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
666 (defun hexl-self-insert-command (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
667 "Insert this character."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
668 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
669 (hexl-insert-char last-command-char arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
670
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
671 (defun hexl-insert-char (ch num)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
672 "Insert a character in a hexl buffer."
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
673 (let ((address (hexl-current-address t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
674 (while (> num 0)
13024
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
675 (let ((hex-position
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
676 (+ (* (/ address 16) 68)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
677 11
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
678 (* 2 (% address 16))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
679 (/ (% address 16) 2)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
680 (ascii-position
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
681 (+ (* (/ address 16) 68) 52 (% address 16)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
682 at-ascii-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
683 (if (= (point) ascii-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
684 (setq at-ascii-position t))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
685 (goto-char hex-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
686 (delete-char 2)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
687 (insert (format "%02x" ch))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
688 (goto-char ascii-position)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
689 (delete-char 1)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
690 (insert (hexl-printable-character ch))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
691 (or (eq address hexl-max-address)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
692 (setq address (1+ address)))
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
693 (hexl-goto-address address)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
694 (if at-ascii-position
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
695 (progn
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
696 (beginning-of-line)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
697 (forward-char 51)
53205d572b1b (hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents: 10976
diff changeset
698 (forward-char (% address 16)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
699 (setq num (1- num)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
700
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
701 ;; hex conversion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
702
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
703 (defun hexl-insert-hex-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
704 "Insert a ASCII char ARG times at point for a given hexadecimal number."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
705 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
706 (let ((num (hexl-hex-string-to-integer (read-string "Hex number: "))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
707 (if (or (> num 255) (< num 0))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
708 (error "Hex number out of range")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
709 (hexl-insert-char num arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
710
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
711 (defun hexl-insert-decimal-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
712 "Insert a ASCII char ARG times at point for a given decimal number."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
713 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
714 (let ((num (string-to-int (read-string "Decimal Number: "))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
715 (if (or (> num 255) (< num 0))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
716 (error "Decimal number out of range")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
717 (hexl-insert-char num arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
718
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
719 (defun hexl-insert-octal-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
720 "Insert a ASCII char ARG times at point for a given octal number."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
721 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
722 (let ((num (hexl-octal-string-to-integer (read-string "Octal Number: "))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
723 (if (or (> num 255) (< num 0))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
724 (error "Decimal number out of range")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
725 (hexl-insert-char num arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
726
20654
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
727 (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
728 "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
729 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
730 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
731 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
732 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
733 (interactive "P")
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
734 (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
735 (> (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
736 (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
737
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
738 (make-local-hook 'post-command-hook)
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
739
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
740 (if on-p
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
741 ;; turn it on
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
742 (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
743 (progn
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
744 (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
745 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
746 (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
747 (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
748 ;; turn it off
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
749 (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
750 (progn
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
751 (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
752 (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
753 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
754 (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
755 )))))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
756
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
757 (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
758 "Find and highlight the 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
759 (let ((pos (+ 51
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
760 (- (point) (current-column))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
761 (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
762 (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
763 ))
699073363989 (hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents: 19877
diff changeset
764
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
765 ;; startup stuff.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
766
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
767 (if hexl-mode-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
768 nil
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
769 (setq hexl-mode-map (make-sparse-keymap))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
770
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
771 (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
772 (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
773 (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
774 (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
775 (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
776 (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
777 (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
778 (define-key hexl-mode-map [prior] 'hexl-scroll-down)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
779 (define-key hexl-mode-map [home] 'hexl-beginning-of-buffer)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
780 (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
781 (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
782 (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
783 (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
784 (define-key hexl-mode-map "\177" 'undefined)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
785
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
786 (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
787 (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
788 (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
789 (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
790 (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
791
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
792 (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
793 (define-key hexl-mode-map (char-to-string help-char) 'undefined))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
794
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
795 (define-key hexl-mode-map "\C-i" 'hexl-self-insert-command)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
796 (define-key hexl-mode-map "\C-j" 'hexl-self-insert-command)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
797 (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
798 (define-key hexl-mode-map "\C-m" 'hexl-self-insert-command)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
799 (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
800 (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
801 (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
802 (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
803 (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
804 (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
805 (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
806 (define-key hexl-mode-map "\C-y" 'undefined)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
807
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
808 (let ((ch 32))
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
809 (while (< ch 127)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
810 (define-key hexl-mode-map (format "%c" ch) 'hexl-self-insert-command)
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
811 (setq ch (1+ ch))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
812
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
813 (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
814 (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
815 (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
816 (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
817 (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
818 (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
819 (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
820 (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
821 (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
822 (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
823 (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
824 (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
825 (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
826 (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
827 (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
828 (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
829 (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
830 (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
831 (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
832 (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
833 (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
834 (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
835 (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
836 (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
837 (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
838 (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
839 (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
840 (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
841 (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
842 (define-key hexl-mode-map "\e>" 'hexl-end-of-buffer)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
843
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
844 (define-key hexl-mode-map "\C-c\C-c" 'hexl-mode-exit)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
845
15339
b774b50ca14a (hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents: 14930
diff changeset
846 (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
847 (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
848 (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
849 (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
850 (define-key hexl-mode-map "\C-x\C-t" 'undefined))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
851
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
852 (provide 'hexl)
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
853
660
08eb386dd0f3 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 209
diff changeset
854 ;;; hexl.el ends here