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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38412
253f761ad37b Some fixes to follow coding conventions in files maintained by FSF.
Pavel Janík <Pavel@Janik.cz>
parents: 37722
diff changeset
1 ;;; hexl.el --- edit a file in a hex dump format using the hexl filter
807
4f28bd14272c *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 670
diff changeset
2
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
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 105372
diff changeset
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
9cde7d7fea1f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 5066
diff changeset
7 ;; Maintainer: FSF
9cde7d7fea1f Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 5066
diff changeset
8 ;; Keywords: data
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
57b39ddab58f (hexl-options): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41573
diff changeset
31 ;; do M-x `describe-mode'.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
32 ;;
43592
57b39ddab58f (hexl-options): Doc fix.
Pavel Janík <Pavel@Janik.cz>
parents: 41573
diff changeset
33 ;; NOTE: Remember to change `hexl-program' or `hexl-options' if needed.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
34 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
35 ;; Currently hexl only supports big endian hex output with 16 bit
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
36 ;; grouping.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
37 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
40 ;; changing them to dots.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
47 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
48 ;; vars here
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
49 ;;
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
8463158ec42e Doc fixes.
Richard M. Stallman <rms@gnu.org>
parents: 3137
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
21908db1e98b (hexl-address-region):
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
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
21908db1e98b (hexl-address-region):
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
97 (defvar hexl-max-address 0
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
98 "Maximum offset into hexl buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
99
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
100 (defvar hexl-mode-map nil)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
101
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
21908db1e98b (hexl-address-region):
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
131 (1 'hexl-address-region t t)
21908db1e98b (hexl-address-region):
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135 ;; routines
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
145
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
146 This function automatically converts a buffer into the hexl format
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
147 using the function `hexlify-buffer'.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
148
208
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
149 Each line in the buffer has an \"address\" (displayed in hexadecimal)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
150 representing the offset into the file that the characters on this line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
151 are at and 16 characters from the file (displayed as hexadecimal
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
152 values grouped every 16 bits) and as their ASCII values.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
153
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
154 If any of the characters (displayed as ASCII characters) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
155 unprintable (control or meta characters) they will be replaced as
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
156 periods.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
157
208
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
158 If `hexl-mode' is invoked with an argument the buffer is assumed to be
0fa7fc093c4e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
159 in hexl format.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
160
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
161 A sample format:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
162
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
163 HEX ADDR: 0001 0203 0405 0607 0809 0a0b 0c0d 0e0f ASCII-TEXT
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
164 -------- ---- ---- ---- ---- ---- ---- ---- ---- ----------------
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
165 00000000: 5468 6973 2069 7320 6865 786c 2d6d 6f64 This is hexl-mod
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
166 00000010: 652e 2020 4561 6368 206c 696e 6520 7265 e. Each line re
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
167 00000020: 7072 6573 656e 7473 2031 3620 6279 7465 presents 16 byte
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
168 00000030: 7320 6173 2068 6578 6164 6563 696d 616c s as hexadecimal
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
169 00000040: 2041 5343 4949 0a61 6e64 2070 7269 6e74 ASCII.and print
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
170 00000050: 6162 6c65 2041 5343 4949 2063 6861 7261 able ASCII chara
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 00000060: 6374 6572 732e 2020 416e 7920 636f 6e74 cters. Any cont
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 00000090: 6469 7370 6c61 7965 6420 6173 2070 6572 displayed as per
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
177 000000c0: 7265 6769 6f6e 2e0a region..
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 cursor movement bindings are the same (ie. Use \\[hexl-backward-char], \\[hexl-forward-char], \\[hexl-next-line], and \\[hexl-previous-line]
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 to move the cursor left, right, down, and up).
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
183 Advanced cursor movement commands (ala \\[hexl-beginning-of-line], \\[hexl-end-of-line], \\[hexl-beginning-of-buffer], and \\[hexl-end-of-buffer]) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184 also supported.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 There are several ways to change text in hexl mode:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
188 ASCII characters (character between space (0x20) and tilde (0x7E)) are
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 bound to self-insert so you can simply type the character and it will
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
190 insert itself (actually overstrike) into the buffer.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
192 \\[hexl-quoted-insert] followed by another keystroke allows you to insert the key even if
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
193 it isn't bound to self-insert. An octal number can be supplied in place
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
194 of another key to insert the octal number's ASCII representation.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
195
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
196 \\[hexl-insert-hex-char] will insert a given hexadecimal value (if it is between 0 and 0xFF)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
197 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
198
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
199 \\[hexl-insert-octal-char] will insert a given octal value (if it is between 0 and 0377)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
200 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
201
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
202 \\[hexl-insert-decimal-char] will insert a given decimal value (if it is between 0 and 255)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
203 into the buffer at the current point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
204
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
205 \\[hexl-mode-exit] will exit hexl-mode.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
211
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
212 \\[describe-bindings] for advanced commands."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
244 (make-local-variable 'hexl-mode-old-local-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
245 (setq hexl-mode-old-local-map (current-local-map))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
246 (use-local-map hexl-mode-map)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
247
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
248 (make-local-variable 'hexl-mode-old-mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
249 (setq hexl-mode-old-mode-name mode-name)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
250 (setq mode-name "Hexl")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257 (make-local-variable 'hexl-mode-old-major-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258 (setq hexl-mode-old-major-mode major-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
259 (setq major-mode 'hexl-mode)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
332 (defun hexl-save-buffer ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
333 "Save a hexl format buffer as binary in visited file if modified."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
359
670
bff41708644e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 660
diff changeset
360 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
361 (defun hexl-find-file (filename)
71685
ba847dbc80a5 (hexl-find-file): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 70668
diff changeset
362 "Edit file FILENAME as a binary file in hex dump format.
ba847dbc80a5 (hexl-find-file): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 70668
diff changeset
363 Switch to a buffer visiting file FILENAME, creating one if none exists,
ba847dbc80a5 (hexl-find-file): Doc fix.
Eli Zaretskii <eliz@gnu.org>
parents: 70668
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
372 (if (not (eq major-mode 'hexl-mode))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
373 (hexl-mode)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
374
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
377 With arg, don't unhexlify buffer."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
378 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
379 (if (or (eq arg 1) (not arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
382 (original-point (1+ (hexl-current-address))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
438 "Return current hexl-address."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
453 hexl-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
465
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
469 (interactive "nAddress: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
472 (goto-char (hexl-address-to-marker address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
473
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
474 (defun hexl-goto-hex-address (hex-address)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
475 "Go to hexl-mode address (hex string) HEX-ADDRESS.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
476 Signal error if HEX-ADDRESS is out of range."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
477 (interactive "sHex Address: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
478 (hexl-goto-address (hexl-hex-string-to-integer hex-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
479
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
480 (defun hexl-hex-string-to-integer (hex-string)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
481 "Return decimal integer for HEX-STRING."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
482 (interactive "sHex number: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
483 (let ((hex-num 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
484 (while (not (equal hex-string ""))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
485 (setq hex-num (+ (* hex-num 16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
486 (hexl-hex-char-to-integer (string-to-char hex-string))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
487 (setq hex-string (substring hex-string 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
488 hex-num))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
489
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
490 (defun hexl-octal-string-to-integer (octal-string)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
491 "Return decimal integer for OCTAL-STRING."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
492 (interactive "sOctal number: ")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
493 (let ((oct-num 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
494 (while (not (equal octal-string ""))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
495 (setq oct-num (+ (* oct-num 8)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
496 (hexl-oct-char-to-integer
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
497 (string-to-char octal-string))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
498 (setq octal-string (substring octal-string 1)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
499 oct-num))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
500
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
501 ;; move point functions
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
502
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
503 (defun hexl-backward-char (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
504 "Move to left ARG bytes (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
505 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
506 (hexl-goto-address (- (hexl-current-address) arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
507
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
510 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
511 (hexl-goto-address (+ (hexl-current-address) arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
512
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
513 (defun hexl-backward-short (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
514 "Move to left ARG shorts (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
515 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
516 (hexl-goto-address (let ((address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
517 (if (< arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
518 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
519 (setq arg (- arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
520 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
521 (if (not (equal address (logior address 3)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
522 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
523 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
524 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
525 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
526 (setq address (logior address 3)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
527 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
528 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
529 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
530 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
531 (setq address (+ address 4))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
532 (setq arg (1- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
533 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
534 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
535 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
536 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
537 (setq address (logior address 3))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
538 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
539 (if (not (equal address (logand address -4)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
540 (setq address (logand address -4))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
541 (if (not (equal address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
542 (setq address (- address 4))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
543 (message "Beginning of buffer.")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
544 (setq arg (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
545 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
546
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
549 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
550 (hexl-backward-short (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
551
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
552 (defun hexl-backward-word (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
553 "Move to left ARG words (right if ARG negative) in hexl-mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
554 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
555 (hexl-goto-address (let ((address (hexl-current-address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
556 (if (< arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
557 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
558 (setq arg (- arg))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
559 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
560 (if (not (equal address (logior address 7)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
561 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
562 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
563 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
564 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
565 (setq address (logior address 7)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
566 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
567 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
568 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
569 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
570 (setq address (+ address 8))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
571 (setq arg (1- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
572 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
573 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
574 (message "End of buffer.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
575 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
576 (setq address (logior address 7))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
577 (while (> arg 0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
578 (if (not (equal address (logand address -8)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
579 (setq address (logand address -8))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
580 (if (not (equal address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
581 (setq address (- address 8))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
582 (message "Beginning of buffer.")))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
583 (setq arg (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
584 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
585
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
588 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
589 (hexl-backward-word (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
590
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
591 (defun hexl-previous-line (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
594 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
595 (hexl-next-line (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
596
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
597 (defun hexl-next-line (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
598 "Move vertically down ARG lines [16 bytes] (up if ARG negative) in hexl-mode.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
599 If there is no byte at the target address move to the last byte in that line."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
600 (interactive "p")
923
9f3cc03dae67 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 918
diff changeset
601 (hexl-goto-address (let ((address (+ (hexl-current-address) (* arg 16))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
602 (if (and (< arg 0) (< address 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
603 (progn (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
604 (setq address
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
605 (% (hexl-current-address) 16)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
606 (if (and (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
607 (< (% hexl-max-address 16) (% address 16)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
608 (setq address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
609 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
610 (progn (message "Out of hexl region.")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
611 (setq
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
612 address
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
613 (+ (logand hexl-max-address -16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
614 (% (hexl-current-address) 16)))))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
615 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
616
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
617 (defun hexl-beginning-of-buffer (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
618 "Move to the beginning of the hexl buffer.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
619 Leaves `hexl-mark' at previous position.
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
620 With prefix arg N, puts point N bytes of the way from the true beginning."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
621 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
622 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
623 (hexl-goto-address (+ 0 (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
624
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
625 (defun hexl-end-of-buffer (arg)
209
f501afd0a375 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 208
diff changeset
626 "Go to `hexl-max-address' minus ARG."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
627 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
628 (push-mark (point))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
629 (hexl-goto-address (- hexl-max-address (1- arg))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
630
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
631 (defun hexl-beginning-of-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
632 "Goto beginning of line in hexl mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
633 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
634 (goto-char (+ (* (/ (point) 68) 68) 11)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
635
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
636 (defun hexl-end-of-line ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
637 "Goto end of line in hexl mode."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
638 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
639 (hexl-goto-address (let ((address (logior (hexl-current-address) 15)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
640 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
641 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
642 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
643
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
644 (defun hexl-scroll-down (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
645 "Scroll hexl buffer window upward ARG lines; or near full window if no ARG."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
646 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
647 (if (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
648 (setq arg (1- (window-height)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
649 (setq arg (prefix-numeric-value arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
650 (hexl-scroll-up (- arg)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
651
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
655 (interactive "P")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
656 (if (null arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
657 (setq arg (1- (window-height)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
677
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
680 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
681 (hexl-goto-address (logand (hexl-current-address) -1024)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
682
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
685 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
686 (hexl-goto-address (let ((address (logior (hexl-current-address) 1023)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
687 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
688 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
689 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
690
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
693 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
694 (hexl-goto-address (logand (hexl-current-address) -512)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
695
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
698 (interactive)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
699 (hexl-goto-address (let ((address (logior (hexl-current-address) 511)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
700 (if (> address hexl-max-address)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
701 (setq address hexl-max-address))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
702 address)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
703
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
704 (defun hexl-quoted-insert (arg)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
711
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
712 ;00000000: 0011 2233 4455 6677 8899 aabb ccdd eeff 0123456789ABCDEF
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
713
5066
8abe8fb9621c (hexlify-buffer): Add autoload cookie.
Richard M. Stallman <rms@gnu.org>
parents: 4966
diff changeset
714 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
739
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
740 (defun 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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
754
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
755 (defun hexl-char-after-point ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
759
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
760 (defun hexl-htoi (lh rh)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
761 "Hex (char) LH (char) RH to integer."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
762 (+ (* (hexl-hex-char-to-integer lh) 16)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
763 (hexl-hex-char-to-integer rh)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
764
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
765 (defun hexl-hex-char-to-integer (character)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
766 "Take a char and return its value as if it was a hex digit."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
767 (if (and (>= character ?0) (<= character ?9))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
768 (- character ?0)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
769 (let ((ch (logior character 32)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
770 (if (and (>= ch ?a) (<= ch ?f))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
771 (- ch (- ?a 10))
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
772 (error "Invalid hex digit `%c'" ch)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
773
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
774 (defun hexl-oct-char-to-integer (character)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
775 "Take a char and return its value as if it was a octal digit."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
776 (if (and (>= character ?0) (<= character ?7))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
777 (- character ?0)
17710
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
778 (error "Invalid octal digit `%c'" character)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
779
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
780 (defun hexl-printable-character (ch)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
784 46
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
787 46
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
788 ch))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
840
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
873 (setq num (1- num)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
874
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
875 ;; hex conversion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
876
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
879 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
917
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
920 (interactive "p")
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
21908db1e98b (hexl-address-region):
Masatake YAMATO <jet@gyve.org>
parents: 64762
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1018 ;; startup stuff.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1019
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
1020 (if hexl-mode-map
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
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
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
1151 (provide 'hexl)
13df6938d925 Add a `provide' call.
Richard M. Stallman <rms@gnu.org>
parents: 17656
diff changeset
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