X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/2536fb611876d5526fe40b9bee2a16e2836d4ff3..b2a15250f652d800838f66abc1f877f0cad0d323:/lisp/hexl.el diff --git a/lisp/hexl.el b/lisp/hexl.el index f63ed0aafa..7edf5ec10a 100644 --- a/lisp/hexl.el +++ b/lisp/hexl.el @@ -1,7 +1,7 @@ ;;; hexl.el --- edit a file in a hex dump format using the hexl filter ;; Copyright (C) 1989, 1994, 1998, 2001, 2002, 2003, 2004, -;; 2005, 2006, 2007 Free Software Foundation, Inc. +;; 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. ;; Author: Keith Gabryelski ;; Maintainer: FSF @@ -9,10 +9,10 @@ ;; This file is part of GNU Emacs. -;; GNU Emacs is free software; you can redistribute it and/or modify +;; GNU Emacs is free software: you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. ;; GNU Emacs is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -20,9 +20,7 @@ ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -;; Boston, MA 02110-1301, USA. +;; along with GNU Emacs. If not, see . ;;; Commentary: @@ -44,6 +42,7 @@ ;;; Code: (require 'eldoc) +(eval-when-compile (require 'cl)) ;; ;; vars here @@ -120,6 +119,7 @@ Quoting cannot be used, so the arguments cannot themselves contain spaces." (defvar hexl-mode-old-require-final-newline) (defvar hexl-mode-old-syntax-table) (defvar hexl-mode-old-font-lock-keywords) +(defvar hexl-mode-old-eldoc-documentation-function) (defvar hexl-ascii-overlay nil "Overlay used to highlight ASCII element corresponding to current point.") @@ -279,7 +279,6 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode. (make-local-variable 'hexl-mode-old-font-lock-keywords) (setq hexl-mode-old-font-lock-keywords font-lock-defaults) - (make-local-variable 'font-lock-defaults) (setq font-lock-defaults '(hexl-font-lock-keywords t)) ;; Add hooks to rehexlify or dehexlify on various events. @@ -289,6 +288,10 @@ You can use \\[hexl-find-file] to visit a file in Hexl mode. (add-hook 'change-major-mode-hook 'hexl-maybe-dehexlify-buffer nil t) ;; Set a callback function for eldoc. + (make-local-variable 'hexl-mode-old-eldoc-documentation-function) + (setq hexl-mode-old-eldoc-documentation-function + (bound-and-true-p eldoc-documentation-function)) + (set (make-local-variable 'eldoc-documentation-function) 'hexl-print-current-point-info) (eldoc-add-command-completions "hexl-") @@ -363,8 +366,8 @@ and edit the file in `hexl-mode'." (list (let ((completion-ignored-extensions nil)) (read-file-name "Filename: " nil nil 'ret-must-match)))) - ;; Ignore the user's setting of default-major-mode. - (let ((default-major-mode 'fundamental-mode)) + ;; Ignore the user's setting of default major-mode. + (letf (((default-value 'major-mode) 'fundamental-mode)) (find-file-literally filename)) (if (not (eq major-mode 'hexl-mode)) (hexl-mode))) @@ -406,6 +409,10 @@ With arg, don't unhexlify buffer." (when (boundp 'hexl-mode-old-hl-line-face) (setq hl-line-face hexl-mode-old-hl-line-face)) + (when (boundp 'hexl-mode-old-eldoc-documentation-function) + (setq eldoc-documentation-function + hexl-mode-old-eldoc-documentation-function)) + (setq require-final-newline hexl-mode-old-require-final-newline) (setq mode-name hexl-mode-old-mode-name) (setq isearch-search-fun-function hexl-mode-old-isearch-search-fun-function) @@ -441,7 +448,7 @@ Ask the user for confirmation." (if (>= current-column 41) (- current-column 41) (/ (- current-column (/ current-column 5)) 2)))) - (when (interactive-p) + (when (called-interactively-p 'interactive) (message "Current address is %d/0x%08x" hexl-address hexl-address)) hexl-address)) @@ -457,7 +464,7 @@ This function is intended to be used as eldoc callback." (+ (* (/ address 16) 68) 10 (point-min) (/ (* (% address 16) 5) 2))) (defun hexl-goto-address (address) - "Goto hexl-mode (decimal) address ADDRESS. + "Go to hexl-mode (decimal) address ADDRESS. Signal error if ADDRESS is out of range." (interactive "nAddress: ") (if (or (< address 0) (> address hexl-max-address)) @@ -772,11 +779,11 @@ This discards the buffer's undo information." (defun hexl-printable-character (ch) "Return a displayable string for character CH." - (format "%c" (if hexl-iso - (if (or (< ch 32) (and (>= ch 127) (< ch 160))) + (format "%c" (if (equal hexl-iso "") + (if (or (< ch 32) (>= ch 127)) 46 ch) - (if (or (< ch 32) (>= ch 127)) + (if (or (< ch 32) (and (>= ch 127) (< ch 160))) 46 ch)))) @@ -789,7 +796,7 @@ and their encoded form is inserted byte by byte." (coding (if (or (null buffer-file-coding-system) ;; coding-system-type equals t means undecided. (eq (coding-system-type buffer-file-coding-system) t)) - default-buffer-file-coding-system + (default-value 'buffer-file-coding-system) buffer-file-coding-system))) (cond ((and (> ch 0) (< ch 256)) (hexl-insert-char ch num)) @@ -829,7 +836,7 @@ Interactively, with a numeric argument, insert this character that many times. Non-ASCII characters are first encoded with `buffer-file-coding-system', and their encoded form is inserted byte by byte." (interactive "p") - (hexl-insert-multibyte-char last-command-char arg)) + (hexl-insert-multibyte-char last-command-event arg)) (defun hexl-insert-char (ch num) "Insert the character CH NUM times in a hexl buffer. @@ -1104,6 +1111,43 @@ This function is assumed to be used as callback function for `hl-line-mode'." (define-key hexl-mode-map "\C-x\C-s" 'hexl-save-buffer) (define-key hexl-mode-map "\C-x\C-t" 'undefined)) +(easy-menu-define hexl-menu hexl-mode-map "Hexl Mode menu" + `("Hexl" + :help "Hexl-specific Features" + + ["Backward short" hexl-backward-short + :help "Move to left a short"] + ["Forward short" hexl-forward-short + :help "Move to right a short"] + ["Backward word" hexl-backward-short + :help "Move to left a word"] + ["Forward word" hexl-forward-short + :help "Move to right a word"] + "-" + ["Beginning of 512b page" hexl-beginning-of-512b-page + :help "Go to beginning of 512 byte boundary"] + ["End of 512b page" hexl-end-of-512b-page + :help "Go to end of 512 byte boundary"] + ["Beginning of 1K page" hexl-beginning-of-1k-page + :help "Go to beginning of 1KB boundary"] + ["End of 1K page" hexl-end-of-1k-page + :help "Go to end of 1KB boundary"] + "-" + ["Go to address" hexl-goto-address + :help "Go to hexl-mode (decimal) address"] + ["Go to address" hexl-goto-hex-address + :help "Go to hexl-mode (hex string) address"] + "-" + ["Insert decimal char" hexl-insert-decimal-char + :help "Insert a character given by its decimal code"] + ["Insert hex char" hexl-insert-hex-char + :help "Insert a character given by its hexadecimal code"] + ["Insert octal char" hexl-insert-octal-char + :help "Insert a character given by its octal code"] + "-" + ["Exit hexl mode" hexl-mode-exit + :help "Exit hexl mode returning to previous mode"])) + (provide 'hexl) ;; arch-tag: d5a7aa8a-9bce-480b-bcff-6c4c7ca5ea4a