all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Alexander Kuleshov <kuleshovmail@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 22453@debbugs.gnu.org
Subject: bug#22453: [PATCH] Support for switching to hexl-mode from image mode
Date: Sat, 27 Feb 2016 21:15:44 +0600	[thread overview]
Message-ID: <CANCZXo6E8D-_UqcRHZXew9w9d+1ZFtZ7LQZXkzzv6+E5or3JdQ@mail.gmail.com> (raw)
In-Reply-To: <CANCZXo5gV3Af473K4KOiNw8+22W75BWfMUTe+z=KHg0jzHnDww@mail.gmail.com>

Add support for switching to hexl-mode from image mode

* doc/emacs/files.texi: Document image-toggle-hex-display

* lisp/image-mode.el (image-toggle-hex-display, image-mode-to-text):
New functions
---
 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 e2037b9..2d560d3 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
@@ -375,6 +375,7 @@ image-mode-map
     (set-keymap-parent map special-mode-map)
     (set-keymap-parent map image-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)
@@ -407,6 +408,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)
@@ -481,6 +484,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'.")

@@ -491,8 +495,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}"
@@ -531,7 +535,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)
@@ -560,7 +564,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)
@@ -586,19 +590,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
@@ -626,12 +621,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")

@@ -726,16 +758,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.2.335.g3476f70





  parent reply	other threads:[~2016-02-27 15:15 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-24  6:30 bug#22453: [PATCH] Support for switching to hexl-mode from image mode Alexander Kuleshov
2016-01-24 14:48 ` Eli Zaretskii
2016-01-24 14:59   ` Alexander Kuleshov
2016-01-24 16:07     ` Eli Zaretskii
2016-01-24 18:57       ` Alexander Kuleshov
2016-01-24 20:33         ` Eli Zaretskii
2016-02-17  7:19           ` Alexander Kuleshov
2016-02-20 12:30             ` Eli Zaretskii
2016-02-27 15:15             ` Alexander Kuleshov [this message]
2016-02-27 17:31               ` Eli Zaretskii

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CANCZXo6E8D-_UqcRHZXew9w9d+1ZFtZ7LQZXkzzv6+E5or3JdQ@mail.gmail.com \
    --to=kuleshovmail@gmail.com \
    --cc=22453@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.