Minor idlwave change.
[bpt/emacs.git] / lisp / misc.el
CommitLineData
896546cd 1;;; misc.el --- some nonstandard basic editing commands for Emacs
6594deb0 2
c90f2757 3;; Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005,
114f9c96 4;; 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
0d20f9a0 5
9750e079 6;; Maintainer: FSF
30764597 7;; Keywords: convenience
bd78fa1d 8;; Package: emacs
9750e079 9
0d20f9a0
JB
10;; This file is part of GNU Emacs.
11
eb3fa2cf 12;; GNU Emacs is free software: you can redistribute it and/or modify
0d20f9a0 13;; it under the terms of the GNU General Public License as published by
eb3fa2cf
GM
14;; the Free Software Foundation, either version 3 of the License, or
15;; (at your option) any later version.
0d20f9a0
JB
16
17;; GNU Emacs is distributed in the hope that it will be useful,
18;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20;; GNU General Public License for more details.
21
22;; You should have received a copy of the GNU General Public License
eb3fa2cf 23;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
0d20f9a0 24
55535639
PJ
25;;; Commentary:
26
e5167999 27;;; Code:
0d20f9a0
JB
28
29(defun copy-from-above-command (&optional arg)
30 "Copy characters from previous nonblank line, starting just above point.
31Copy ARG characters, but not past the end of that line.
32If no argument given, copy the entire rest of the line.
33The characters copied are inserted in the buffer before point."
34 (interactive "P")
35 (let ((cc (current-column))
36 n
37 (string ""))
38 (save-excursion
39 (beginning-of-line)
40 (backward-char 1)
41 (skip-chars-backward "\ \t\n")
42 (move-to-column cc)
43 ;; Default is enough to copy the whole rest of the line.
44 (setq n (if arg (prefix-numeric-value arg) (point-max)))
45 ;; If current column winds up in middle of a tab,
46 ;; copy appropriate number of "virtual" space chars.
47 (if (< cc (current-column))
48 (if (= (preceding-char) ?\t)
49 (progn
ff26cdfe 50 (setq string (make-string (min n (- (current-column) cc)) ?\s))
0d20f9a0
JB
51 (setq n (- n (min n (- (current-column) cc)))))
52 ;; In middle of ctl char => copy that whole char.
53 (backward-char 1)))
54 (setq string (concat string
55 (buffer-substring
56 (point)
57 (min (save-excursion (end-of-line) (point))
58 (+ n (point)))))))
59 (insert string)))
6594deb0 60
2fd8a18a
LK
61;; Variation of `zap-to-char'.
62
63(defun zap-up-to-char (arg char)
821a311f 64 "Kill up to, but not including ARGth occurrence of CHAR.
2fd8a18a
LK
65Case is ignored if `case-fold-search' is non-nil in the current buffer.
66Goes backward if ARG is negative; error if CHAR not found.
67Ignores CHAR at point."
68 (interactive "p\ncZap up to char: ")
69 (let ((direction (if (>= arg 0) 1 -1)))
70 (kill-region (point)
71 (progn
72 (forward-char direction)
73 (unwind-protect
74 (search-forward (char-to-string char) nil nil arg)
75 (backward-char direction))
76 (point)))))
77
9bccd1e3
JB
78;; These were added with an eye to making possible a more CCA-compatible
79;; command set; but that turned out not to be interesting.
80
81(defun mark-beginning-of-buffer ()
82 "Set mark at the beginning of the buffer."
83 (interactive)
84 (push-mark (point-min)))
85
86(defun mark-end-of-buffer ()
87 "Set mark at the end of the buffer."
88 (interactive)
89 (push-mark (point-max)))
90
91(defun upcase-char (arg)
2fd8a18a 92 "Uppercasify ARG chars starting from point. Point doesn't move."
9bccd1e3
JB
93 (interactive "p")
94 (save-excursion
95 (upcase-region (point) (progn (forward-char arg) (point)))))
96
97(defun forward-to-word (arg)
98 "Move forward until encountering the beginning of a word.
99With argument, do this that many times."
100 (interactive "p")
101 (or (re-search-forward (if (> arg 0) "\\W\\b" "\\b\\W") nil t arg)
102 (goto-char (if (> arg 0) (point-max) (point-min)))))
103
104(defun backward-to-word (arg)
105 "Move backward until encountering the end of a word.
106With argument, do this that many times."
107 (interactive "p")
108 (forward-to-word (- arg)))
109
e8d24e5b
JL
110;;;###autoload
111(defun butterfly ()
0f9568b7
JL
112 "Use butterflies to flip the desired bit on the drive platter.
113Open hands and let the delicate wings flap once. The disturbance
114ripples outward, changing the flow of the eddy currents in the
115upper atmosphere. These cause momentary pockets of higher-pressure
116air to form, which act as lenses that deflect incoming cosmic rays,
117focusing them to strike the drive platter and flip the desired bit.
118You can type `M-x butterfly C-M-c' to run it. This is a permuted
119variation of `C-x M-c M-butterfly' from url `http://xkcd.com/378/'."
e8d24e5b
JL
120 (interactive)
121 (if (yes-or-no-p "Do you really want to unleash the powers of the butterfly? ")
122 (progn
0f9568b7
JL
123 (switch-to-buffer (get-buffer-create "*butterfly*"))
124 (erase-buffer)
125 (sit-for 0)
0f9568b7
JL
126 (animate-string "Amazing physics going on..."
127 (/ (window-height) 2) (- (/ (window-width) 2) 12))
e8d24e5b
JL
128 (sit-for (* 5 (/ (abs (random)) (float most-positive-fixnum))))
129 (message "Successfully flipped one bit!"))
0f9568b7
JL
130 (message "Well, then go to xkcd.com!")
131 (browse-url "http://xkcd.com/378/")))
e8d24e5b 132
896546cd
RS
133(provide 'misc)
134
cbee283d 135;; arch-tag: 908f7884-c19e-4388-920c-9cfa425e449b
6594deb0 136;;; misc.el ends here