home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / emacs-19.28-src.tgz / tar.out / fsf / emacs / lisp / rot13.el < prev    next >
Lisp/Scheme  |  1996-09-28  |  2KB  |  67 lines

  1. ;;; rot13.el --- display a buffer in rot13.
  2.  
  3. ;; Copyright (C) 1988 Free Software Foundation, Inc.
  4.  
  5. ;; Author: Howard Gayle:
  6. ;; Maintainer: FSF
  7.  
  8. ;; This file is part of GNU Emacs.
  9.  
  10. ;; GNU Emacs is free software; you can redistribute it and/or modify
  11. ;; it under the terms of the GNU General Public License as published by
  12. ;; the Free Software Foundation; either version 2, or (at your option)
  13. ;; any later version.
  14.  
  15. ;; GNU Emacs is distributed in the hope that it will be useful,
  16. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18. ;; GNU General Public License for more details.
  19.  
  20. ;; You should have received a copy of the GNU General Public License
  21. ;; along with GNU Emacs; see the file COPYING.  If not, write to
  22. ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23.  
  24. ;;; Commentary:
  25.  
  26. ;; The single entry point, `rot13-other-window', performs a Caesar cipher
  27. ;; encrypt/decrypt on the current buffer and displays the result in another 
  28. ;; window.  Rot13 encryption is sometimes used on USENET as a read-at-your-
  29. ;; own-risk wrapper for material some might consider offensive, such as
  30. ;; ethnic humor.
  31. ;;
  32. ;; Written by Howard Gayle.
  33. ;; This hack is mainly to show off the char table stuff.
  34.  
  35. ;;; Code:
  36.  
  37. (defvar rot13-display-table
  38.   (let ((table (make-display-table))
  39.     (i 0))
  40.     (while (< i 26)
  41.       (aset table (+ i ?a) (vector (+ (% (+ i 13) 26) ?a)))
  42.       (aset table (+ i ?A) (vector (+ (% (+ i 13) 26) ?A)))
  43.       (setq i (1+ i)))
  44.     table)
  45.   "Char table for rot 13 display.")
  46.  
  47. ;;;###autoload
  48. (defun rot13-other-window ()
  49.   "Display current buffer in rot 13 in another window.
  50. To terminate the rot13 display, delete that window."
  51.   (interactive)
  52.   (let ((w (display-buffer (current-buffer) t)))
  53.     (set-window-display-table w rot13-display-table)))
  54.  
  55. ;;;###autoload
  56. (defun toggle-rot13-mode ()
  57.   "Toggle the use of rot 13 encoding for the current window."
  58.   (interactive)
  59.   (if (eq (window-display-table (selected-window)) rot13-display-table)
  60.       (set-window-display-table (selected-window) nil)
  61.     (if (null (window-display-table (selected-window)))
  62.     (set-window-display-table (selected-window) rot13-display-table))))
  63.  
  64. (provide 'rot13)
  65.  
  66. ;;; rot13.el ends here
  67.