]> git.eshelyaron.com Git - emacs.git/commitdiff
Print "decrypted" rot13 text is buffer is read-only
authorPhilip Kaludercic <philipk@posteo.net>
Fri, 28 Oct 2022 17:44:47 +0000 (19:44 +0200)
committerPhilip Kaludercic <philipk@posteo.net>
Fri, 4 Nov 2022 23:07:07 +0000 (00:07 +0100)
* lisp/rot13.el (rot13-region): Add fallback if buffer is read-only
* doc/emacs/rmail.texi (Rmail Rot13): Document new behaviour.

doc/emacs/rmail.texi
lisp/rot13.el

index e38bde036adc9d0ed4c4be047f4619bd55062f11..7414cdb07999f78ed00c752864782b91f4dddd5f 100644 (file)
@@ -1409,6 +1409,14 @@ might use rot13 to hide important plot points.
 rot13-other-window}.  This displays the current buffer in another window
 which applies the code when displaying the text.
 
+@findex rot13-region
+  If you are only interested in a region, the command @kbd{M-x
+rot13-region} might be preferable.  This will encrypt/decrypt the
+active region in-place.  If the buffer is read-only, it will attempt
+to display the plain text in the echo area.  If the text is too long
+for the echo area, the command will pop up a temporary buffer with the
+encrypted/decrypted text.
+
 @node Movemail
 @section @command{movemail} program
 @cindex @command{movemail} program
index c063725de85304e337817c4a40b055412b78f3f0..5d1c46e4830befb81fa02f6d6dffacd24827e18a 100644 (file)
@@ -85,9 +85,16 @@ and END, and return the encrypted string."
 
 ;;;###autoload
 (defun rot13-region (start end)
-  "ROT13 encrypt the region between START and END in current buffer."
+  "ROT13 encrypt the region between START and END in current buffer.
+If invoked interactively and the buffer is read-only, a message
+will be printed instead."
   (interactive "r")
-  (translate-region start end rot13-translate-table))
+  (condition-case nil
+      (translate-region start end rot13-translate-table)
+    (buffer-read-only
+     (when (called-interactively-p 'interactive)
+       (let ((dec (rot13-string (buffer-substring start end))))
+         (message "Buffer is read-only:\n%s" (string-trim dec)))))))
 
 ;;;###autoload
 (defun rot13-other-window ()