Created
January 26, 2015 02:34
-
-
Save bitops/85346cd0adc79e0b9909 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| ;;; randomize-region.el --- randomize line order in a region | |
| ;; Copyright (C) 2005 Joe Corneli <[EMAIL PROTECTED]> | |
| ;; Copyright (C) 1986, 1987, 1993, 1994, 1995, 2003 Free Software Foundation, | |
| Inc. | |
| ;; Time-stamp: <jac -- Tue Apr 26 15:30:27 CDT 2005> | |
| ;; This file is not part of GNU Emacs, but it is distributed under | |
| ;; the same terms as GNU Emacs. | |
| ;; GNU Emacs is free software; you can redistribute it and/or modify | |
| ;; it under the terms of the GNU General Public License as published | |
| ;; by the Free Software Foundation; either version 2, or (at your | |
| ;; option) any later version. | |
| ;; GNU Emacs is distributed in the hope that it will be useful, | |
| ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| ;; GNU General Public License for more details. | |
| ;; You should have received a copy of the GNU General Public License | |
| ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
| ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
| ;; Boston, MA 02111-1307, USA. | |
| ;;; Commentary: | |
| ;; Uses copied & modified versions of `shuffle-vector' | |
| ;; from cookie1.el and `reverse-region' from sort.el | |
| ;;; Code: | |
| (defun randomize-region (beg end) | |
| (interactive "r") | |
| (if (> beg end) | |
| (let (mid) (setq mid end end beg beg mid))) | |
| (save-excursion | |
| ;; put beg at the start of a line and end and the end of one -- | |
| ;; the largest possible region which fits this criteria | |
| (goto-char beg) | |
| (or (bolp) (forward-line 1)) | |
| (setq beg (point)) | |
| (goto-char end) | |
| ;; the test for bolp is for those times when end is on an empty | |
| ;; line; it is probably not the case that the line should be | |
| ;; included in the reversal; it isn't difficult to add it | |
| ;; afterward. | |
| (or (and (eolp) (not (bolp))) | |
| (progn (forward-line -1) (end-of-line))) | |
| (setq end (point-marker)) | |
| (let ((strs (shuffle-list | |
| (split-string (buffer-substring-no-properties beg end) | |
| "\n")))) | |
| (delete-region beg end) | |
| (dolist (str strs) | |
| (insert (concat str "\n")))))) | |
| (defun shuffle-list (list) | |
| "Randomly permute the elements of LIST. | |
| All permutations equally likely." | |
| (let ((i 0) | |
| j | |
| temp | |
| (len (length list))) | |
| (while (< i len) | |
| (setq j (+ i (random (- len i)))) | |
| (setq temp (nth i list)) | |
| (setcar (nthcdr i list) (nth j list)) | |
| (setcar (nthcdr j list) temp) | |
| (setq i (1+ i)))) | |
| list) | |
| ;;; randomize-region.el |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment