|
|
1.1 ! root 1: ;; Scramble text amusingly for Emacs. ! 2: ;; Copyright (C) 1985 Richard M. Stallman. ! 3: ! 4: ;; This file is part of GNU Emacs. ! 5: ! 6: ;; GNU Emacs is distributed in the hope that it will be useful, ! 7: ;; but WITHOUT ANY WARRANTY. No author or distributor ! 8: ;; accepts responsibility to anyone for the consequences of using it ! 9: ;; or for whether it serves any particular purpose or works at all, ! 10: ;; unless he says so in writing. Refer to the GNU Emacs General Public ! 11: ;; License for full details. ! 12: ! 13: ;; Everyone is granted permission to copy, modify and redistribute ! 14: ;; GNU Emacs, but only under the conditions described in the ! 15: ;; GNU Emacs General Public License. A copy of this license is ! 16: ;; supposed to have been given to you along with GNU Emacs so you ! 17: ;; can know your rights and responsibilities. It should be in a ! 18: ;; file named COPYING. Among other things, the copyright notice ! 19: ;; and this notice must be preserved on all copies. ! 20: ! 21: ! 22: (defun dissociated-press (&optional arg) ! 23: "Dissociate the text of the current buffer. ! 24: Output goes in buffer named *Dissociation*, ! 25: which is redisplayed each time text is added to it. ! 26: Every so often the user must say whether to continue. ! 27: If ARG is positive, require ARG chars of continuity. ! 28: If ARG is negative, require -ARG words of continuity. ! 29: Default is 2." ! 30: (interactive "P") ! 31: (setq arg (if arg (prefix-numeric-value arg) 2)) ! 32: (let* ((inbuf (current-buffer)) ! 33: (outbuf (get-buffer-create "*Dissociation*")) ! 34: (move-function (if (> arg 0) 'forward-char 'forward-word)) ! 35: (move-amount (if (> arg 0) arg (- arg))) ! 36: (search-function (if (> arg 0) 'search-forward 'word-search-forward)) ! 37: (last-query-point 0)) ! 38: (switch-to-buffer outbuf) ! 39: (erase-buffer) ! 40: (while ! 41: (save-excursion ! 42: (goto-char last-query-point) ! 43: (vertical-motion (- (window-height) 4)) ! 44: (or (= (point) (point-max)) ! 45: (and (progn (goto-char (point-max)) ! 46: (y-or-n-p "Continue dissociation? ")) ! 47: (progn ! 48: (message "") ! 49: (recenter 1) ! 50: (setq last-query-point (point-max)) ! 51: t)))) ! 52: (let (start end) ! 53: (save-excursion ! 54: (set-buffer inbuf) ! 55: (setq start (point)) ! 56: (if (eq move-function 'forward-char) ! 57: (progn ! 58: (setq end (+ start (+ move-amount (logand 15 (random))))) ! 59: (if (> end (point-max)) ! 60: (setq end (+ 1 move-amount (logand 15 (random))))) ! 61: (goto-char end)) ! 62: (funcall move-function ! 63: (+ move-amount (logand 15 (random))))) ! 64: (setq end (point))) ! 65: (let ((opoint (point))) ! 66: (insert-buffer-substring inbuf start end) ! 67: (save-excursion ! 68: (goto-char opoint) ! 69: (end-of-line) ! 70: (and (> (current-column) fill-column) ! 71: (do-auto-fill))))) ! 72: (save-excursion ! 73: (set-buffer inbuf) ! 74: (if (eobp) ! 75: (goto-char (point-min)) ! 76: (let ((overlap ! 77: (buffer-substring (prog1 (point) ! 78: (funcall move-function ! 79: (- move-amount))) ! 80: (point)))) ! 81: (let (ranval) ! 82: (while (< (setq ranval (random)) 0)) ! 83: (goto-char (1+ (% ranval (1- (point-max)))))) ! 84: (or (funcall search-function overlap nil t) ! 85: (let ((opoint (point))) ! 86: (goto-char 1) ! 87: (funcall search-function overlap opoint t)))))) ! 88: (sit-for 0))))
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.