Mercurial > emacs
annotate lisp/hexl.el @ 110410:f2e111723c3a
Merge changes made in Gnus trunk.
Reimplement nnimap, and do tweaks to the rest of the code to support that.
* gnus-int.el (gnus-finish-retrieve-group-infos)
(gnus-retrieve-group-data-early): New functions.
* gnus-range.el (gnus-range-nconcat): New function.
* gnus-start.el (gnus-get-unread-articles): Support early retrieval of
data.
(gnus-read-active-for-groups): Support finishing the early retrieval of
data.
* gnus-sum.el (gnus-summary-move-article): Pass the move-to group name
if the move is internal, so that nnimap can do fast internal moves.
* gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for
nnimap usage.
* nnimap.el: Rewritten.
* nnmail.el (nnmail-inhibit-default-split-group): New internal variable
to allow the mail splitting to not return a default group. This is
useful for nnimap, which will leave unmatched mail in the inbox.
* utf7.el (utf7-encode): Autoload.
Implement shell connection.
* nnimap.el (nnimap-open-shell-stream): New function.
(nnimap-open-connection): Use it.
Get the number of lines by using BODYSTRUCTURE.
(nnimap-transform-headers): Get the number of lines in each message.
(nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the
number of lines.
Not all servers return UIDNEXT. Work past this problem.
Remove junk from end of file.
Fix typo in "bogus" section.
Make capabilties be case-insensitive.
Require cl when compiling.
Don't bug out if the LIST command doesn't have any parameters.
2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change)
* nnimap.el (nnimap-get-groups): Don't bug out if the LIST command
doesn't have any parameters.
(mm-text-html-renderer): Document gnus-article-html.
2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix)
* mm-decode.el (mm-text-html-renderer): Document gnus-article-html.
* dgnushack.el: Define netrc-credentials.
If the user doesn't have a /etc/services, supply some sensible port defaults.
Have `unseen-or-unread' select an unread unseen article first.
(nntp-open-server): Return whether the open was successful or not.
Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ).
Save result so that it doesn't say "failed" all the time.
Add ~/.authinfo to the default, since that's probably most useful for users.
Don't use the "finish" method when we're reading from the agent.
Add some more nnimap-relevant agent stuff to nnagent.el.
* nnimap.el (nnimap-with-process-buffer): Removed.
Revert one line that was changed by mistake in the last checkin.
(nnimap-open-connection): Don't error out when we can't make a connection
nnimap-related changes to avoid bugging out if we can't contact a server.
* gnus-start.el (gnus-get-unread-articles): Don't try to scan groups
from methods that are denied.
* nnimap.el (nnimap-possibly-change-group): Return nil if we can't log
in.
(nnimap-finish-retrieve-group-infos): Make sure we're not waiting for
nothing.
* gnus-sum.el (gnus-select-newsgroup): Indent.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Sat, 18 Sep 2010 10:02:19 +0000 |
parents | a3b4c6fc276c |
children | cc035ccb9275 376148b31b5e |
rev | line source |
---|---|
38412
253f761ad37b
Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents:
37722
diff
changeset
|
1 ;;; hexl.el --- edit a file in a hex dump format using the hexl filter |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
670
diff
changeset
|
2 |
64762
41bb365f41c4
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64337
diff
changeset
|
3 ;; Copyright (C) 1989, 1994, 1998, 2001, 2002, 2003, 2004, |
106815 | 4 ;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. |
846
20674ae6bf52
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
807
diff
changeset
|
5 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
670
diff
changeset
|
6 ;; Author: Keith Gabryelski <ag@wheaties.ai.mit.edu> |
5140 | 7 ;; Maintainer: FSF |
8 ;; Keywords: data | |
36 | 9 |
10 ;; This file is part of GNU Emacs. | |
11 | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94379
diff
changeset
|
12 ;; GNU Emacs is free software: you can redistribute it and/or modify |
36 | 13 ;; it under the terms of the GNU General Public License as published by |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94379
diff
changeset
|
14 ;; the Free Software Foundation, either version 3 of the License, or |
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94379
diff
changeset
|
15 ;; (at your option) any later version. |
36 | 16 |
17 ;; GNU Emacs is distributed in the hope that it will be useful, | |
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 ;; GNU General Public License for more details. | |
21 | |
22 ;; You should have received a copy of the GNU General Public License | |
94678
ee5932bf781d
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
94379
diff
changeset
|
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
36 | 24 |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
670
diff
changeset
|
25 ;;; Commentary: |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
670
diff
changeset
|
26 |
2307
10e417efb12a
Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
1978
diff
changeset
|
27 ;; 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
|
28 ;; 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
|
29 ;; 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
|
30 ;; binary. For full instructions, invoke `hexl-mode' on an empty buffer and |
43592 | 31 ;; do M-x `describe-mode'. |
36 | 32 ;; |
43592 | 33 ;; NOTE: Remember to change `hexl-program' or `hexl-options' if needed. |
36 | 34 ;; |
35 ;; Currently hexl only supports big endian hex output with 16 bit | |
36 ;; grouping. | |
37 ;; | |
38 ;; -iso in `hexl-options' will allow iso characters to display in the | |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
39 ;; ASCII region of the screen (if your Emacs supports this) instead of |
36 | 40 ;; changing them to dots. |
41 | |
807
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
670
diff
changeset
|
42 ;;; Code: |
4f28bd14272c
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
670
diff
changeset
|
43 |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
44 (require 'eldoc) |
104682
73bff1db57b6
* gnus/nnheader.el (nnheader-find-file-noselect):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104664
diff
changeset
|
45 (eval-when-compile (require 'cl)) |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
46 |
36 | 47 ;; |
48 ;; vars here | |
49 ;; | |
50 | |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
51 (defgroup hexl nil |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
52 "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
|
53 :group 'data) |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
54 |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
55 |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
56 (defcustom hexl-program "hexl" |
13988
118f028ac3dd
(hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents:
13897
diff
changeset
|
57 "The program that will hexlify and dehexlify its stdin. |
3215 | 58 `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
|
59 and \"-de\" when dehexlifying a buffer." |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
60 :type 'string |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
61 :group 'hexl) |
36 | 62 |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
63 (defcustom hexl-iso "" |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
64 "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
|
65 \"-iso\" otherwise it should be \"\"." |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
66 :type 'string |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
67 :group 'hexl) |
36 | 68 |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
69 (defcustom hexl-options (format "-hex %s" hexl-iso) |
43690
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
70 "Space separated options to `hexl-program' that suit your needs. |
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
71 Quoting cannot be used, so the arguments cannot themselves contain spaces." |
17436
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
72 :type 'string |
2a9fdbfcb993
Add defgroup; use defcustom for user vars.
Richard M. Stallman <rms@gnu.org>
parents:
15402
diff
changeset
|
73 :group 'hexl) |
36 | 74 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
75 (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
|
76 "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
|
77 :type 'boolean |
21669
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21566
diff
changeset
|
78 :group 'hexl |
9861518505cb
*** empty log message ***
Dan Nicolaescu <done@ece.arizona.edu>
parents:
21566
diff
changeset
|
79 :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
|
80 |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
81 (defcustom hexl-mode-hook '(hexl-follow-line hexl-activate-ruler) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
82 "Normal hook run when entering Hexl mode." |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
83 :type 'hook |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
84 :options '(hexl-follow-line hexl-activate-ruler turn-on-eldoc-mode) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
85 :group 'hexl) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
86 |
64892 | 87 (defface hexl-address-region |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
88 '((t (:inherit header-line))) |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
89 "Face used in address area of hexl-mode buffer." |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
90 :group 'hexl) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
91 |
64892 | 92 (defface hexl-ascii-region |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
93 '((t (:inherit header-line))) |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
94 "Face used in ascii area of hexl-mode buffer." |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
95 :group 'hexl) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
96 |
36 | 97 (defvar hexl-max-address 0 |
98 "Maximum offset into hexl buffer.") | |
99 | |
100 (defvar hexl-mode-map nil) | |
101 | |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
102 ;; Variable declarations for suppressing warnings from the byte-compiler. |
58373
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
103 (defvar ruler-mode) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
104 (defvar ruler-mode-ruler-function) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
105 (defvar hl-line-mode) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
106 (defvar hl-line-range-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
107 (defvar hl-line-face) |
58373
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
108 |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
109 ;; Variables where the original values are stored to. |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
110 (defvar hexl-mode-old-hl-line-mode) |
74332
47735bfd0d95
(hexl-mode-old-hl-line-range-function): New variable
Masatake YAMATO <jet@gyve.org>
parents:
74139
diff
changeset
|
111 (defvar hexl-mode-old-hl-line-range-function) |
47735bfd0d95
(hexl-mode-old-hl-line-range-function): New variable
Masatake YAMATO <jet@gyve.org>
parents:
74139
diff
changeset
|
112 (defvar hexl-mode-old-hl-line-face) |
10976
354c9e79de15
(hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents:
10948
diff
changeset
|
113 (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
|
114 (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
|
115 (defvar hexl-mode-old-major-mode) |
58373
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
116 (defvar hexl-mode-old-ruler-mode) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
117 (defvar hexl-mode-old-ruler-function) |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
118 (defvar hexl-mode-old-isearch-search-fun-function) |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
119 (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
|
120 (defvar hexl-mode-old-syntax-table) |
59099
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
121 (defvar hexl-mode-old-font-lock-keywords) |
94379
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
122 (defvar hexl-mode-old-eldoc-documentation-function) |
10976
354c9e79de15
(hexl-mode-old-local-map, hexl-mode-old-mode-name)
Richard M. Stallman <rms@gnu.org>
parents:
10948
diff
changeset
|
123 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
124 (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
|
125 "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
|
126 (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
|
127 |
59099
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
128 (defvar hexl-font-lock-keywords |
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
129 '(("^\\([0-9a-f]+:\\).\\{40\\} \\(.+$\\)" |
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
130 ;; "^\\([0-9a-f]+:\\).+ \\(.+$\\)" |
64892 | 131 (1 'hexl-address-region t t) |
132 (2 'hexl-ascii-region t t))) | |
59099
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
133 "Font lock keywords used in `hexl-mode'.") |
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
134 |
36 | 135 ;; routines |
136 | |
17656
7b61d509af8a
(hexl-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
137 (put 'hexl-mode 'mode-class 'special) |
7b61d509af8a
(hexl-mode): Add a mode-class property.
Richard M. Stallman <rms@gnu.org>
parents:
17436
diff
changeset
|
138 |
670
bff41708644e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
139 ;;;###autoload |
36 | 140 (defun hexl-mode (&optional arg) |
25948
ce46ba443d45
* hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents:
25927
diff
changeset
|
141 "\\<hexl-mode-map>A mode for editing binary files in hex dump format. |
ce46ba443d45
* hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents:
25927
diff
changeset
|
142 This is not an ordinary major mode; it alters some aspects |
46269
cc56a3fad98f
(hexl-mode): Fix typo.
Juanma Barranquero <lekktu@gmail.com>
parents:
46265
diff
changeset
|
143 of the current mode's behavior, but not all; also, you can exit |
25948
ce46ba443d45
* hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents:
25927
diff
changeset
|
144 Hexl mode and return to the previous mode using `hexl-mode-exit'. |
36 | 145 |
146 This function automatically converts a buffer into the hexl format | |
147 using the function `hexlify-buffer'. | |
148 | |
208 | 149 Each line in the buffer has an \"address\" (displayed in hexadecimal) |
36 | 150 representing the offset into the file that the characters on this line |
151 are at and 16 characters from the file (displayed as hexadecimal | |
152 values grouped every 16 bits) and as their ASCII values. | |
153 | |
154 If any of the characters (displayed as ASCII characters) are | |
155 unprintable (control or meta characters) they will be replaced as | |
156 periods. | |
157 | |
208 | 158 If `hexl-mode' is invoked with an argument the buffer is assumed to be |
159 in hexl format. | |
36 | 160 |
161 A sample format: | |
162 | |
163 HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ASCII-TEXT | |
164 -------- ---- ---- ---- ---- ---- ---- ---- ---- ---------------- | |
165 00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64 This is hexl-mod | |
166 00000010: 652e 2020 4561 6368 206c 696e 6520 7265 e. Each line re | |
167 00000020: 7072 6573 656e 7473 2031 3620 6279 7465 presents 16 byte | |
168 00000030: 7320 6173 2068 6578 6164 6563 696d 616c s as hexadecimal | |
169 00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74 ASCII.and print | |
170 00000050: 6162 6c65 2041 5343 4949 2063 6861 7261 able ASCII chara | |
171 00000060: 6374 6572 732e 2020 416e 7920 636f 6e74 cters. Any cont | |
172 00000070: 726f 6c20 6f72 206e 6f6e 2d41 5343 4949 rol or non-ASCII | |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49567
diff
changeset
|
173 00000080: 2063 6861 7261 6374 6572 730a 6172 6520 characters.are |
36 | 174 00000090: 6469 7370 6c61 7965 6420 6173 2070 6572 displayed as per |
175 000000a0: 696f 6473 2069 6e20 7468 6520 7072 696e iods in the prin | |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49567
diff
changeset
|
176 000000b0: 7461 626c 6520 6368 6172 6163 7465 7220 table character |
36 | 177 000000c0: 7265 6769 6f6e 2e0a region.. |
178 | |
73758
c47396e80085
(hexl-mode): Fix typo in docstring.
Juanma Barranquero <lekktu@gmail.com>
parents:
71685
diff
changeset
|
179 Movement is as simple as movement in a normal Emacs text buffer. Most |
36 | 180 cursor movement bindings are the same (ie. Use \\[hexl-backward-char], \\[hexl-forward-char], \\[hexl-next-line], and \\[hexl-previous-line] |
181 to move the cursor left, right, down, and up). | |
182 | |
183 Advanced cursor movement commands (ala \\[hexl-beginning-of-line], \\[hexl-end-of-line], \\[hexl-beginning-of-buffer], and \\[hexl-end-of-buffer]) are | |
184 also supported. | |
185 | |
186 There are several ways to change text in hexl mode: | |
187 | |
188 ASCII characters (character between space (0x20) and tilde (0x7E)) are | |
189 bound to self-insert so you can simply type the character and it will | |
190 insert itself (actually overstrike) into the buffer. | |
191 | |
192 \\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if | |
193 it isn't bound to self-insert. An octal number can be supplied in place | |
194 of another key to insert the octal number's ASCII representation. | |
195 | |
196 \\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF) | |
197 into the buffer at the current point. | |
198 | |
199 \\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377) | |
200 into the buffer at the current point. | |
201 | |
202 \\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255) | |
203 into the buffer at the current point. | |
204 | |
205 \\[hexl-mode-exit] will exit hexl-mode. | |
206 | |
670
bff41708644e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
207 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
|
208 will actually convert it back to binary format while saving. |
36 | 209 |
25948
ce46ba443d45
* hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents:
25927
diff
changeset
|
210 You can use \\[hexl-find-file] to visit a file in Hexl mode. |
36 | 211 |
212 \\[describe-bindings] for advanced commands." | |
213 (interactive "p") | |
25948
ce46ba443d45
* hexl.el (hexl-mode): Do nothing if already in hexl mode.
Phillip Rulon <pjr@gnu.org>
parents:
25927
diff
changeset
|
214 (unless (eq major-mode 'hexl-mode) |
15373
76072cbcae84
(hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents:
15339
diff
changeset
|
215 (let ((modified (buffer-modified-p)) |
76072cbcae84
(hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents:
15339
diff
changeset
|
216 (inhibit-read-only t) |
74139
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
217 (original-point (- (point) (point-min)))) |
15373
76072cbcae84
(hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents:
15339
diff
changeset
|
218 (and (eobp) (not (bobp)) |
76072cbcae84
(hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents:
15339
diff
changeset
|
219 (setq original-point (1- original-point))) |
74139
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
220 ;; If `hexl-mode' is invoked with an argument the buffer is assumed to |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
221 ;; be in hexl format. |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
222 (when (memq arg '(1 nil)) |
38853
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
223 ;; If the buffer's EOL type is -dos, we need to account for |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
224 ;; extra CR characters added when hexlify-buffer writes the |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
225 ;; buffer to a file. |
74139
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
226 ;; FIXME: This doesn't take into account multibyte coding systems. |
38853
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
227 (when (eq (coding-system-eol-type buffer-file-coding-system) 1) |
74139
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
228 (setq original-point (+ (count-lines (point-min) (point)) |
38853
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
229 original-point)) |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
230 (or (bolp) (setq original-point (1- original-point)))) |
15373
76072cbcae84
(hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents:
15339
diff
changeset
|
231 (hexlify-buffer) |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
232 (restore-buffer-modified-p modified)) |
74139
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
233 (set (make-local-variable 'hexl-max-address) |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
234 (let* ((full-lines (/ (buffer-size) 68)) |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
235 (last-line (% (buffer-size) 68)) |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
236 (last-line-bytes (% last-line 52))) |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
237 (+ last-line-bytes (* full-lines 16) -1))) |
56080
33e0ec6d5662
(hexl-mode): Catch errors in hexl-goto-address.
Richard M. Stallman <rms@gnu.org>
parents:
54439
diff
changeset
|
238 (condition-case nil |
33e0ec6d5662
(hexl-mode): Catch errors in hexl-goto-address.
Richard M. Stallman <rms@gnu.org>
parents:
54439
diff
changeset
|
239 (hexl-goto-address original-point) |
33e0ec6d5662
(hexl-mode): Catch errors in hexl-goto-address.
Richard M. Stallman <rms@gnu.org>
parents:
54439
diff
changeset
|
240 (error nil))) |
15373
76072cbcae84
(hexl-mode): Set hexl-max-address early on
Richard M. Stallman <rms@gnu.org>
parents:
15339
diff
changeset
|
241 |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
242 ;; 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
|
243 ;; override most of it. That way, we can restore it perfectly. |
36 | 244 (make-local-variable 'hexl-mode-old-local-map) |
245 (setq hexl-mode-old-local-map (current-local-map)) | |
246 (use-local-map hexl-mode-map) | |
247 | |
248 (make-local-variable 'hexl-mode-old-mode-name) | |
249 (setq hexl-mode-old-mode-name mode-name) | |
250 (setq mode-name "Hexl") | |
251 | |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
252 (set (make-local-variable 'hexl-mode-old-isearch-search-fun-function) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
253 isearch-search-fun-function) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
254 (set (make-local-variable 'isearch-search-fun-function) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
255 'hexl-isearch-search-function) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
256 |
36 | 257 (make-local-variable 'hexl-mode-old-major-mode) |
258 (setq hexl-mode-old-major-mode major-mode) | |
259 (setq major-mode 'hexl-mode) | |
260 | |
58373
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
261 (make-local-variable 'hexl-mode-old-ruler-mode) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
262 (setq hexl-mode-old-ruler-mode |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
263 (and (boundp 'ruler-mode) ruler-mode)) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
264 |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
265 (make-local-variable 'hexl-mode-old-hl-line-mode) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
266 (setq hexl-mode-old-hl-line-mode |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
267 (and (boundp 'hl-line-mode) hl-line-mode)) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
268 |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
269 (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
|
270 (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
|
271 (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
|
272 |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
273 (add-hook 'write-contents-functions 'hexl-save-buffer nil t) |
670
bff41708644e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
274 |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
275 (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
|
276 (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
|
277 (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
|
278 (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
|
279 |
59099
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
280 (make-local-variable 'hexl-mode-old-font-lock-keywords) |
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
281 (setq hexl-mode-old-font-lock-keywords font-lock-defaults) |
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
282 (setq font-lock-defaults '(hexl-font-lock-keywords t)) |
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
283 |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
284 ;; Add hooks to rehexlify or dehexlify on various events. |
75378
efb5e4ca015b
(hexl-mode-exit): Add missing quote.
Juanma Barranquero <lekktu@gmail.com>
parents:
75263
diff
changeset
|
285 (add-hook 'before-revert-hook 'hexl-before-revert-hook nil t) |
10948
2e151c5d8485
(hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents:
9780
diff
changeset
|
286 (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
|
287 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
288 (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
|
289 |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
290 ;; Set a callback function for eldoc. |
94379
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
291 (make-local-variable 'hexl-mode-old-eldoc-documentation-function) |
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
292 (setq hexl-mode-old-eldoc-documentation-function |
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
293 (bound-and-true-p eldoc-documentation-function)) |
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
294 |
61858
93f163f12d38
(hexl-mode): Use new name eldoc-documentation-function.
Richard M. Stallman <rms@gnu.org>
parents:
59099
diff
changeset
|
295 (set (make-local-variable 'eldoc-documentation-function) |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
296 'hexl-print-current-point-info) |
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
297 (eldoc-add-command-completions "hexl-") |
64337
a8184636c021
(hexl-mode-map): Recognize also `ehelp-command' as a valid binding for
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
298 (eldoc-remove-command "hexl-save-buffer" |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
299 "hexl-current-address") |
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
300 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
301 (if hexl-follow-ascii (hexl-follow-ascii 1))) |
62730
a6be3267f6bd
(hexl-mode): Use run-mode-hooks.
Lute Kamstra <lute@gnu.org>
parents:
62617
diff
changeset
|
302 (run-mode-hooks 'hexl-mode-hook)) |
36 | 303 |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
304 |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
305 (defun hexl-isearch-search-function () |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
306 (if (and (not isearch-regexp) (not isearch-word)) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
307 (lambda (string &optional bound noerror count) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
308 (funcall |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
309 (if isearch-forward 're-search-forward 're-search-backward) |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
310 (let ((textre |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
311 (if (> (length string) 80) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
312 (regexp-quote string) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
313 (mapconcat (lambda (c) (regexp-quote (string c))) string |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
314 "\\(?:\n\\(?:[:a-f0-9]+ \\)+ \\)?")))) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
315 (if (string-match "\\` ?\\([a-f0-9]+ \\)*[a-f0-9]+ ?\\'" string) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
316 (concat textre "\\|" |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
317 (mapconcat 'regexp-quote (split-string string " ") |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
318 " \\(?: .+\n[a-f0-9]+: \\)?")) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
319 textre)) |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
320 bound noerror count)) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
321 (let ((isearch-search-fun-function nil)) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
322 (isearch-search-fun)))) |
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
323 |
75263
52494ef7ef07
(hexl-before-revert-hook): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75190
diff
changeset
|
324 (defun hexl-before-revert-hook () |
52494ef7ef07
(hexl-before-revert-hook): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75190
diff
changeset
|
325 (remove-hook 'change-major-mode-hook 'hexl-maybe-dehexlify-buffer t)) |
52494ef7ef07
(hexl-before-revert-hook): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75190
diff
changeset
|
326 |
10948
2e151c5d8485
(hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents:
9780
diff
changeset
|
327 (defun hexl-after-revert-hook () |
75263
52494ef7ef07
(hexl-before-revert-hook): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75190
diff
changeset
|
328 (hexl-mode)) |
10948
2e151c5d8485
(hexl-mode): Make after-revert-hook rehexlify.
Richard M. Stallman <rms@gnu.org>
parents:
9780
diff
changeset
|
329 |
3891
f457e67ddb6b
(hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents:
3216
diff
changeset
|
330 (defvar hexl-in-save-buffer nil) |
f457e67ddb6b
(hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents:
3216
diff
changeset
|
331 |
36 | 332 (defun hexl-save-buffer () |
333 "Save a hexl format buffer as binary in visited file if modified." | |
334 (interactive) | |
3891
f457e67ddb6b
(hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents:
3216
diff
changeset
|
335 (if hexl-in-save-buffer nil |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
336 (restore-buffer-modified-p |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
337 (if (buffer-modified-p) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
338 (let ((buf (generate-new-buffer " hexl")) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
339 (name (buffer-name)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
340 (start (point-min)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
341 (end (point-max)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
342 modified) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
343 (with-current-buffer buf |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
344 (insert-buffer-substring name start end) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
345 (set-buffer name) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
346 (dehexlify-buffer) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
347 ;; Prevent infinite recursion. |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
348 (let ((hexl-in-save-buffer t)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
349 (save-buffer)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
350 (setq modified (buffer-modified-p)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
351 (delete-region (point-min) (point-max)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
352 (insert-buffer-substring buf start end) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
353 (kill-buffer buf) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
354 modified)) |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
355 (message "(No changes need to be saved)") |
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
356 nil)) |
3891
f457e67ddb6b
(hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents:
3216
diff
changeset
|
357 ;; Return t to indicate we have saved t |
f457e67ddb6b
(hexl-in-save-buffer): New flag.
Jim Blandy <jimb@redhat.com>
parents:
3216
diff
changeset
|
358 t)) |
36 | 359 |
670
bff41708644e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
360 ;;;###autoload |
36 | 361 (defun hexl-find-file (filename) |
71685 | 362 "Edit file FILENAME as a binary file in hex dump format. |
363 Switch to a buffer visiting file FILENAME, creating one if none exists, | |
364 and edit the file in `hexl-mode'." | |
46265
4eaf280a94e1
(hexl-find-file): Bind `completion-ignored-extensions' to nil when
Miles Bader <miles@gnu.org>
parents:
43690
diff
changeset
|
365 (interactive |
4eaf280a94e1
(hexl-find-file): Bind `completion-ignored-extensions' to nil when
Miles Bader <miles@gnu.org>
parents:
43690
diff
changeset
|
366 (list |
4eaf280a94e1
(hexl-find-file): Bind `completion-ignored-extensions' to nil when
Miles Bader <miles@gnu.org>
parents:
43690
diff
changeset
|
367 (let ((completion-ignored-extensions nil)) |
4eaf280a94e1
(hexl-find-file): Bind `completion-ignored-extensions' to nil when
Miles Bader <miles@gnu.org>
parents:
43690
diff
changeset
|
368 (read-file-name "Filename: " nil nil 'ret-must-match)))) |
104682
73bff1db57b6
* gnus/nnheader.el (nnheader-find-file-noselect):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104664
diff
changeset
|
369 ;; Ignore the user's setting of default major-mode. |
73bff1db57b6
* gnus/nnheader.el (nnheader-find-file-noselect):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
104664
diff
changeset
|
370 (letf (((default-value 'major-mode) 'fundamental-mode)) |
50424
0b8df17aac7e
(hexl-find-file): Ignore user's value of default-major-mode.
Richard M. Stallman <rms@gnu.org>
parents:
49588
diff
changeset
|
371 (find-file-literally filename)) |
36 | 372 (if (not (eq major-mode 'hexl-mode)) |
373 (hexl-mode))) | |
374 | |
375 (defun hexl-mode-exit (&optional arg) | |
670
bff41708644e
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
660
diff
changeset
|
376 "Exit Hexl mode, returning to previous mode. |
36 | 377 With arg, don't unhexlify buffer." |
378 (interactive "p") | |
379 (if (or (eq arg 1) (not arg)) | |
380 (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
|
381 (inhibit-read-only t) |
36 | 382 (original-point (1+ (hexl-current-address)))) |
383 (dehexlify-buffer) | |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
384 (remove-hook 'write-contents-functions 'hexl-save-buffer t) |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
385 (restore-buffer-modified-p modified) |
38853
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
386 (goto-char original-point) |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
387 ;; Maybe adjust point for the removed CR characters. |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
388 (when (eq (coding-system-eol-type buffer-file-coding-system) 1) |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
389 (setq original-point (- original-point |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
390 (count-lines (point-min) (point)))) |
a2845b455cbd
(hexl-mode, hexl-mode-exit): Adjust hexl-max-address and
Eli Zaretskii <eliz@gnu.org>
parents:
38412
diff
changeset
|
391 (or (bobp) (setq original-point (1+ original-point)))) |
36 | 392 (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
|
393 |
75263
52494ef7ef07
(hexl-before-revert-hook): New function.
Chong Yidong <cyd@stupidchicken.com>
parents:
75190
diff
changeset
|
394 (remove-hook 'before-revert-hook 'hexl-before-revert-hook t) |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
395 (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
|
396 (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
|
397 (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
|
398 (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
|
399 |
58373
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
400 (if (and (boundp 'ruler-mode) ruler-mode (not hexl-mode-old-ruler-mode)) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
401 (ruler-mode 0)) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
402 (when (boundp 'hexl-mode-old-ruler-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
403 (setq ruler-mode-ruler-function hexl-mode-old-ruler-function)) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
404 |
58373
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
405 (if (and (boundp 'hl-line-mode) hl-line-mode (not hexl-mode-old-hl-line-mode)) |
0d6b8a784254
(hexl-mode-old-hl-line-mode, hexl-mode-old-ruler-mode): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
56080
diff
changeset
|
406 (hl-line-mode 0)) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
407 (when (boundp 'hexl-mode-old-hl-line-range-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
408 (setq hl-line-range-function hexl-mode-old-hl-line-range-function)) |
75378
efb5e4ca015b
(hexl-mode-exit): Add missing quote.
Juanma Barranquero <lekktu@gmail.com>
parents:
75263
diff
changeset
|
409 (when (boundp 'hexl-mode-old-hl-line-face) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
410 (setq hl-line-face hexl-mode-old-hl-line-face)) |
75378
efb5e4ca015b
(hexl-mode-exit): Add missing quote.
Juanma Barranquero <lekktu@gmail.com>
parents:
75263
diff
changeset
|
411 |
94379
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
412 (when (boundp 'hexl-mode-old-eldoc-documentation-function) |
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
413 (setq eldoc-documentation-function |
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
414 hexl-mode-old-eldoc-documentation-function)) |
154aba86b686
(hexl-mode): Stash `eldoc-documentation-function' in
John Paul Wallington <jpw@pobox.com>
parents:
91799
diff
changeset
|
415 |
13897
1960e2c77da7
(hexl-mode): Don't call kill-all-local-variables.
Richard M. Stallman <rms@gnu.org>
parents:
13599
diff
changeset
|
416 (setq require-final-newline hexl-mode-old-require-final-newline) |
36 | 417 (setq mode-name hexl-mode-old-mode-name) |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
418 (setq isearch-search-fun-function hexl-mode-old-isearch-search-fun-function) |
36 | 419 (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
|
420 (set-syntax-table hexl-mode-old-syntax-table) |
59099
1d03ef527ad6
* hexl.el (hexlify-buffer): Remove fontification here.
Masatake YAMATO <jet@gyve.org>
parents:
58373
diff
changeset
|
421 (setq font-lock-defaults hexl-mode-old-font-lock-keywords) |
36 | 422 (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
|
423 (force-mode-line-update)) |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
424 |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
425 (defun hexl-maybe-dehexlify-buffer () |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
426 "Convert a hexl format buffer to binary. |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
427 Ask the user for confirmation." |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
428 (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
|
429 (let ((modified (buffer-modified-p)) |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
430 (inhibit-read-only t) |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
431 (original-point (1+ (hexl-current-address)))) |
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
432 (dehexlify-buffer) |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
433 (remove-hook 'write-contents-functions 'hexl-save-buffer t) |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
434 (restore-buffer-modified-p modified) |
8222
e03e94b14ba4
(hexl-maybe-dehexlify-buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7711
diff
changeset
|
435 (goto-char original-point)))) |
36 | 436 |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
437 (defun hexl-current-address (&optional validate) |
36 | 438 "Return current hexl-address." |
439 (interactive) | |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
440 (let ((current-column (- (% (- (point) (point-min) -1) 68) 11)) |
36 | 441 (hexl-address 0)) |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
442 (if (< current-column 0) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
443 (if validate |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
444 (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
|
445 (setq current-column 0))) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
446 (setq hexl-address |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
447 (+ (* (/ (- (point) (point-min) -1) 68) 16) |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
448 (if (>= current-column 41) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
449 (- current-column 41) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
450 (/ (- current-column (/ current-column 5)) 2)))) |
105372
bd2966850aac
Use `called-interactively-p' instead of `interactive-p'.
Juanma Barranquero <lekktu@gmail.com>
parents:
104682
diff
changeset
|
451 (when (called-interactively-p 'interactive) |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
452 (message "Current address is %d/0x%08x" hexl-address hexl-address)) |
36 | 453 hexl-address)) |
454 | |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
455 (defun hexl-print-current-point-info () |
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
456 "Return current hexl-address in string. |
65079
a583e2125321
* hexl.el (hexl-print-current-point-info): Fix simple spelling error.
Masatake YAMATO <jet@gyve.org>
parents:
64892
diff
changeset
|
457 This function is intended to be used as eldoc callback." |
54275
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
458 (let ((addr (hexl-current-address))) |
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
459 (format "Current address is %d/0x%08x" addr addr))) |
f4b54db9c8ae
(hexl-mode): Set `hexl-print-current-point-info' as the callback function for eldoc.
Masatake YAMATO <jet@gyve.org>
parents:
53861
diff
changeset
|
460 |
36 | 461 (defun hexl-address-to-marker (address) |
25927
776bf3692d9d
* hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents:
24659
diff
changeset
|
462 "Return buffer position for ADDRESS." |
36 | 463 (interactive "nAddress: ") |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
464 (+ (* (/ address 16) 68) 10 (point-min) (/ (* (% address 16) 5) 2))) |
36 | 465 |
466 (defun hexl-goto-address (address) | |
79165
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
467 "Go to hexl-mode (decimal) address ADDRESS. |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
468 Signal error if ADDRESS is out of range." |
36 | 469 (interactive "nAddress: ") |
470 (if (or (< address 0) (> address hexl-max-address)) | |
56080
33e0ec6d5662
(hexl-mode): Catch errors in hexl-goto-address.
Richard M. Stallman <rms@gnu.org>
parents:
54439
diff
changeset
|
471 (error "Out of hexl region")) |
36 | 472 (goto-char (hexl-address-to-marker address))) |
473 | |
474 (defun hexl-goto-hex-address (hex-address) | |
209 | 475 "Go to hexl-mode address (hex string) HEX-ADDRESS. |
36 | 476 Signal error if HEX-ADDRESS is out of range." |
477 (interactive "sHex Address: ") | |
478 (hexl-goto-address (hexl-hex-string-to-integer hex-address))) | |
479 | |
480 (defun hexl-hex-string-to-integer (hex-string) | |
481 "Return decimal integer for HEX-STRING." | |
482 (interactive "sHex number: ") | |
483 (let ((hex-num 0)) | |
484 (while (not (equal hex-string "")) | |
485 (setq hex-num (+ (* hex-num 16) | |
486 (hexl-hex-char-to-integer (string-to-char hex-string)))) | |
487 (setq hex-string (substring hex-string 1))) | |
488 hex-num)) | |
489 | |
490 (defun hexl-octal-string-to-integer (octal-string) | |
491 "Return decimal integer for OCTAL-STRING." | |
492 (interactive "sOctal number: ") | |
493 (let ((oct-num 0)) | |
494 (while (not (equal octal-string "")) | |
495 (setq oct-num (+ (* oct-num 8) | |
496 (hexl-oct-char-to-integer | |
497 (string-to-char octal-string)))) | |
498 (setq octal-string (substring octal-string 1))) | |
499 oct-num)) | |
500 | |
501 ;; move point functions | |
502 | |
503 (defun hexl-backward-char (arg) | |
504 "Move to left ARG bytes (right if ARG negative) in hexl-mode." | |
505 (interactive "p") | |
506 (hexl-goto-address (- (hexl-current-address) arg))) | |
507 | |
508 (defun hexl-forward-char (arg) | |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
509 "Move to right ARG bytes (left if ARG negative) in hexl-mode." |
36 | 510 (interactive "p") |
511 (hexl-goto-address (+ (hexl-current-address) arg))) | |
512 | |
513 (defun hexl-backward-short (arg) | |
514 "Move to left ARG shorts (right if ARG negative) in hexl-mode." | |
515 (interactive "p") | |
516 (hexl-goto-address (let ((address (hexl-current-address))) | |
517 (if (< arg 0) | |
518 (progn | |
519 (setq arg (- arg)) | |
520 (while (> arg 0) | |
521 (if (not (equal address (logior address 3))) | |
522 (if (> address hexl-max-address) | |
523 (progn | |
524 (message "End of buffer.") | |
525 (setq address hexl-max-address)) | |
526 (setq address (logior address 3))) | |
527 (if (> address hexl-max-address) | |
528 (progn | |
529 (message "End of buffer.") | |
530 (setq address hexl-max-address)) | |
531 (setq address (+ address 4)))) | |
532 (setq arg (1- arg))) | |
533 (if (> address hexl-max-address) | |
534 (progn | |
535 (message "End of buffer.") | |
536 (setq address hexl-max-address)) | |
537 (setq address (logior address 3)))) | |
538 (while (> arg 0) | |
539 (if (not (equal address (logand address -4))) | |
540 (setq address (logand address -4)) | |
541 (if (not (equal address 0)) | |
542 (setq address (- address 4)) | |
543 (message "Beginning of buffer."))) | |
544 (setq arg (1- arg)))) | |
545 address))) | |
546 | |
547 (defun hexl-forward-short (arg) | |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
548 "Move to right ARG shorts (left if ARG negative) in hexl-mode." |
36 | 549 (interactive "p") |
550 (hexl-backward-short (- arg))) | |
551 | |
552 (defun hexl-backward-word (arg) | |
553 "Move to left ARG words (right if ARG negative) in hexl-mode." | |
554 (interactive "p") | |
555 (hexl-goto-address (let ((address (hexl-current-address))) | |
556 (if (< arg 0) | |
557 (progn | |
558 (setq arg (- arg)) | |
559 (while (> arg 0) | |
560 (if (not (equal address (logior address 7))) | |
561 (if (> address hexl-max-address) | |
562 (progn | |
563 (message "End of buffer.") | |
564 (setq address hexl-max-address)) | |
565 (setq address (logior address 7))) | |
566 (if (> address hexl-max-address) | |
567 (progn | |
568 (message "End of buffer.") | |
569 (setq address hexl-max-address)) | |
570 (setq address (+ address 8)))) | |
571 (setq arg (1- arg))) | |
572 (if (> address hexl-max-address) | |
573 (progn | |
574 (message "End of buffer.") | |
575 (setq address hexl-max-address)) | |
576 (setq address (logior address 7)))) | |
577 (while (> arg 0) | |
578 (if (not (equal address (logand address -8))) | |
579 (setq address (logand address -8)) | |
580 (if (not (equal address 0)) | |
581 (setq address (- address 8)) | |
582 (message "Beginning of buffer."))) | |
583 (setq arg (1- arg)))) | |
584 address))) | |
585 | |
586 (defun hexl-forward-word (arg) | |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
587 "Move to right ARG words (left if ARG negative) in hexl-mode." |
36 | 588 (interactive "p") |
589 (hexl-backward-word (- arg))) | |
590 | |
591 (defun hexl-previous-line (arg) | |
209 | 592 "Move vertically up ARG lines [16 bytes] (down if ARG negative) in hexl-mode. |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
593 If there is no byte at the target address move to the last byte in that line." |
36 | 594 (interactive "p") |
595 (hexl-next-line (- arg))) | |
596 | |
597 (defun hexl-next-line (arg) | |
209 | 598 "Move vertically down ARG lines [16 bytes] (up if ARG negative) in hexl-mode. |
599 If there is no byte at the target address move to the last byte in that line." | |
36 | 600 (interactive "p") |
923 | 601 (hexl-goto-address (let ((address (+ (hexl-current-address) (* arg 16)))) |
36 | 602 (if (and (< arg 0) (< address 0)) |
603 (progn (message "Out of hexl region.") | |
604 (setq address | |
605 (% (hexl-current-address) 16))) | |
606 (if (and (> address hexl-max-address) | |
607 (< (% hexl-max-address 16) (% address 16))) | |
608 (setq address hexl-max-address) | |
609 (if (> address hexl-max-address) | |
610 (progn (message "Out of hexl region.") | |
611 (setq | |
612 address | |
613 (+ (logand hexl-max-address -16) | |
614 (% (hexl-current-address) 16))))))) | |
615 address))) | |
616 | |
617 (defun hexl-beginning-of-buffer (arg) | |
209 | 618 "Move to the beginning of the hexl buffer. |
619 Leaves `hexl-mark' at previous position. | |
620 With prefix arg N, puts point N bytes of the way from the true beginning." | |
36 | 621 (interactive "p") |
622 (push-mark (point)) | |
623 (hexl-goto-address (+ 0 (1- arg)))) | |
624 | |
625 (defun hexl-end-of-buffer (arg) | |
209 | 626 "Go to `hexl-max-address' minus ARG." |
36 | 627 (interactive "p") |
628 (push-mark (point)) | |
629 (hexl-goto-address (- hexl-max-address (1- arg)))) | |
630 | |
631 (defun hexl-beginning-of-line () | |
632 "Goto beginning of line in hexl mode." | |
633 (interactive) | |
634 (goto-char (+ (* (/ (point) 68) 68) 11))) | |
635 | |
636 (defun hexl-end-of-line () | |
637 "Goto end of line in hexl mode." | |
638 (interactive) | |
639 (hexl-goto-address (let ((address (logior (hexl-current-address) 15))) | |
640 (if (> address hexl-max-address) | |
641 (setq address hexl-max-address)) | |
642 address))) | |
643 | |
644 (defun hexl-scroll-down (arg) | |
645 "Scroll hexl buffer window upward ARG lines; or near full window if no ARG." | |
646 (interactive "P") | |
647 (if (null arg) | |
648 (setq arg (1- (window-height))) | |
649 (setq arg (prefix-numeric-value arg))) | |
650 (hexl-scroll-up (- arg))) | |
651 | |
652 (defun hexl-scroll-up (arg) | |
37168
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
653 "Scroll hexl buffer window upward ARG lines; or near full window if no ARG. |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
654 If there's no byte at the target address, move to the first or last line." |
36 | 655 (interactive "P") |
656 (if (null arg) | |
657 (setq arg (1- (window-height))) | |
658 (setq arg (prefix-numeric-value arg))) | |
37168
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
659 (let* ((movement (* arg 16)) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
660 (address (hexl-current-address)) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
661 (dest (+ address movement))) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
662 (cond |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
663 ;; If possible, try to stay at the same offset from the beginning |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
664 ;; of the 16-byte group, even if we move to the first or last |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
665 ;; group. |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
666 ((and (> dest hexl-max-address) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
667 (>= (% hexl-max-address 16) (% address 16))) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
668 (setq dest (+ (logand hexl-max-address -16) (% address 16)))) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
669 ((> dest hexl-max-address) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
670 (setq dest hexl-max-address)) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
671 ((< dest 0) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
672 (setq dest (% address 16)))) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
673 (if (/= dest (+ address movement)) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
674 (message "Out of hexl region.")) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
675 (hexl-goto-address dest) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
676 (recenter 0))) |
36 | 677 |
678 (defun hexl-beginning-of-1k-page () | |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
679 "Go to beginning of 1KB boundary." |
36 | 680 (interactive) |
681 (hexl-goto-address (logand (hexl-current-address) -1024))) | |
682 | |
683 (defun hexl-end-of-1k-page () | |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
684 "Go to end of 1KB boundary." |
36 | 685 (interactive) |
686 (hexl-goto-address (let ((address (logior (hexl-current-address) 1023))) | |
687 (if (> address hexl-max-address) | |
688 (setq address hexl-max-address)) | |
689 address))) | |
690 | |
691 (defun hexl-beginning-of-512b-page () | |
13988
118f028ac3dd
(hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents:
13897
diff
changeset
|
692 "Go to beginning of 512 byte boundary." |
36 | 693 (interactive) |
694 (hexl-goto-address (logand (hexl-current-address) -512))) | |
695 | |
696 (defun hexl-end-of-512b-page () | |
13988
118f028ac3dd
(hexl-program, hexl-beginning-of-1k-page,
Karl Heuer <kwzh@gnu.org>
parents:
13897
diff
changeset
|
697 "Go to end of 512 byte boundary." |
36 | 698 (interactive) |
699 (hexl-goto-address (let ((address (logior (hexl-current-address) 511))) | |
700 (if (> address hexl-max-address) | |
701 (setq address hexl-max-address)) | |
702 address))) | |
703 | |
704 (defun hexl-quoted-insert (arg) | |
705 "Read next input character and insert it. | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
706 Useful for inserting control characters and non-ASCII characters given their |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
707 numerical code. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
708 You may also type octal digits, to insert a character with that code." |
36 | 709 (interactive "p") |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
710 (hexl-insert-multibyte-char (read-quoted-char) arg)) |
36 | 711 |
712 ;00000000: 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF | |
713 | |
5066
8abe8fb9621c
(hexlify-buffer): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents:
4966
diff
changeset
|
714 ;;;###autoload |
36 | 715 (defun hexlify-buffer () |
14930
382c7659273e
(hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents:
14693
diff
changeset
|
716 "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
|
717 This discards the buffer's undo information." |
36 | 718 (interactive) |
75190
f109c3c00000
(hexlify-buffer, dehexlify-buffer): Don't complain and don't
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
74344
diff
changeset
|
719 (and (consp buffer-undo-list) |
14930
382c7659273e
(hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents:
14693
diff
changeset
|
720 (or (y-or-n-p "Converting to hexl format discards undo info; ok? ") |
75190
f109c3c00000
(hexlify-buffer, dehexlify-buffer): Don't complain and don't
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
74344
diff
changeset
|
721 (error "Aborted")) |
f109c3c00000
(hexlify-buffer, dehexlify-buffer): Don't complain and don't
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
74344
diff
changeset
|
722 (setq buffer-undo-list nil)) |
21566
0641f568d88f
(hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents:
20902
diff
changeset
|
723 ;; 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
|
724 (let ((coding-system-for-read 'raw-text) |
32385
ce4c7a83ed43
(hexlify-buffer): Bind coding-system-for-write to
Eli Zaretskii <eliz@gnu.org>
parents:
28657
diff
changeset
|
725 (coding-system-for-write buffer-file-coding-system) |
14930
382c7659273e
(hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents:
14693
diff
changeset
|
726 (buffer-undo-list t)) |
43690
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
727 (apply 'call-process-region (point-min) (point-max) |
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
728 (expand-file-name hexl-program exec-directory) |
70668
519157b1f1d6
(hexlify-buffer): Encode process arguments manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69934
diff
changeset
|
729 t t nil |
519157b1f1d6
(hexlify-buffer): Encode process arguments manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69934
diff
changeset
|
730 ;; Manually encode the args, otherwise they're encoded using |
519157b1f1d6
(hexlify-buffer): Encode process arguments manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69934
diff
changeset
|
731 ;; coding-system-for-write (i.e. buffer-file-coding-system) which |
519157b1f1d6
(hexlify-buffer): Encode process arguments manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69934
diff
changeset
|
732 ;; may not be what we want (e.g. utf-16 on a non-utf-16 system). |
74139
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
733 (mapcar (lambda (s) |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
734 (if (not (multibyte-string-p s)) s |
f61bc15684bb
(hexl-mode): Don't try to guess the max-address: get it from the horse's mouth.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
73758
diff
changeset
|
735 (encode-coding-string s locale-coding-system))) |
70668
519157b1f1d6
(hexlify-buffer): Encode process arguments manually.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
69934
diff
changeset
|
736 (split-string hexl-options))) |
25927
776bf3692d9d
* hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents:
24659
diff
changeset
|
737 (if (> (point) (hexl-address-to-marker hexl-max-address)) |
776bf3692d9d
* hexl.el (hexlify-buffer): Move point in proper range
Phillip Rulon <pjr@gnu.org>
parents:
24659
diff
changeset
|
738 (hexl-goto-address hexl-max-address)))) |
36 | 739 |
740 (defun dehexlify-buffer () | |
14930
382c7659273e
(hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents:
14693
diff
changeset
|
741 "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
|
742 This discards the buffer's undo information." |
36 | 743 (interactive) |
75190
f109c3c00000
(hexlify-buffer, dehexlify-buffer): Don't complain and don't
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
74344
diff
changeset
|
744 (and (consp buffer-undo-list) |
14930
382c7659273e
(hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents:
14693
diff
changeset
|
745 (or (y-or-n-p "Converting from hexl format discards undo info; ok? ") |
75190
f109c3c00000
(hexlify-buffer, dehexlify-buffer): Don't complain and don't
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
74344
diff
changeset
|
746 (error "Aborted")) |
f109c3c00000
(hexlify-buffer, dehexlify-buffer): Don't complain and don't
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
74344
diff
changeset
|
747 (setq buffer-undo-list nil)) |
21566
0641f568d88f
(hexlify-buffer, dehexlify-buffer): Don't bind
Eli Zaretskii <eliz@gnu.org>
parents:
20902
diff
changeset
|
748 (let ((coding-system-for-write 'raw-text) |
32385
ce4c7a83ed43
(hexlify-buffer): Bind coding-system-for-write to
Eli Zaretskii <eliz@gnu.org>
parents:
28657
diff
changeset
|
749 (coding-system-for-read buffer-file-coding-system) |
14930
382c7659273e
(hexlify-buffer, dehexlify-buffer): Clear out the undo
Richard M. Stallman <rms@gnu.org>
parents:
14693
diff
changeset
|
750 (buffer-undo-list t)) |
43690
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
751 (apply 'call-process-region (point-min) (point-max) |
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
752 (expand-file-name hexl-program exec-directory) |
72f0c48d5c61
(hexlify-command, dehexlify-command): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
43592
diff
changeset
|
753 t t nil "-de" (split-string hexl-options)))) |
36 | 754 |
755 (defun hexl-char-after-point () | |
756 "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
|
757 (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
|
758 (char-after (1+ (point))))) |
36 | 759 |
760 (defun hexl-htoi (lh rh) | |
761 "Hex (char) LH (char) RH to integer." | |
762 (+ (* (hexl-hex-char-to-integer lh) 16) | |
763 (hexl-hex-char-to-integer rh))) | |
764 | |
765 (defun hexl-hex-char-to-integer (character) | |
766 "Take a char and return its value as if it was a hex digit." | |
767 (if (and (>= character ?0) (<= character ?9)) | |
768 (- character ?0) | |
769 (let ((ch (logior character 32))) | |
770 (if (and (>= ch ?a) (<= ch ?f)) | |
771 (- ch (- ?a 10)) | |
17710 | 772 (error "Invalid hex digit `%c'" ch))))) |
36 | 773 |
774 (defun hexl-oct-char-to-integer (character) | |
775 "Take a char and return its value as if it was a octal digit." | |
776 (if (and (>= character ?0) (<= character ?7)) | |
777 (- character ?0) | |
17710 | 778 (error "Invalid octal digit `%c'" character))) |
36 | 779 |
780 (defun hexl-printable-character (ch) | |
781 "Return a displayable string for character CH." | |
106835
a3b4c6fc276c
Fix bug#5313: editing files in hexl-mode corrupts file
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
782 (format "%c" (if (equal hexl-iso "") |
a3b4c6fc276c
Fix bug#5313: editing files in hexl-mode corrupts file
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
783 (if (or (< ch 32) (>= ch 127)) |
36 | 784 46 |
785 ch) | |
106835
a3b4c6fc276c
Fix bug#5313: editing files in hexl-mode corrupts file
Juanma Barranquero <lekktu@gmail.com>
parents:
106815
diff
changeset
|
786 (if (or (< ch 32) (and (>= ch 127) (< ch 160))) |
36 | 787 46 |
788 ch)))) | |
789 | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
790 (defun hexl-insert-multibyte-char (ch num) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
791 "Insert a possibly multibyte character CH NUM times. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
792 |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
793 Non-ASCII characters are first encoded with `buffer-file-coding-system', |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
794 and their encoded form is inserted byte by byte." |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
795 (let ((charset (char-charset ch)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
796 (coding (if (or (null buffer-file-coding-system) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
797 ;; coding-system-type equals t means undecided. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
798 (eq (coding-system-type buffer-file-coding-system) t)) |
104664
50fdf250e26b
* mh-e/mh-comp.el (mh-send-letter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
101010
diff
changeset
|
799 (default-value 'buffer-file-coding-system) |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
800 buffer-file-coding-system))) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
801 (cond ((and (> ch 0) (< ch 256)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
802 (hexl-insert-char ch num)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
803 ((eq charset 'unknown) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
804 (error |
38959
c59671f19daa
(hexl-insert-multibyte-char, hexl-insert-char): Remove
Eli Zaretskii <eliz@gnu.org>
parents:
38917
diff
changeset
|
805 "0x%x -- invalid character code; use \\[hexl-insert-hex-string]" |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
806 ch)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
807 (t |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
808 (let ((encoded (encode-coding-char ch coding)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
809 (internal (string-as-unibyte (char-to-string ch))) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
810 internal-hex) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
811 ;; If encode-coding-char returns nil, it means our character |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
812 ;; cannot be safely encoded with buffer-file-coding-system. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
813 ;; In that case, we offer to insert the internal representation |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
814 ;; of that character, byte by byte. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
815 (when (null encoded) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
816 (setq internal-hex |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
817 (mapconcat (function (lambda (c) (format "%x" c))) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
818 internal " ")) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
819 (if (yes-or-no-p |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
820 (format |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
821 "Insert char 0x%x's internal representation \"%s\"? " |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
822 ch internal-hex)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
823 (setq encoded internal) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
824 (error |
38959
c59671f19daa
(hexl-insert-multibyte-char, hexl-insert-char): Remove
Eli Zaretskii <eliz@gnu.org>
parents:
38917
diff
changeset
|
825 "Can't encode `0x%x' with this buffer's coding system; try \\[hexl-insert-hex-string]" |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
826 ch))) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
827 (while (> num 0) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
828 (mapc |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
829 (function (lambda (c) (hexl-insert-char c 1))) encoded) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
830 (setq num (1- num)))))))) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
831 |
36 | 832 (defun hexl-self-insert-command (arg) |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
833 "Insert this character. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
834 Interactively, with a numeric argument, insert this character that many times. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
835 |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
836 Non-ASCII characters are first encoded with `buffer-file-coding-system', |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
837 and their encoded form is inserted byte by byte." |
36 | 838 (interactive "p") |
101010
4efc7ca085ce
Replace last-command-char with last-command-event.
Glenn Morris <rgm@gnu.org>
parents:
100908
diff
changeset
|
839 (hexl-insert-multibyte-char last-command-event arg)) |
36 | 840 |
841 (defun hexl-insert-char (ch num) | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
842 "Insert the character CH NUM times in a hexl buffer. |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
843 |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
844 CH must be a unibyte character whose value is between 0 and 255." |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
845 (if (or (< ch 0) (> ch 255)) |
53861
8af44ca54bdf
(hexl-insert-char): Add missing format string argument.
Andreas Schwab <schwab@suse.de>
parents:
52401
diff
changeset
|
846 (error "Invalid character 0x%x -- must be in the range [0..255]" ch)) |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
847 (let ((address (hexl-current-address t))) |
36 | 848 (while (> num 0) |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
849 (let ((hex-position |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
850 (+ (* (/ address 16) 68) |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
851 10 (point-min) |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
852 (* 2 (% address 16)) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
853 (/ (% address 16) 2))) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
854 (ascii-position |
47968
73b8f2ad9e28
(hexl-mode-old-write-contents-hooks): Remove.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
46269
diff
changeset
|
855 (+ (* (/ address 16) 68) 51 (point-min) (% address 16))) |
13024
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
856 at-ascii-position) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
857 (if (= (point) ascii-position) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
858 (setq at-ascii-position t)) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
859 (goto-char hex-position) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
860 (delete-char 2) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
861 (insert (format "%02x" ch)) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
862 (goto-char ascii-position) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
863 (delete-char 1) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
864 (insert (hexl-printable-character ch)) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
865 (or (eq address hexl-max-address) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
866 (setq address (1+ address))) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
867 (hexl-goto-address address) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
868 (if at-ascii-position |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
869 (progn |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
870 (beginning-of-line) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
871 (forward-char 51) |
53205d572b1b
(hexl-current-address): New arg VALIDATE.
Richard M. Stallman <rms@gnu.org>
parents:
10976
diff
changeset
|
872 (forward-char (% address 16))))) |
36 | 873 (setq num (1- num))))) |
874 | |
875 ;; hex conversion | |
876 | |
877 (defun hexl-insert-hex-char (arg) | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
878 "Insert a character given by its hexadecimal code ARG times at point." |
36 | 879 (interactive "p") |
880 (let ((num (hexl-hex-string-to-integer (read-string "Hex number: ")))) | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
881 (if (< num 0) |
17710 | 882 (error "Hex number out of range") |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
883 (hexl-insert-multibyte-char num arg)))) |
36 | 884 |
28657
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
885 (defun hexl-insert-hex-string (str arg) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
886 "Insert hexadecimal string STR at point ARG times. |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
887 Embedded whitespace, dashes, and periods in the string are ignored." |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
888 (interactive "sHex string: \np") |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
889 (setq str (replace-regexp-in-string "[- \t.]" "" str)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
890 (let ((chars '())) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
891 (let ((len (length str)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
892 (idx 0)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
893 (if (eq (logand len 1) 1) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
894 (let ((num (hexl-hex-string-to-integer (substring str 0 1)))) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
895 (setq chars (cons num chars)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
896 (setq idx 1))) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
897 (while (< idx len) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
898 (let* ((nidx (+ idx 2)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
899 (num (hexl-hex-string-to-integer (substring str idx nidx)))) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
900 (setq chars (cons num chars)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
901 (setq idx nidx)))) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
902 (setq chars (nreverse chars)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
903 (while (> arg 0) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
904 (let ((chars chars)) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
905 (while chars |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
906 (hexl-insert-char (car chars) 1) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
907 (setq chars (cdr chars)))) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
908 (setq arg (- arg 1))))) |
02edb3ce6745
(hexl-insert-hex-string): New command.
Gerd Moellmann <gerd@gnu.org>
parents:
25948
diff
changeset
|
909 |
36 | 910 (defun hexl-insert-decimal-char (arg) |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
911 "Insert a character given by its decimal code ARG times at point." |
36 | 912 (interactive "p") |
62402
a7e02ef1e3d6
Replace `string-to-int' by `string-to-number'.
Juanma Barranquero <lekktu@gmail.com>
parents:
61858
diff
changeset
|
913 (let ((num (string-to-number (read-string "Decimal Number: ")))) |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
914 (if (< num 0) |
17710 | 915 (error "Decimal number out of range") |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
916 (hexl-insert-multibyte-char num arg)))) |
36 | 917 |
918 (defun hexl-insert-octal-char (arg) | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
919 "Insert a character given by its octal code ARG times at point." |
36 | 920 (interactive "p") |
921 (let ((num (hexl-octal-string-to-integer (read-string "Octal Number: ")))) | |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
922 (if (< num 0) |
17710 | 923 (error "Decimal number out of range") |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
924 (hexl-insert-multibyte-char num arg)))) |
36 | 925 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
926 (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
|
927 "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
|
928 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
|
929 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
|
930 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
|
931 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
|
932 (interactive "P") |
49588
37645a051842
Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents:
49567
diff
changeset
|
933 (let ((on-p (if arg |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
934 (> (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
|
935 (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
|
936 |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
937 (if on-p |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
938 ;; turn it on |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
939 (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
|
940 (progn |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
941 (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
|
942 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
|
943 (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
|
944 (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
|
945 ;; turn it off |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
946 (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
|
947 (progn |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
948 (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
|
949 (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
|
950 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
|
951 (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
|
952 ))))) |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
953 |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
954 (defun hexl-activate-ruler () |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
955 "Activate `ruler-mode'." |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
956 (require 'ruler-mode) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
957 (unless (boundp 'hexl-mode-old-ruler-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
958 (set (make-local-variable 'hexl-mode-old-ruler-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
959 ruler-mode-ruler-function)) |
64337
a8184636c021
(hexl-mode-map): Recognize also `ehelp-command' as a valid binding for
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
960 (set (make-local-variable 'ruler-mode-ruler-function) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
961 'hexl-mode-ruler) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
962 (ruler-mode 1)) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
963 |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
964 (defun hexl-follow-line () |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
965 "Activate `hl-line-mode'." |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
966 (require 'hl-line) |
74333
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
967 (unless (boundp 'hexl-mode-old-hl-line-range-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
968 (set (make-local-variable 'hexl-mode-old-hl-line-range-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
969 hl-line-range-function)) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
970 (unless (boundp 'hexl-mode-old-hl-line-face) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
971 (set (make-local-variable 'hexl-mode-old-hl-line-face) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
972 hl-line-face)) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
973 (set (make-local-variable 'hl-line-range-function) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
974 'hexl-highlight-line-range) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
975 (set (make-local-variable 'hl-line-face) |
b77f0a410819
(hl-line-range-function, hl-line-face): Declare variables to avoid bytecomp warnings.
Masatake YAMATO <jet@gyve.org>
parents:
74332
diff
changeset
|
976 'highlight) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
977 (hl-line-mode 1)) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
978 |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
979 (defun hexl-highlight-line-range () |
64892 | 980 "Return the range of address region for the point. |
74344
c953b13ecd3f
(hexl-goto-address, hexl-forward-char, hexl-forward-short, hexl-forward-word,
Juanma Barranquero <lekktu@gmail.com>
parents:
74333
diff
changeset
|
981 This function is assumed to be used as callback function for `hl-line-mode'." |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
982 (cons |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
983 (line-beginning-position) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
984 ;; 9 stands for (length "87654321:") |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
985 (+ (line-beginning-position) 9))) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
986 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
987 (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
|
988 "Find and highlight the ASCII element corresponding to current point." |
37168
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
989 (let ((pos (+ 51 |
20654
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
990 (- (point) (current-column)) |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
991 (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
|
992 (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
|
993 )) |
699073363989
(hexl-follow-ascii): New function and variable to highlight the ASCII
Stephen Eglen <stephen@gnu.org>
parents:
19877
diff
changeset
|
994 |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
995 (defun hexl-mode-ruler () |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
996 "Return a string ruler for hexl mode." |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
997 (let* ((highlight (mod (hexl-current-address) 16)) |
54437
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
998 (s " 87654321 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789abcdef") |
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
999 (pos 0)) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1000 (set-text-properties 0 (length s) nil s) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1001 ;; Turn spaces in the header into stretch specs so they work |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1002 ;; regardless of the header-line face. |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1003 (while (string-match "[ \t]+" s pos) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1004 (setq pos (match-end 0)) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1005 (put-text-property (match-beginning 0) pos 'display |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1006 ;; Assume fixed-size chars |
54437
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
1007 `(space :align-to ,(1- pos)) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1008 s)) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1009 ;; Highlight the current column. |
54437
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
1010 (put-text-property (+ 11 (/ (* 5 highlight) 2)) |
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
1011 (+ 13 (/ (* 5 highlight) 2)) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1012 'face 'highlight s) |
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1013 ;; Highlight the current ascii column |
54437
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
1014 (put-text-property (+ 13 39 highlight) (+ 13 40 highlight) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1015 'face 'highlight s) |
54437
8c1cdd137199
(hexl-mode-ruler): Adapt to new :align-to semantics.
Kim F. Storm <storm@cua.dk>
parents:
54399
diff
changeset
|
1016 s)) |
54399
ad02f6299e9a
2004-03-15 Masatake YAMATO <jet@gyve.org>
Masatake YAMATO <jet@gyve.org>
parents:
54319
diff
changeset
|
1017 |
36 | 1018 ;; startup stuff. |
1019 | |
1020 (if hexl-mode-map | |
1021 nil | |
39384
bdd2e9a9bb71
(hexl-mode-map): Fix the change of 2001-08-23: use
Eli Zaretskii <eliz@gnu.org>
parents:
38959
diff
changeset
|
1022 (setq hexl-mode-map (make-keymap)) |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1023 ;; Make all self-inserting keys go through hexl-self-insert-command, |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1024 ;; because we need to convert them to unibyte characters before |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1025 ;; inserting them into the buffer. |
49199
8552e8fce5c8
(hexl-mode-map): Don't quote remapped command names.
Kim F. Storm <storm@cua.dk>
parents:
49170
diff
changeset
|
1026 (define-key hexl-mode-map [remap self-insert-command] 'hexl-self-insert-command) |
36 | 1027 |
49567
8f5cfbb41433
(hexl-mode-map): Bind C-m to `hexl-self-insert-command'.
John Paul Wallington <jpw@pobox.com>
parents:
49199
diff
changeset
|
1028 (define-key hexl-mode-map "\C-m" 'hexl-self-insert-command) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1029 (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
|
1030 (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
|
1031 (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
|
1032 (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
|
1033 (define-key hexl-mode-map [M-left] 'hexl-backward-short) |
63301
5a2af2a8e232
Add binding of `ESC functionkey' for every `M-functionkey'.
Andreas Schwab <schwab@suse.de>
parents:
62730
diff
changeset
|
1034 (define-key hexl-mode-map [?\e left] 'hexl-backward-short) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1035 (define-key hexl-mode-map [M-right] 'hexl-forward-short) |
63301
5a2af2a8e232
Add binding of `ESC functionkey' for every `M-functionkey'.
Andreas Schwab <schwab@suse.de>
parents:
62730
diff
changeset
|
1036 (define-key hexl-mode-map [?\e right] 'hexl-forward-short) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1037 (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
|
1038 (define-key hexl-mode-map [prior] 'hexl-scroll-down) |
37168
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
1039 (define-key hexl-mode-map [home] 'hexl-beginning-of-line) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
1040 (define-key hexl-mode-map [end] 'hexl-end-of-line) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
1041 (define-key hexl-mode-map [C-home] 'hexl-beginning-of-buffer) |
000c8e6eff3d
(hexl-scroll-up): If scrolling gets outside the hexl
Eli Zaretskii <eliz@gnu.org>
parents:
32385
diff
changeset
|
1042 (define-key hexl-mode-map [C-end] 'hexl-end-of-buffer) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1043 (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
|
1044 (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
|
1045 (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
|
1046 (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
|
1047 (define-key hexl-mode-map "\177" 'undefined) |
36 | 1048 |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1049 (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
|
1050 (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
|
1051 (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
|
1052 (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
|
1053 (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
|
1054 |
64337
a8184636c021
(hexl-mode-map): Recognize also `ehelp-command' as a valid binding for
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1055 (if (not (memq (key-binding (char-to-string help-char)) |
a8184636c021
(hexl-mode-map): Recognize also `ehelp-command' as a valid binding for
Juanma Barranquero <lekktu@gmail.com>
parents:
64091
diff
changeset
|
1056 '(help-command ehelp-command))) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1057 (define-key hexl-mode-map (char-to-string help-char) 'undefined)) |
36 | 1058 |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1059 (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
|
1060 (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
|
1061 (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
|
1062 (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
|
1063 (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
|
1064 (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
|
1065 (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
|
1066 (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
|
1067 (define-key hexl-mode-map "\C-y" 'undefined) |
36 | 1068 |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1069 (fset 'hexl-ESC-prefix (copy-keymap 'ESC-prefix)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1070 (define-key hexl-mode-map "\e" 'hexl-ESC-prefix) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1071 (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
|
1072 (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
|
1073 (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
|
1074 (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
|
1075 (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
|
1076 (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
|
1077 (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
|
1078 (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
|
1079 (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
|
1080 (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
|
1081 (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
|
1082 (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
|
1083 (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
|
1084 (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
|
1085 (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
|
1086 (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
|
1087 (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
|
1088 (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
|
1089 (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
|
1090 (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
|
1091 (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
|
1092 (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
|
1093 (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
|
1094 (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
|
1095 (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
|
1096 (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
|
1097 (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
|
1098 (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
|
1099 (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
|
1100 (define-key hexl-mode-map "\e>" 'hexl-end-of-buffer) |
36 | 1101 |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1102 (fset 'hexl-C-c-prefix (copy-keymap mode-specific-map)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1103 (define-key hexl-mode-map "\C-c" 'hexl-C-c-prefix) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1104 (define-key hexl-mode-map "\C-c\C-c" 'hexl-mode-exit) |
36 | 1105 |
38917
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1106 (fset 'hexl-C-x-prefix (copy-keymap 'Control-X-prefix)) |
7f8686d21c31
(hexl-insert-multibyte-char) New function.
Eli Zaretskii <eliz@gnu.org>
parents:
38853
diff
changeset
|
1107 (define-key hexl-mode-map "\C-x" 'hexl-C-x-prefix) |
15339
b774b50ca14a
(hexl-mode-map): Bind prior, home, deletechar, deleteline,
Richard M. Stallman <rms@gnu.org>
parents:
14930
diff
changeset
|
1108 (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
|
1109 (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
|
1110 (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
|
1111 (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
|
1112 (define-key hexl-mode-map "\C-x\C-t" 'undefined)) |
36 | 1113 |
79165
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1114 (easy-menu-define hexl-menu hexl-mode-map "Hexl Mode menu" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1115 `("Hexl" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1116 :help "Hexl-specific Features" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1117 |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1118 ["Backward short" hexl-backward-short |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1119 :help "Move to left a short"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1120 ["Forward short" hexl-forward-short |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1121 :help "Move to right a short"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1122 ["Backward word" hexl-backward-short |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1123 :help "Move to left a word"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1124 ["Forward word" hexl-forward-short |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1125 :help "Move to right a word"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1126 "-" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1127 ["Beginning of 512b page" hexl-beginning-of-512b-page |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1128 :help "Go to beginning of 512 byte boundary"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1129 ["End of 512b page" hexl-end-of-512b-page |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1130 :help "Go to end of 512 byte boundary"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1131 ["Beginning of 1K page" hexl-beginning-of-1k-page |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1132 :help "Go to beginning of 1KB boundary"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1133 ["End of 1K page" hexl-end-of-1k-page |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1134 :help "Go to end of 1KB boundary"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1135 "-" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1136 ["Go to address" hexl-goto-address |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1137 :help "Go to hexl-mode (decimal) address"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1138 ["Go to address" hexl-goto-hex-address |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1139 :help "Go to hexl-mode (hex string) address"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1140 "-" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1141 ["Insert decimal char" hexl-insert-decimal-char |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1142 :help "Insert a character given by its decimal code"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1143 ["Insert hex char" hexl-insert-hex-char |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1144 :help "Insert a character given by its hexadecimal code"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1145 ["Insert octal char" hexl-insert-octal-char |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1146 :help "Insert a character given by its octal code"] |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1147 "-" |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1148 ["Exit hexl mode" hexl-mode-exit |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1149 :help "Exit hexl mode returning to previous mode"])) |
4e282ea90733
* hexl.el (hexl-menu): New major mode menu.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
78236
diff
changeset
|
1150 |
17710 | 1151 (provide 'hexl) |
1152 | |
69934
b43946bd0c38
(hexl-isearch-search-function): Fix regexp-building code to
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
68651
diff
changeset
|
1153 ;; arch-tag: d5a7aa8a-9bce-480b-bcff-6c4c7ca5ea4a |
660
08eb386dd0f3
*** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents:
209
diff
changeset
|
1154 ;;; hexl.el ends here |