bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#22453: [PATCH] Support for switching to hexl-mode from image mode


From: Alexander Kuleshov
Subject: bug#22453: [PATCH] Support for switching to hexl-mode from image mode
Date: Wed, 17 Feb 2016 13:19:24 +0600

>From bc003ed7409a9b4c3bfb1444904c223775f3d18e Mon Sep 17 00:00:00 2001
From: Alexander Kuleshov <address@hidden>
Date: Sat, 23 Jan 2016 21:13:37 +0600
Subject: [PATCH] Support for switching to hexl-mode from image mode

* lisp/image-mode.el: adapted comments at the top of file;
* lisp/image-mode.el: added new menu item to the Image menu:
'Show as hex';
* lisp/image-mode.el: added description of the new keybinding
to the image-mode help;
* lisp/image-mode.el: all help messages in minibuffer adapted
to new keybinding;
* lisp/image-mode.el: image-toggle-help display function added
which checks current mode and switch into text or image mode
depends on it;
* doc/emacs/files.texi: added description of C-c C-x keybinding.

Patch tested on top of emacs-25 branch on fedora 23 with all
Linux related configured options.
---
 doc/emacs/files.texi |  3 ++
 lisp/image-mode.el   | 98 ++++++++++++++++++++++++++++++++++++----------------
 2 files changed, 72 insertions(+), 29 deletions(-)

diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi
index ab20d4a..bbb6070 100644
--- a/doc/emacs/files.texi
+++ b/doc/emacs/files.texi
@@ -1969,6 +1969,9 @@ File Conveniences
 major mode, you can type @kbd{C-c C-c} (@code{image-toggle-display})
 to toggle between displaying the file as an image in the Emacs buffer,
 and displaying its underlying text (or raw byte) representation.
+Additionally you can type @kbd{C-c C-x} (@code{image-toggle-hex-display})
+to toggle between displaying the file as an image in the Emacs buffer,
+and displaying it in hex representation.
 Displaying the file as an image works only if Emacs is compiled with
 support for displaying such images.  If the displayed image is wider
 or taller than the frame, the usual point motion keys (@kbd{C-f},
diff --git a/lisp/image-mode.el b/lisp/image-mode.el
index e549b49..a3cc3db 100644
--- a/lisp/image-mode.el
+++ b/lisp/image-mode.el
@@ -24,8 +24,8 @@
 ;;; Commentary:

 ;; Defines a major mode for visiting image files
-;; that allows conversion between viewing the text of the file
-;; and viewing the file as an image.  Viewing the image
+;; that allows conversion between viewing the text of the file,
+;; hex of the file and viewing the file as an image.  Viewing the image
 ;; works by putting a `display' text-property on the
 ;; image data, with the image-data still present underneath; if the
 ;; resulting buffer file is saved to another name it will correctly save
@@ -374,6 +374,7 @@ image-mode-map
   (let ((map (make-sparse-keymap)))
     (set-keymap-parent map special-mode-map)
     (define-key map "\C-c\C-c" 'image-toggle-display)
+    (define-key map "\C-c\C-x" 'image-toggle-hex-display)
     (define-key map (kbd "SPC")       'image-scroll-up)
     (define-key map (kbd "S-SPC")     'image-scroll-down)
     (define-key map (kbd "DEL")       'image-scroll-down)
@@ -406,6 +407,8 @@ image-mode-map
       '("Image"
     ["Show as Text" image-toggle-display :active t
      :help "Show image as text"]
+    ["Show as Hex" image-toggle-hex-display :active t
+     :help "Show image as hex"]
     "--"
     ["Fit to Window Height" image-transform-fit-to-height
      :visible (eq image-type 'imagemagick)
@@ -480,6 +483,7 @@ image-mode-map
 (defvar image-minor-mode-map
   (let ((map (make-sparse-keymap)))
     (define-key map "\C-c\C-c" 'image-toggle-display)
+    (define-key map "\C-c\C-x" 'image-toggle-hex-display)
     map)
   "Mode keymap for `image-minor-mode'.")

@@ -490,8 +494,8 @@ bookmark-make-record-function
 ;;;###autoload
 (defun image-mode ()
   "Major mode for image files.
-You can use \\<image-mode-map>\\[image-toggle-display]
-to toggle between display as an image and display as text.
+You can use \\<image-mode-map>\\[image-toggle-display] or
\\<image-mode-map>\\[image-toggle-hex-display]
+to toggle between display as an image and display as text or hex.

 Key bindings:
 \\{image-mode-map}"
@@ -530,7 +534,7 @@ image-mode
     (run-mode-hooks 'image-mode-hook)
     (let ((image (image-get-display-property))
           (msg1 (substitute-command-keys
-             "Type \\[image-toggle-display] to view the image as "))
+             "Type \\[image-toggle-display] or
\\[image-toggle-hex-display] to view the image as "))
           animated)
       (cond
        ((null image)
@@ -559,7 +563,7 @@ image-mode
 ;;;                 (substitute-command-keys
 ;;;                  "\\[image-toggle-animation] to animate."))))
        (t
-        (message "%s" (concat msg1 "text."))))))
+        (message "%s" (concat msg1 "text or hex."))))))

     (error
      (image-mode-as-text)
@@ -585,19 +589,10 @@ image-minor-mode
       (add-hook 'change-major-mode-hook (lambda () (image-minor-mode
-1)) nil t)))

 ;;;###autoload
