;;; hexl-xtra.el --- highlight corresponding ASCII character in hexl buffers. ;; Copyright (C) 1998 Stephen Eglen ;; Author: Stephen Eglen ;; Created: Wed 14 Jan 1998 ;; This program 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. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; 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., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; As you move around in a hexl buffer, the ASCII character ;; corresponding to the current element is highlighted. ;; Installation ;;(add-hook 'hexl-mode-hook 'hexl-follow-ascii) ;;(autoload 'hexl-follow-ascii "hexl-xtra.el" ;; "Toggle following ASCII in Hexl buffers." t) ;;; Code: (defvar hexl-ascii-overlay nil "Overlay used to highlight ASCII element corresponding to current point.") (make-variable-buffer-local 'hexl-ascii-overlay) (defun hexl-follow-ascii (&optional arg) "Toggle following ASCII in Hexl buffers. With prefix ARG, turn on following if and only if ARG is positive. When following is enabled, the ASCII character corresponding to the element under the point is highlighted. To enable following in all hexl buffers, use the following: (add-hook 'hexl-mode-hook 'hexl-follow-ascii)" (interactive "P") (let ((on-p (if arg (> (prefix-numeric-value arg) 0) (not hexl-ascii-overlay)))) (make-local-hook 'post-command-hook) (if on-p ;; turn it on (if (not hexl-ascii-overlay) (progn (setq hexl-ascii-overlay (make-overlay 1 1)) (overlay-put hexl-ascii-overlay 'face 'highlight) (add-hook 'post-command-hook 'hexl-follow-ascii-find nil t))) ;; turn it off (if hexl-ascii-overlay (progn (delete-overlay hexl-ascii-overlay) (setq hexl-ascii-overlay nil) (remove-hook 'post-command-hook 'hexl-follow-ascii-find t) ))))) (defun hexl-follow-ascii-find () "Find and highlight the ASCII element corresponding to current point." (let ((pos (+ 51 (- (point) (current-column)) (mod (hexl-current-address) 16)))) (move-overlay hexl-ascii-overlay pos (1+ pos)) )) ;;; hexl-xtra.el ends here