18383
|
1 ;;; misc.el --- some nonstandard basic editing commands for Emacs
|
659
|
2
|
74442
|
3 ;; Copyright (C) 1989, 2001, 2002, 2003, 2004, 2005,
|
79721
|
4 ;; 2006, 2007, 2008 Free Software Foundation, Inc.
|
845
|
5
|
807
|
6 ;; Maintainer: FSF
|
45078
|
7 ;; Keywords: convenience
|
35
|
8
|
|
9 ;; This file is part of GNU Emacs.
|
|
10
|
94678
|
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
|
35
|
12 ;; it under the terms of the GNU General Public License as published by
|
94678
|
13 ;; the Free Software Foundation, either version 3 of the License, or
|
|
14 ;; (at your option) any later version.
|
35
|
15
|
|
16 ;; GNU Emacs is distributed in the hope that it will be useful,
|
|
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
19 ;; GNU General Public License for more details.
|
|
20
|
|
21 ;; You should have received a copy of the GNU General Public License
|
94678
|
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
35
|
23
|
38412
|
24 ;;; Commentary:
|
|
25
|
807
|
26 ;;; Code:
|
35
|
27
|
|
28 (defun copy-from-above-command (&optional arg)
|
|
29 "Copy characters from previous nonblank line, starting just above point.
|
|
30 Copy ARG characters, but not past the end of that line.
|
|
31 If no argument given, copy the entire rest of the line.
|
|
32 The characters copied are inserted in the buffer before point."
|
|
33 (interactive "P")
|
|
34 (let ((cc (current-column))
|
|
35 n
|
|
36 (string ""))
|
|
37 (save-excursion
|
|
38 (beginning-of-line)
|
|
39 (backward-char 1)
|
|
40 (skip-chars-backward "\ \t\n")
|
|
41 (move-to-column cc)
|
|
42 ;; Default is enough to copy the whole rest of the line.
|
|
43 (setq n (if arg (prefix-numeric-value arg) (point-max)))
|
|
44 ;; If current column winds up in middle of a tab,
|
|
45 ;; copy appropriate number of "virtual" space chars.
|
|
46 (if (< cc (current-column))
|
|
47 (if (= (preceding-char) ?\t)
|
|
48 (progn
|
74237
|
49 (setq string (make-string (min n (- (current-column) cc)) ?\s))
|
35
|
50 (setq n (- n (min n (- (current-column) cc)))))
|
|
51 ;; In middle of ctl char => copy that whole char.
|
|
52 (backward-char 1)))
|
|
53 (setq string (concat string
|
|
54 (buffer-substring
|
|
55 (point)
|
|
56 (min (save-excursion (end-of-line) (point))
|
|
57 (+ n (point)))))))
|
|
58 (insert string)))
|
659
|
59
|
52600
|
60 ;; Variation of `zap-to-char'.
|
|
61
|
|
62 (defun zap-up-to-char (arg char)
|
74260
|
63 "Kill up to, but not including ARGth occurrence of CHAR.
|
52600
|
64 Case is ignored if `case-fold-search' is non-nil in the current buffer.
|
|
65 Goes backward if ARG is negative; error if CHAR not found.
|
|
66 Ignores CHAR at point."
|
|
67 (interactive "p\ncZap up to char: ")
|
|
68 (let ((direction (if (>= arg 0) 1 -1)))
|
|
69 (kill-region (point)
|
|
70 (progn
|
|
71 (forward-char direction)
|
|
72 (unwind-protect
|
|
73 (search-forward (char-to-string char) nil nil arg)
|
|
74 (backward-char direction))
|
|
75 (point)))))
|
|
76
|
51340
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
77 ;; These were added with an eye to making possible a more CCA-compatible
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
78 ;; command set; but that turned out not to be interesting.
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
79
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
80 (defun mark-beginning-of-buffer ()
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
81 "Set mark at the beginning of the buffer."
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
82 (interactive)
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
83 (push-mark (point-min)))
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
84
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
85 (defun mark-end-of-buffer ()
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
86 "Set mark at the end of the buffer."
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
87 (interactive)
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
88 (push-mark (point-max)))
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
89
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
90 (defun upcase-char (arg)
|
52600
|
91 "Uppercasify ARG chars starting from point. Point doesn't move."
|
51340
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
92 (interactive "p")
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
93 (save-excursion
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
94 (upcase-region (point) (progn (forward-char arg) (point)))))
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
95
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
96 (defun forward-to-word (arg)
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
97 "Move forward until encountering the beginning of a word.
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
98 With argument, do this that many times."
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
99 (interactive "p")
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
100 (or (re-search-forward (if (> arg 0) "\\W\\b" "\\b\\W") nil t arg)
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
101 (goto-char (if (> arg 0) (point-max) (point-min)))))
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
102
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
103 (defun backward-to-word (arg)
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
104 "Move backward until encountering the end of a word.
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
105 With argument, do this that many times."
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
106 (interactive "p")
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
107 (forward-to-word (- arg)))
|
bd66b46adcc8
(mark-beginning-of-buffer, mark-end-of-buffer, upcase-char, forward-to-word,
Juanma Barranquero <lekktu@gmail.com>
diff
changeset
|
108
|
18383
|
109 (provide 'misc)
|
|
110
|
93975
|
111 ;; arch-tag: 908f7884-c19e-4388-920c-9cfa425e449b
|
659
|
112 ;;; misc.el ends here
|