-(defun image-mode-as-text ()
+(defun image-mode-to-text ()
   "Set a non-image mode as major mode in combination with image minor mode.
-A non-image major mode found from `auto-mode-alist' or Fundamental mode
-displays an image file as text.  `image-minor-mode' provides the key
-\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
-to display an image file as the actual image.
-
-You can use `image-mode-as-text' in `auto-mode-alist' when you want
-to display an image file as text initially.
-
-See commands `image-mode' and `image-minor-mode' for more information
-on these modes."
-  (interactive)
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as text."
   ;; image-mode-as-text = normal-mode + image-minor-mode
   (let ((previous-image-type image-type)) ; preserve `image-type'
     (if image-mode-previous-major-mode
@@ -625,12 +620,49 @@ image-mode-as-text
     ;; Enable image minor mode with `C-c C-c'.
     (image-minor-mode 1)
     ;; Show the image file as text.
-    (image-toggle-display-text)
-    (message "%s" (concat
-           (substitute-command-keys
-            "Type \\[image-toggle-display] to view the image as ")
-           (if (image-get-display-property)
-               "text" "an image") "."))))
+    (image-toggle-display-text)))
+
+(defun image-mode-as-hex ()
+  "Set a non-image mode as major mode in combination with image minor mode.
+A non-mage major mode found from `auto-mode-alist' or fundamental mode
+displays an image file as hex.  `image-minor-mode' provides the key
+\\<image-mode-map>\\[image-toggle-hex-display] to switch back to `image-mode'
+to display an image file as the actual image.
+
+You can use `image-mode-as-hex' in `auto-mode-alist' when you want to
+to display an image file as hex initially.
+
+See commands `image-mode' and `image-minor-mode' for more information
+on these modes."
+  (interactive)
+  (image-mode-to-text)
+  ;; Turn on hexl-mode
+  (hexl-mode)
+  (message "%s" (concat
+                 (substitute-command-keys
+                  "Type \\[image-toggle-hex-display] or
\\[image-toggle-display] to view the image as ")
+                 (if (image-get-display-property)
+                     "hex" "an image or text") ".")))
+
+(defun image-mode-as-text ()
+  "Set a non-image mode as major mode in combination with image minor mode.
+A non-image major mode found from `auto-mode-alist' or Fundamental mode
+displays an image file as text.  `image-minor-mode' provides the key
+\\<image-mode-map>\\[image-toggle-display] to switch back to `image-mode'
+to display an image file as the actual image.
+
+You can use `image-mode-as-text' in `auto-mode-alist' when you want
+to display an image file as text initially.
+
+See commands `image-mode' and `image-minor-mode' for more information
+on these modes."
+  (interactive)
+  (image-mode-to-text)
+  (message "%s" (concat
+                 (substitute-command-keys
+                  "Type \\[image-toggle-display] or
\\[image-toggle-hex-display] to view the image as ")
+                 (if (image-get-display-property)
+                     "text" "an image or hex") ".")))

 (define-obsolete-function-alias 'image-mode-maybe 'image-mode "23.2")

@@ -725,15 +757,23 @@ image-toggle-display-image
     (if (called-interactively-p 'any)
     (message "Repeat this command to go back to displaying the file
as text"))))

+(defun image-toggle-hex-display ()
+  "Toggle between image and hex display."
+  (interactive)
+  (if (image-get-display-property)
+      (image-mode-as-hex)
+    (if (eq major-mode 'fundamental-mode)
+        (image-mode-as-hex)
+      (image-mode))))
+
 (defun image-toggle-display ()
-  "Toggle between image and text display.
-If the current buffer is displaying an image file as an image,
-call `image-mode-as-text' to switch to text.  Otherwise, display
-the image by calling `image-mode'."
+  "Toggle between image and text display."
   (interactive)
   (if (image-get-display-property)
       (image-mode-as-text)
-    (image-mode)))
+    (if (eq major-mode 'hexl-mode)
+        (image-mode-as-text)
+      (image-mode))))

 (defun image-kill-buffer ()
   "Kill the current buffer."
-- 
2.7.0.364.g4943984





reply via email to

[Prev in Thread] Current Thread [Next in Thread]