annotate lisp/simple.el @ 1785:19755499df90

* window.c (window_internal_width): New function, which accounts for scrollbars if present. * lisp.h (window_internal_height, window_internal_width): Add extern declarations for these. * dispnew.c (direct_output_for_insert, direct_output_forward_char, buffer_posn_from_coords): Use window_internal_width instead of writing out its definition. * indent.c (compute_motion): Doc fix; mention scrollbars and window_internal_width. (pos_tab_offset, Fvertical_motion): Use window_internal_width instead of writing it out. * window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left, Fscroll_right): Same. * xdisp.c (redisplay, try_window, try_window_id, display_text_line): Same. * xdisp.c (display_string): Add new variable `f', to be W's frame. Use it to set desired_glyphs, and to get the frame's width to decide whether or not to draw vertical bars. * xdisp.c (display_text_line): If we're using vertical scrollbars, don't draw the vertical bars separating side-by-side windows. (display_string): Same thing. Draw spaces to fill in the part of the mode line that is under the scrollbar in partial-width windows. * xdisp.c (display_text_line): Use the usable internal width of the window, as calculated above, as the limit on the length of the overlay arrow's image, rather than using the window's width field, less one. * xdisp.c (redisplay): Call condemn_scrollbars_hook and judge_scrollbars_hook whenever they are set, not just when the frame has vertical scrollbars. * termhooks.h (mouse_position_hook): Doc fix. (set_vertical_scrollbar_hook): This doesn't return anything any more, and doesn't take a struct scrollbar * argument any more. (condemn_scrollbars_hook, redeem_scrollbar_hook, judge_scrollbars_hook): Doc fixes. * term.c (mouse_position_hook): Doc fix. (set_vertical_scrollbar_hook): This doesn't return anything any more. Doc fixes. * keyboard.c (kbd_buffer_get_event): Receive the scrollbar's window from *mouse_position_hook and pass it to make_lispy_movement, instead of working with a pointer to a struct scrollbar. (make_lispy_event): We don't need a window_from_scrollbar function anymore; we are given the window directly in *EVENT. Unify the code which generates text-area mouse clicks and scrollbar clicks; use the same code to distinguish clicks from drags on the scrollbar as in the text area. Distinguish clicks from drags by storing a copy of the lispy position list returned as part of the event. (button_down_location): Make this a lisp vector, rather than an array of random structures. (struct mouse_position): Remove this; it's been replaced by a lisp list. (make_lispy_movement): Accept the scrollbar's window as a parameter, rather than the scrollbar itself. If FRAME is zero, assume that the other arguments are garbage. (syms_of_keyboard): No need to staticpro each window of button_down_location now; just initialize and staticpro it. * window.c (window_from_scrollbar): Function deleted; no longer needed. * xdisp.c (redisplay_window): Just pass the window to set_vertical_scrollbar hook; don't pass the scrollbar object too. * xterm.c (XTmouse_position): Don't return a pointer to the scrollbar for scrollbar motion; instead, return the scrollbar's window. * xdisp.c (echo_area_display): Move the assignment of f and the check for visibility out of the "#ifdef MULTI_FRAME" clause; they should work under any circumstances. * xdisp.c (redisplay_window): If we're not going to redisplay this window because it's a minibuffer whose contents have already been updated, go ahead and jump to the scrollbar refreshing code anyway; they still need to be updated. Initialize opoint, so it's known to be valid when we jump. Calculate the scrollbar settings properly for minibuffers, no matter what they are displaying at the time. * xdisp.c (redisplay_windows): Don't restore the current buffer and its point before refreshing the scrollbars; we need the buffer accurate.
author Jim Blandy <jimb@redhat.com>
date Thu, 14 Jan 1993 15:18:53 +0000
parents 3f0f18d4eb8c
children 3e4f8b1da4e9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1 ;;; simple.el --- basic editing commands for Emacs
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
2
1771
3f0f18d4eb8c * simple.el (set-goal-column): Make this command disabled by default.
Jim Blandy <jimb@redhat.com>
parents: 1760
diff changeset
3 ;; Copyright (C) 1985, 1986, 1987, 1992, 1993 Free Software Foundation, Inc.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 ;; This file is part of GNU Emacs.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 ;; GNU Emacs is free software; you can redistribute it and/or modify
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 ;; it under the terms of the GNU General Public License as published by
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
9 ;; the Free Software Foundation; either version 2, or (at your option)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 ;; any later version.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 ;; GNU Emacs is distributed in the hope that it will be useful,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 ;; GNU General Public License for more details.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 ;; You should have received a copy of the GNU General Public License
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 ;; along with GNU Emacs; see the file COPYING. If not, write to
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
21 ;;; Code:
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 (defun open-line (arg)
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
24 "Insert a newline and leave point before it.
1063
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
25 If there is a fill prefix, insert the fill prefix on the new line
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
26 if the line would have been empty.
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
27 With arg N, insert N newlines."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 (interactive "*p")
1063
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
29 (let* ((do-fill-prefix (and fill-prefix (bolp)))
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
30 (flag (and (null do-fill-prefix) (bolp) (not (bobp)))))
1321
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
31 ;; If this is a simple case, and we are at the beginning of a line,
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
32 ;; actually insert the newline *before* the preceding newline
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
33 ;; instead of after. That makes better display behavior.
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
34 (if flag
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
35 (progn
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
36 ;; If undo is enabled, don't let this hack be visible:
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
37 ;; record the real value of point as the place to move back to
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
38 ;; if we undo this insert.
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
39 (if (and buffer-undo-list (not (eq buffer-undo-list t)))
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
40 (setq buffer-undo-list (cons (point) buffer-undo-list)))
b56c2c450d49 (open-line): Shield undo from the hack to insert at pt-1.
Richard M. Stallman <rms@gnu.org>
parents: 1276
diff changeset
41 (forward-char -1)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 (while (> arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 (save-excursion
1063
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
44 (insert ?\n))
25b929c06f83 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1039
diff changeset
45 (if do-fill-prefix (insert fill-prefix))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 (setq arg (1- arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 (if flag (forward-char 1))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 (defun split-line ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 "Split current line, moving portion beyond point vertically down."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 (skip-chars-forward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 (let ((col (current-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 (pos (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 (insert ?\n)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56 (indent-to col 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 (goto-char pos)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 (defun quoted-insert (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 "Read next input character and insert it.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
61 This is useful for inserting control characters.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 You may also type up to 3 octal digits, to insert a character with that code"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 (interactive "*p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 (let ((char (read-quoted-char)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 (while (> arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 (insert char)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 (setq arg (1- arg)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 (defun delete-indentation (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 "Join this line to previous and fix up whitespace at join.
892
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
71 If there is a fill prefix, delete it from the beginning of this line.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 With argument, join this line to following line."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73 (interactive "*P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 (if arg (forward-line 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 (if (eq (preceding-char) ?\n)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 (delete-region (point) (1- (point)))
892
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
79 ;; If the second line started with the fill prefix,
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
80 ;; delete the prefix.
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
81 (if (and fill-prefix
1276
6b63876aea1c (kill-word): Don't change point before calling kill-region.
Richard M. Stallman <rms@gnu.org>
parents: 1145
diff changeset
82 (<= (+ (point) (length fill-prefix)) (point-max))
892
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
83 (string= fill-prefix
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
84 (buffer-substring (point)
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
85 (+ (point) (length fill-prefix)))))
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
86 (delete-region (point) (+ (point) (length fill-prefix))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 (fixup-whitespace))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 (defun fixup-whitespace ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 "Fixup white space between objects around point.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 Leave one space or none, according to the context."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 (delete-horizontal-space)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 (if (or (looking-at "^\\|\\s)")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 (save-excursion (forward-char -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 (looking-at "$\\|\\s(\\|\\s'")))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 (insert ?\ ))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 (defun delete-horizontal-space ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 "Delete all spaces and tabs around point."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 (delete-region (point) (progn (skip-chars-forward " \t") (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 (defun just-one-space ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 "Delete all spaces and tabs around point, leaving one space."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 (if (= (following-char) ? )
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 (forward-char 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 (insert ? ))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 (delete-region (point) (progn (skip-chars-forward " \t") (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 (defun delete-blank-lines ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 "On blank line, delete all surrounding blank lines, leaving just one.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118 On isolated blank line, delete that one.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 On nonblank line, delete all blank lines that follow it."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 (let (thisblank singleblank)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 (setq thisblank (looking-at "[ \t]*$"))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
125 ;; Set singleblank if there is just one blank line here.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 (setq singleblank
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 (and thisblank
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 (not (looking-at "[ \t]*\n[ \t]*$"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 (or (bobp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 (progn (forward-line -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 (not (looking-at "[ \t]*$")))))))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
132 ;; Delete preceding blank lines, and this one too if it's the only one.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 (if thisblank
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 (if singleblank (forward-line 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 (delete-region (point)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 (if (re-search-backward "[^ \t\n]" nil t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 (progn (forward-line 1) (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 (point-min)))))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
141 ;; Delete following blank lines, unless the current line is blank
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
142 ;; and there are no following blank lines.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 (if (not (and thisblank singleblank))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 (forward-line 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 (delete-region (point)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 (if (re-search-forward "[^ \t\n]" nil t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 (progn (beginning-of-line) (point))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
150 (point-max)))))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
151 ;; Handle the special case where point is followed by newline and eob.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
152 ;; Delete the line, leaving point at eob.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
153 (if (looking-at "^[ \t]*\n\\'")
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
154 (delete-region (point) (point-max)))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 (defun back-to-indentation ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 "Move point to the first non-whitespace character on this line."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 (beginning-of-line 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 (skip-chars-forward " \t"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 (defun newline-and-indent ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 "Insert a newline, then indent according to major mode.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
164 Indentation is done using the value of `indent-line-function'.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 In programming language modes, this is the same as TAB.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
166 In some text modes, where TAB inserts a tab, this command indents to the
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
167 column specified by the variable `left-margin'."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 582
diff changeset
170 (newline)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 (indent-according-to-mode))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 (defun reindent-then-newline-and-indent ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 "Reindent current line, insert newline, then indent the new line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175 Indentation of both lines is done according to the current major mode,
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
176 which means calling the current value of `indent-line-function'.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 In programming language modes, this is the same as TAB.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 In some text modes, where TAB inserts a tab, this indents to the
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
179 column specified by the variable `left-margin'."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 (delete-region (point) (progn (skip-chars-backward " \t") (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 (indent-according-to-mode))
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 582
diff changeset
184 (newline)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 (indent-according-to-mode))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 ;; Internal subroutine of delete-char
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 (defun kill-forward-chars (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 (if (listp arg) (setq arg (car arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 (if (eq arg '-) (setq arg -1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 (kill-region (point) (+ (point) arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 ;; Internal subroutine of backward-delete-char
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 (defun kill-backward-chars (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 (if (listp arg) (setq arg (car arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 (if (eq arg '-) (setq arg -1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 (kill-region (point) (- (point) arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 (defun backward-delete-char-untabify (arg &optional killp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 "Delete characters backward, changing tabs into spaces.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 Delete ARG chars, and kill (save in kill ring) if KILLP is non-nil.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 Interactively, ARG is the prefix arg (default 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 and KILLP is t if prefix arg is was specified."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 (interactive "*p\nP")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 (let ((count arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 (while (and (> count 0) (not (bobp)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 (if (= (preceding-char) ?\t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 (let ((col (current-column)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 (forward-char -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 (setq col (- col (current-column)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 (insert-char ?\ col)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 (delete-char 1)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 (forward-char -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 (setq count (1- count)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 (delete-backward-char arg killp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 ;; In overwrite mode, back over columns while clearing them out,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 ;; unless at end of line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 (and overwrite-mode (not (eolp))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 (save-excursion (insert-char ?\ arg))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 (defun zap-to-char (arg char)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 "Kill up to and including ARG'th occurrence of CHAR.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 Goes backward if ARG is negative; error if CHAR not found."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 (interactive "p\ncZap to char: ")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 (kill-region (point) (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 (search-forward (char-to-string char) nil nil arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 ; (goto-char (if (> arg 0) (1- (point)) (1+ (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 (defun beginning-of-buffer (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 "Move point to the beginning of the buffer; leave mark at previous position.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 With arg N, put point N/10 of the way from the true beginning.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
234
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
235 Don't use this command in Lisp programs!
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 \(goto-char (point-min)) is faster and avoids clobbering the mark."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 (push-mark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 (goto-char (if arg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 (if (> (buffer-size) 10000)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 ;; Avoid overflow for large buffer sizes!
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 (* (prefix-numeric-value arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 (/ (buffer-size) 10))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 (/ (+ 10 (* (buffer-size) (prefix-numeric-value arg))) 10))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 (point-min)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 (if arg (forward-line 1)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 (defun end-of-buffer (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 "Move point to the end of the buffer; leave mark at previous position.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 With arg N, put point N/10 of the way from the true end.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
251
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
252 Don't use this command in Lisp programs!
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 \(goto-char (point-max)) is faster and avoids clobbering the mark."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 (push-mark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 (goto-char (if arg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 (- (1+ (buffer-size))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 (if (> (buffer-size) 10000)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 ;; Avoid overflow for large buffer sizes!
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 (* (prefix-numeric-value arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 (/ (buffer-size) 10))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 (/ (* (buffer-size) (prefix-numeric-value arg)) 10)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 (point-max)))
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
264 ;; If we went to a place in the middle of the buffer,
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
265 ;; adjust it to the beginning of a line.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 (if arg (forward-line 1)
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
267 ;; If the end of the buffer is not already on the screen,
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
268 ;; then scroll specially to put it near, but not at, the bottom.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
269 (if (let ((old-point (point)))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
270 (save-excursion
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
271 (goto-char (window-start))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
272 (vertical-motion (window-height))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
273 (< (point) old-point)))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
274 (recenter -3))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 (defun mark-whole-buffer ()
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
277 "Put point at beginning and mark at end of buffer.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
278 You probably should not use this function in Lisp programs;
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
279 it is usually a mistake for a Lisp function to use any subroutine
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
280 that uses or sets the mark."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
281 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 (push-mark (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 (push-mark (point-max))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 (goto-char (point-min)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 (defun count-lines-region (start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 "Print number of lines and charcters in the region."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 (interactive "r")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 (message "Region has %d lines, %d characters"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 (count-lines start end) (- end start)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 (defun what-line ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 "Print the current line number (in the buffer) of point."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 (save-restriction
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 (widen)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 (message "Line %d"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 (1+ (count-lines 1 (point)))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 (defun count-lines (start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 "Return number of lines between START and END.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 This is usually the number of newlines between them,
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
305 but can be one more if START is not equal to END
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 and the greater of them is not at the start of a line."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 (save-restriction
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309 (narrow-to-region start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 (goto-char (point-min))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 (if (eq selective-display t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 (let ((done 0))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 (while (re-search-forward "[\n\C-m]" nil t 40)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 (setq done (+ 40 done)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 (while (re-search-forward "[\n\C-m]" nil t 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 (setq done (+ 1 done)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 done)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 (- (buffer-size) (forward-line (buffer-size)))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 (defun what-cursor-position ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 "Print info on cursor position (on screen and within buffer)."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 (let* ((char (following-char))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 (beg (point-min))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 (end (point-max))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 (pos (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 (total (buffer-size))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 (percent (if (> total 50000)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 ;; Avoid overflow from multiplying by 100!
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 (/ (+ (/ total 200) (1- pos)) (max (/ total 100) 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 (/ (+ (/ total 2) (* 100 (1- pos))) (max total 1))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 (hscroll (if (= (window-hscroll) 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 ""
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 (format " Hscroll=%d" (window-hscroll))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 (col (current-column)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 (if (= pos end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 (if (or (/= beg 1) (/= end (1+ total)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 (message "point=%d of %d(%d%%) <%d - %d> column %d %s"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 pos total percent beg end col hscroll)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 (message "point=%d of %d(%d%%) column %d %s"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 pos total percent col hscroll))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 (if (or (/= beg 1) (/= end (1+ total)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 (message "Char: %s (0%o) point=%d of %d(%d%%) <%d - %d> column %d %s"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 (single-key-description char) char pos total percent beg end col hscroll)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 (message "Char: %s (0%o) point=%d of %d(%d%%) column %d %s"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 (single-key-description char) char pos total percent col hscroll)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 (defun fundamental-mode ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 "Major mode not specialized for anything in particular.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 Other major modes are defined by comparison with this one."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 (kill-all-local-variables))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
354 (defvar read-expression-map (copy-keymap minibuffer-local-map)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
355 "Minibuffer keymap used for reading Lisp expressions.")
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
356 (define-key read-expression-map "\M-\t" 'lisp-complete-symbol)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
357
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358 (put 'eval-expression 'disabled t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 ;; We define this, rather than making eval interactive,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 ;; for the sake of completion of names like eval-region, eval-current-buffer.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 (defun eval-expression (expression)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 "Evaluate EXPRESSION and print value in minibuffer.
954
9e51bb887797 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 921
diff changeset
364 Value is also consed on to front of the variable `values'."
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
365 (interactive (list (read-from-minibuffer "Eval: "
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
366 nil read-expression-map t)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 (setq values (cons (eval expression) values))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 (prin1 (car values) t))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370 (defun edit-and-eval-command (prompt command)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 "Prompting with PROMPT, let user edit COMMAND and eval result.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 COMMAND is a Lisp expression. Let user edit that expression in
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 the minibuffer, then read and evaluate the result."
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
374 (let ((command (read-from-minibuffer prompt
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
375 (prin1-to-string command)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
376 read-expression-map t)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 ;; Add edited command to command history, unless redundant.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 (or (equal command (car command-history))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 (setq command-history (cons command command-history)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 (eval command)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
382 (defun repeat-complex-command (arg)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
383 "Edit and re-evaluate last complex command, or ARGth from last.
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
384 A complex command is one which used the minibuffer.
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
385 The command is placed in the minibuffer as a Lisp form for editing.
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
386 The result is executed, repeating the command as changed.
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
387 If the command has been changed or is not the most recent previous command
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
388 it is added to the front of the command history.
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
389 You can use the minibuffer history commands \\<minibuffer-local-map>\\[next-history-element] and \\[previous-history-element]
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
390 to get different commands to edit and resubmit."
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
391 (interactive "p")
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
392 (let ((elt (nth (1- arg) command-history))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
393 (minibuffer-history-position arg)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
394 (minibuffer-history-sexp-flag t)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
395 newcmd)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
396 (if elt
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
397 (progn
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
398 (setq newcmd (read-from-minibuffer "Redo: "
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
399 (prin1-to-string elt)
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
400 read-expression-map
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
401 t
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
402 (cons 'command-history
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
403 arg)))
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
404 ;; If command was added to command-history as a string,
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
405 ;; get rid of that. We want only evallable expressions there.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
406 (if (stringp (car command-history))
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
407 (setq command-history (cdr command-history)))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
408 ;; If command to be redone does not match front of history,
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
409 ;; add it to the history.
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
410 (or (equal newcmd (car command-history))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
411 (setq command-history (cons newcmd command-history)))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
412 (eval newcmd))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
413 (ding))))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
414
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
415 (defvar minibuffer-history nil
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
416 "Default minibuffer history list.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
417 This is used for all minibuffer input
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
418 except when an alternate history list is specified.")
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
419 (defvar minibuffer-history-sexp-flag nil
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
420 "Nonzero when doing history operations on `command-history'.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
421 More generally, indicates that the history list being acted on
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
422 contains expressions rather than strings.")
862
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
423 (setq minibuffer-history-variable 'minibuffer-history)
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
424 (setq minibuffer-history-position nil)
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
425 (defvar minibuffer-history-search-history nil)
858
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
426
921
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
427 (mapcar
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
428 (function (lambda (key-and-command)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
429 (mapcar
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
430 (function (lambda (keymap)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
431 (define-key (symbol-value keymap)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
432 (car key-and-command)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
433 (cdr key-and-command))))
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
434 '(minibuffer-local-map
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
435 minibuffer-local-ns-map
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
436 minibuffer-local-completion-map
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
437 minibuffer-local-must-match-map
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
438 read-expression-map))))
921
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
439 '(("\en" . next-history-element) ([next] . next-history-element)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
440 ("\ep" . previous-history-element) ([prior] . previous-history-element)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
441 ("\er" . previous-matching-history-element)
c5c4c2ee8f26 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 892
diff changeset
442 ("\es" . next-matching-history-element)))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
443
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
444 (defun previous-matching-history-element (regexp n)
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
445 "Find the previous history element that matches REGEXP.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
446 \(Previous history elements refer to earlier actions.)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
447 With prefix argument N, search for Nth previous match.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
448 If N is negative, find the next or Nth next match."
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
449 (interactive
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
450 (let ((enable-recursive-minibuffers t)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
451 (minibuffer-history-sexp-flag nil))
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
452 (list (read-from-minibuffer "Previous element matching (regexp): "
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
453 nil
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
454 minibuffer-local-map
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
455 nil
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
456 'minibuffer-history-search-history)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
457 (prefix-numeric-value current-prefix-arg))))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
458 (let ((history (symbol-value minibuffer-history-variable))
892
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
459 prevpos
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
460 (pos minibuffer-history-position))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
461 (while (/= n 0)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
462 (setq prevpos pos)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
463 (setq pos (min (max 1 (+ pos (if (< n 0) -1 1))) (length history)))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
464 (if (= pos prevpos)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
465 (error (if (= pos 1)
892
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
466 "No later matching history item"
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
467 "No earlier matching history item")))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
468 (if (string-match regexp
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
469 (if minibuffer-history-sexp-flag
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
470 (prin1-to-string (nth (1- pos) history))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
471 (nth (1- pos) history)))
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
472 (setq n (+ n (if (< n 0) 1 -1)))))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
473 (setq minibuffer-history-position pos)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
474 (erase-buffer)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
475 (let ((elt (nth (1- pos) history)))
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
476 (insert (if minibuffer-history-sexp-flag
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
477 (prin1-to-string elt)
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
478 elt)))
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
479 (goto-char (point-min)))
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
480 (if (or (eq (car (car command-history)) 'previous-matching-history-element)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
481 (eq (car (car command-history)) 'next-matching-history-element))
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
482 (setq command-history (cdr command-history))))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
483
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
484 (defun next-matching-history-element (regexp n)
1135
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
485 "Find the next history element that matches REGEXP.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
486 \(The next history element refers to a more recent action.)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
487 With prefix argument N, search for Nth next match.
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
488 If N is negative, find the previous or Nth previous match."
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
489 (interactive
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
490 (let ((enable-recursive-minibuffers t)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
491 (minibuffer-history-sexp-flag nil))
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
492 (list (read-from-minibuffer "Next element matching (regexp): "
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
493 nil
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
494 minibuffer-local-map
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
495 nil
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
496 'minibuffer-history-search-history)
e33f6475229a *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 1063
diff changeset
497 (prefix-numeric-value current-prefix-arg))))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
498 (previous-matching-history-element regexp (- n)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499
858
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
500 (defun next-history-element (n)
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
501 "Insert the next element of the minibuffer history into the minibuffer."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 (interactive "p")
858
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
503 (let ((narg (min (max 1 (- minibuffer-history-position n))
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
504 (length (symbol-value minibuffer-history-variable)))))
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
505 (if (= minibuffer-history-position narg)
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
506 (error (if (= minibuffer-history-position 1)
892
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
507 "End of history; no next item"
3a9943a4a440 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 874
diff changeset
508 "Beginning of history; no preceding item"))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 (erase-buffer)
858
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
510 (setq minibuffer-history-position narg)
862
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
511 (let ((elt (nth (1- minibuffer-history-position)
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
512 (symbol-value minibuffer-history-variable))))
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
513 (insert
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
514 (if minibuffer-history-sexp-flag
46630543d659 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 859
diff changeset
515 (prin1-to-string elt)
864
fe5f6b7c9727 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 862
diff changeset
516 elt)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 (goto-char (point-min)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518
858
b11800dc877d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 846
diff changeset
519 (defun previous-history-element (n)
1145
e6cefcaba564 entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 1135
diff changeset
520 "Inserts the previous element of the minibuffer history into the minibuffer."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 (interactive "p")
859
5f325fbc093d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 858
diff changeset
522 (next-history-element (- n)))
874
b945f592b94d *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 870
diff changeset
523
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 (defun goto-line (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 "Goto line ARG, counting from line 1 at beginning of buffer."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 (interactive "NGoto line: ")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 (save-restriction
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 (widen)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 (goto-char 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 (if (eq selective-display t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 (re-search-forward "[\n\C-m]" nil 'end (1- arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 (forward-line (1- arg)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 ;Put this on C-x u, so we can force that rather than C-_ into startup msg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 (fset 'advertised-undo 'undo)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 (defun undo (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 "Undo some previous changes.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539 Repeat this command to undo more changes.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 A numeric argument serves as a repeat count."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 (interactive "*p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 (let ((modified (buffer-modified-p)))
582
a9c4bc19b2aa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 513
diff changeset
543 (or (eq (selected-window) (minibuffer-window))
a9c4bc19b2aa *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 513
diff changeset
544 (message "Undo!"))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 (or (eq last-command 'undo)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 (progn (undo-start)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 (undo-more 1)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 (setq this-command 'undo)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 (undo-more (or arg 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 (and modified (not (buffer-modified-p))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 (delete-auto-save-file-if-necessary))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 (defun undo-start ()
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
554 "Set `pending-undo-list' to the front of the undo list.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
555 The next call to `undo-more' will undo the most recently made change."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 (if (eq buffer-undo-list t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 (error "No undo information in this buffer"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 (setq pending-undo-list buffer-undo-list))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 (defun undo-more (count)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 "Undo back N undo-boundaries beyond what was already undone recently.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
562 Call `undo-start' to get ready to undo recent changes,
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
563 then call `undo-more' one or more times to undo them."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 (or pending-undo-list
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 (error "No further undo information"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 (setq pending-undo-list (primitive-undo count pending-undo-list)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 (defvar last-shell-command "")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 (defvar last-shell-command-on-region "")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 (defun shell-command (command &optional flag)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 "Execute string COMMAND in inferior shell; display output, if any.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 If COMMAND ends in ampersand, execute it asynchronously.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 Optional second arg non-nil (prefix arg, if interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 means insert output in current buffer after point (leave mark after it).
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 This cannot be done asynchronously."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 (interactive (list (read-string "Shell command: " last-shell-command)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 current-prefix-arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 (if flag
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 (progn (barf-if-buffer-read-only)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 (push-mark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 ;; We do not use -f for csh; we will not support broken use of
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 ;; .cshrcs. Even the BSD csh manual says to use
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 ;; "if ($?prompt) exit" before things which are not useful
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 ;; non-interactively. Besides, if someone wants their other
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 ;; aliases for shell commands then they can still have them.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 (call-process shell-file-name nil t nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 "-c" command)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 (exchange-point-and-mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 ;; Preserve the match data in case called from a program.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 (let ((data (match-data)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 (unwind-protect
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 (if (string-match "[ \t]*&[ \t]*$" command)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 ;; Command ending with ampersand means asynchronous.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 (let ((buffer (get-buffer-create "*shell-command*"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 (directory default-directory)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 proc)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 ;; Remove the ampersand.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 (setq command (substring command 0 (match-beginning 0)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 ;; If will kill a process, query first.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 (setq proc (get-buffer-process buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 (if proc
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 (if (yes-or-no-p "A command is running. Kill it? ")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 (kill-process proc)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 (error "Shell command in progress")))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 (set-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 (erase-buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 (display-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 (setq default-directory directory)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 (setq proc (start-process "Shell" buffer
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 shell-file-name "-c" command))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 (setq mode-line-process '(": %s"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 (set-process-sentinel proc 'shell-command-sentinel)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 (set-process-filter proc 'shell-command-filter)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 ))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 (shell-command-on-region (point) (point) command nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 (store-match-data data)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 ;; We have a sentinel to prevent insertion of a termination message
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 ;; in the buffer itself.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 (defun shell-command-sentinel (process signal)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 (if (memq (process-status process) '(exit signal))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 (message "%s: %s."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 (car (cdr (cdr (process-command process))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 (substring signal 0 -1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 (set-buffer (process-buffer process))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 (setq mode-line-process nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 (delete-process process))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 (defun shell-command-filter (proc string)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 ;; Do save-excursion by hand so that we can leave point numerically unchanged
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 ;; despite an insertion immediately after it.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 (let* ((obuf (current-buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 (buffer (process-buffer proc))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 opoint
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 (window (get-buffer-window buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 (pos (window-start window)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 (unwind-protect
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 (set-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 (setq opoint (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 (goto-char (point-max))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 (insert-before-markers string))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 ;; insert-before-markers moved this marker: set it back.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 (set-window-start window pos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 ;; Finish our save-excursion.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 (goto-char opoint)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 (set-buffer obuf))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 (defun shell-command-on-region (start end command &optional flag interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 "Execute string COMMAND in inferior shell with region as input.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 Normally display output (if any) in temp buffer `*Shell Command Output*';
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 Prefix arg means replace the region with it.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 Noninteractive args are START, END, COMMAND, FLAG.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 Noninteractively FLAG means insert output in place of text from START to END,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 and put point at the end, but don't alter the mark.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 If the output is one line, it is displayed in the echo area,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663 but it is nonetheless available in buffer `*Shell Command Output*'
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 even though that buffer is not automatically displayed. If there is no output
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 or output is inserted in the current buffer then `*Shell Command Output*' is
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 deleted."
1481
5004c07a8250 (shell-command-on-region):
Richard M. Stallman <rms@gnu.org>
parents: 1466
diff changeset
667 (interactive (list (region-beginning) (region-end)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 (read-string "Shell command on region: "
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 last-shell-command-on-region)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 current-prefix-arg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 (prefix-numeric-value current-prefix-arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 (if flag
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 ;; Replace specified region with output from command.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 (let ((swap (and interactive (< (point) (mark)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 ;; Don't muck with mark
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 ;; unless called interactively.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 (and interactive (push-mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 (call-process-region start end shell-file-name t t nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 "-c" command)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 (if (get-buffer "*Shell Command Output*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 (kill-buffer "*Shell Command Output*"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 (and interactive swap (exchange-point-and-mark)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 ;; No prefix argument: put the output in a temp buffer,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 ;; replacing its entire contents.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 (let ((buffer (get-buffer-create "*Shell Command Output*")))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 (if (eq buffer (current-buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 ;; If the input is the same buffer as the output,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 ;; delete everything but the specified region,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 ;; then replace that region with the output.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 (progn (delete-region end (point-max))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 (delete-region (point-min) start)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 (call-process-region (point-min) (point-max)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 shell-file-name t t nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 "-c" command))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 ;; Clear the output buffer, then run the command with output there.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 (set-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 (erase-buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 (call-process-region start end shell-file-name
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 nil buffer nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 "-c" command))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 ;; Report the amount of output.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 (let ((lines (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 (set-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 (if (= (buffer-size) 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 0
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 (count-lines (point-min) (point-max))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 (cond ((= lines 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 (message "(Shell command completed with no output)")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 (kill-buffer "*Shell Command Output*"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 ((= lines 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712 (message "%s"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 (set-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 (goto-char (point-min))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716 (buffer-substring (point)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 (progn (end-of-line) (point))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 (t
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 (set-window-start (display-buffer buffer) 1)))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 (defun universal-argument ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 "Begin a numeric argument for the following command.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 Digits or minus sign following \\[universal-argument] make up the numeric argument.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 \\[universal-argument] following the digits or minus sign ends the argument.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 \\[universal-argument] without digits or minus sign provides 4 as argument.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 Repeating \\[universal-argument] without digits or minus sign
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 multiplies the argument by 4 each time."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 (interactive nil)
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
729 (let ((factor 4)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
730 key)
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
731 ;; (describe-arg (list factor) 1)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
732 (setq key (read-key-sequence nil t))
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
733 (while (equal (key-binding key) 'universal-argument)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
734 (setq factor (* 4 factor))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
735 ;; (describe-arg (list factor) 1)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
736 (setq key (read-key-sequence nil t)))
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
737 (prefix-arg-internal key factor nil)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
738
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
739 (defun prefix-arg-internal (key factor value)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740 (let ((sign 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 (if (and (numberp value) (< value 0))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 (setq sign -1 value (- value)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 (if (eq value '-)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 (setq sign -1 value nil))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
745 ;; (describe-arg value sign)
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
746 (while (equal key "-")
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
747 (setq sign (- sign) factor nil)
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
748 ;; (describe-arg value sign)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
749 (setq key (read-key-sequence nil t)))
1039
8ab465f7a7ff *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1027
diff changeset
750 (while (and (stringp key)
8ab465f7a7ff *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 1027
diff changeset
751 (= (length key) 1)
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
752 (not (string< key "0"))
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
753 (not (string< "9" key)))
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
754 (setq value (+ (* (if (numberp value) value 0) 10)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
755 (- (aref key 0) ?0))
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
756 factor nil)
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
757 ;; (describe-arg value sign)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
758 (setq key (read-key-sequence nil t)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 (setq prefix-arg
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
760 (cond (factor (list factor))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761 ((numberp value) (* value sign))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
762 ((= sign -1) '-)))
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
763 ;; Calling universal-argument after digits
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
764 ;; terminates the argument but is ignored.
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
765 (if (eq (key-binding key) 'universal-argument)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
766 (progn
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
767 (describe-arg value sign)
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
768 (setq key (read-key-sequence nil t))))
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
769 (if (= (length key) 1)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
770 ;; Make sure self-insert-command finds the proper character;
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
771 ;; unread the character and let the command loop process it.
1740
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
772 (setq unread-command-event (aref key 0))
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
773 ;; We can't push back a longer string, so we'll emulate the
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
774 ;; command loop ourselves.
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
775 (command-execute (key-binding key)))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
777 (defun describe-arg (value sign)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
778 (cond ((numberp value)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
779 (message "Arg: %d" (* value sign)))
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
780 ((consp value)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
781 (message "Arg: [%d]" (car value)))
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
782 ((< sign 0)
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
783 (message "Arg: -"))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 (defun digit-argument (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 "Part of the numeric argument for the next command.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 \\[universal-argument] following digits or minus sign ends the argument."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 (interactive "P")
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
789 (prefix-arg-internal (char-to-string (logand last-command-char ?\177))
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
790 nil arg))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 (defun negative-argument (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 "Begin a negative numeric argument for the next command.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 \\[universal-argument] following digits or minus sign ends the argument."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 (interactive "P")
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
796 (prefix-arg-internal "-" nil arg))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 (defun forward-to-indentation (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 "Move forward ARG lines and position at first nonblank character."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 (forward-line arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 (skip-chars-forward " \t"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 (defun backward-to-indentation (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805 "Move backward ARG lines and position at first nonblank character."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 (forward-line (- arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 (skip-chars-forward " \t"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 (defun kill-line (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 "Kill the rest of the current line; if no nonblanks there, kill thru newline.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 With prefix argument, kill that many lines from point.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 Negative arguments kill lines backward.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 When calling from a program, nil means \"no arg\",
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 a number counts as a prefix arg."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 (kill-region (point)
1556
fce86d06a758 * simple.el (previous-line): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1481
diff changeset
819 ;; Don't shift point before doing the delete; that way,
fce86d06a758 * simple.el (previous-line): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1481
diff changeset
820 ;; undo will record the right position of point.
fce86d06a758 * simple.el (previous-line): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1481
diff changeset
821 (save-excursion
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 (if arg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 (forward-line (prefix-numeric-value arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 (if (eobp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 (signal 'end-of-buffer nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 (if (looking-at "[ \t]*$")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 (forward-line 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 (end-of-line)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
831 ;;;; Window system cut and paste hooks.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
832
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
833 (defvar interprogram-cut-function nil
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
834 "Function to call to make a killed region available to other programs.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
835
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
836 Most window systems provide some sort of facility for cutting and
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
837 pasting text between the windows of different programs. On startup,
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
838 this variable is set to a function which emacs will call whenever text
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
839 is put in the kill ring to make the new kill available to other
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
840 programs.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
841
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
842 The function takes one argument, TEXT, which is a string containing
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
843 the text which should be made available.")
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
844
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
845 (defvar interprogram-paste-function nil
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
846 "Function to call to get text cut from other programs.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
847
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
848 Most window systems provide some sort of facility for cutting and
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
849 pasting text between the windows of different programs. On startup,
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
850 this variable is set to a function which emacs will call to obtain
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
851 text that other programs have provided for pasting.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
852
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
853 The function should be called with no arguments. If the function
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
854 returns nil, then no other program has provided such text, and the top
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
855 of the Emacs kill ring should be used. If the function returns a
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
856 string, that string should be put in the kill ring as the latest kill.
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
857
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
858 Note that the function should return a string only if a program other
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
859 than Emacs has provided a string for pasting; if Emacs provided the
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
860 most recent string, the function should return nil. If it is
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
861 difficult to tell whether Emacs or some other program provided the
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
862 current string, it is probably good enough to return nil if the string
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 715
diff changeset
863 is equal (according to `string=') to the last text Emacs provided.")
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
864
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
865
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
866
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
867 ;;;; The kill ring data structure.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 (defvar kill-ring nil
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
870 "List of killed text sequences.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
871 Since the kill ring is supposed to interact nicely with cut-and-paste
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
872 facilities offered by window systems, use of this variable should
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
873 interact nicely with `interprogram-cut-function' and
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
874 `interprogram-paste-function'. The functions `kill-new',
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
875 `kill-append', and `current-kill' are supposed to implement this
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
876 interaction; you may want to use them instead of manipulating the kill
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
877 ring directly.")
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 (defconst kill-ring-max 30
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 "*Maximum length of kill ring before oldest elements are thrown away.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882 (defvar kill-ring-yank-pointer nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 "The tail of the kill ring whose car is the last thing yanked.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
885 (defun kill-new (string)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
886 "Make STRING the latest kill in the kill ring.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
887 Set the kill-ring-yank pointer to point to it.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
888 If `interprogram-cut-function' is non-nil, apply it to STRING."
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
889 (setq kill-ring (cons string kill-ring))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
890 (if (> (length kill-ring) kill-ring-max)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
891 (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
892 (setq kill-ring-yank-pointer kill-ring)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
893 (if interprogram-cut-function
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
894 (funcall interprogram-cut-function string)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
895
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 (defun kill-append (string before-p)
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
897 "Append STRING to the end of the latest kill in the kill ring.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
898 If BEFORE-P is non-nil, prepend STRING to the kill.
1760
05492c456293 (kill-append): Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 1740
diff changeset
899 If `interprogram-cut-function' is set, pass the resulting kill to
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
900 it."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 (setcar kill-ring
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 (if before-p
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 (concat string (car kill-ring))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
904 (concat (car kill-ring) string)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
905 (if interprogram-cut-function
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
906 (funcall interprogram-cut-function (car kill-ring))))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
907
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
908 (defun current-kill (n &optional do-not-move)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
909 "Rotate the yanking point by N places, and then return that kill.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
910 If N is zero, `interprogram-paste-function' is set, and calling it
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
911 returns a string, then that string is added to the front of the
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
912 kill ring and returned as the latest kill.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
913 If optional arg DO-NOT-MOVE is non-nil, then don't actually move the
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
914 yanking point; just return the Nth kill forward."
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
915 (let ((interprogram-paste (and (= n 0)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
916 interprogram-paste-function
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
917 (funcall interprogram-paste-function))))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
918 (if interprogram-paste
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
919 (progn
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
920 ;; Disable the interprogram cut function when we add the new
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
921 ;; text to the kill ring, so Emacs doesn't try to own the
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
922 ;; selection, with identical text.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
923 (let ((interprogram-cut-function nil))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
924 (kill-new interprogram-paste))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
925 interprogram-paste)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
926 (or kill-ring (error "Kill ring is empty"))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
927 (let* ((length (length kill-ring))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
928 (ARGth-kill-element
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
929 (nthcdr (% (+ n (- length (length kill-ring-yank-pointer)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
930 length)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
931 kill-ring)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
932 (or do-not-move
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
933 (setq kill-ring-yank-pointer ARGth-kill-element))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
934 (car ARGth-kill-element)))))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
935
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
936
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
937
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
938 ;;;; Commands for manipulating the kill ring.
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
939
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 (defun kill-region (beg end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 "Kill between point and mark.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 The text is deleted but saved in the kill ring.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 The command \\[yank] can retrieve it from there.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 \(If you want to kill and then yank immediately, use \\[copy-region-as-kill].)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 This is the primitive for programs to kill text (as opposed to deleting it).
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 Supply two arguments, character numbers indicating the stretch of text
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 to be killed.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949 Any command that calls this function is a \"kill command\".
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 If the previous command was also a kill command,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 the text killed this time appends to the text killed last time
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 to make one entry in the kill ring."
1740
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
953 (interactive "*r")
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
954 (cond
1740
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
955 ;; If the buffer was read-only, we used to just do a
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
956 ;; copy-region-as-kill. This was never what I wanted - usually I
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
957 ;; was making a mistake and trying to edit a file checked into RCS -
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
958 ;; so I've taken the code out.
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
959 ((not (or (eq buffer-undo-list t)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
960 (eq last-command 'kill-region)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
961 (eq beg end)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
962 ;; Don't let the undo list be truncated before we can even access it.
762
852a2f5838da *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 727
diff changeset
963 (let ((undo-strong-limit (+ (- (max beg end) (min beg end)) 100)))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
964 (delete-region beg end)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
965 ;; Take the same string recorded for undo
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
966 ;; and put it in the kill-ring.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
967 (kill-new (car (car buffer-undo-list)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
968 (setq this-command 'kill-region)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
969 (t
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 (copy-region-as-kill beg end)
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
971 (delete-region beg end))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
973 (defun copy-region-as-kill (beg end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
974 "Save the region as if killed, but don't kill it.
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 582
diff changeset
975 If `interprogram-cut-function' is non-nil, also save the text for a window
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 582
diff changeset
976 system cut and paste."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977 (interactive "r")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 (if (eq last-command 'kill-region)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979 (kill-append (buffer-substring beg end) (< end beg))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
980 (kill-new (buffer-substring beg end)))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
981 (setq this-command 'kill-region)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984 (defun kill-ring-save (beg end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 "Save the region as if killed, but don't kill it."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986 (interactive "r")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 (copy-region-as-kill beg end)
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
988 (if (interactive-p)
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
989 (save-excursion
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
990 (let ((other-end (if (= (point) beg) end beg)))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
991 (if (pos-visible-in-window-p other-end (selected-window))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
992 (progn
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
993 (goto-char other-end)
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
994 (sit-for 1))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
995 (let* ((killed-text (current-kill 0))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
996 (message-len (min (length killed-text) 40)))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
997 (if (= (point) beg)
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
998 ;; Don't say "killed"; that is misleading.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
999 (message "Saved text until \"%s\""
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1000 (substring killed-text (- message-len)))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1001 (message "Saved text from \"%s\""
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1002 (substring killed-text 0 message-len)))))))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 (defun append-next-kill ()
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1005 "Cause following command, if it kills, to append to previous kill."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 (if (interactive-p)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 (setq this-command 'kill-region)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 (message "If the next command is a kill, it will append"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 (setq last-command 'kill-region)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 (defun yank-pop (arg)
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1014 "Replace just-yanked stretch of killed text with a different stretch.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1015 This command is allowed only immediately after a `yank' or a `yank-pop'.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 At such a time, the region contains a stretch of reinserted
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1017 previously-killed text. `yank-pop' deletes that text and inserts in its
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 place a different stretch of killed text.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 With no argument, the previous kill is inserted.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1021 With argument N, insert the Nth previous kill.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1022 If N is negative, this is a more recent kill.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 The sequence of kills wraps around, so that after the oldest one
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 comes the newest one."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 (interactive "*p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 (if (not (eq last-command 'yank))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 (error "Previous command was not a yank"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 (setq this-command 'yank)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 (let ((before (< (point) (mark))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 (delete-region (point) (mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 (set-mark (point))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1033 (insert (current-kill arg))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 (if before (exchange-point-and-mark))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 (defun yank (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 "Reinsert the last stretch of killed text.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 More precisely, reinsert the stretch of killed text most recently
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1039 killed OR yanked. Put point at end, and set mark at beginning.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1040 With just C-u as argument, same but put point at beginning (and mark at end).
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1041 With argument N, reinsert the Nth most recently killed stretch of killed
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 text.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 See also the command \\[yank-pop]."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 (interactive "*P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 (push-mark (point))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1046 (insert (current-kill (cond
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1047 ((listp arg) 0)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1048 ((eq arg '-) -1)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1049 (t (1- arg)))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050 (if (consp arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 (exchange-point-and-mark)))
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1052
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1053 (defun rotate-yank-pointer (arg)
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1054 "Rotate the yanking point in the kill ring.
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1055 With argument, rotate that many kills forward (or backward, if negative)."
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1056 (interactive "p")
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1057 (current-kill arg))
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1058
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 (defun insert-buffer (buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 "Insert after point the contents of BUFFER.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 Puts mark after the inserted text.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 BUFFER may be a buffer or a buffer name."
1331
dd2c33afcef2 (insert-buffer): Before reading arg, barf if read-only.
Richard M. Stallman <rms@gnu.org>
parents: 1321
diff changeset
1064 (interactive (list (progn (barf-if-buffer-read-only)
dd2c33afcef2 (insert-buffer): Before reading arg, barf if read-only.
Richard M. Stallman <rms@gnu.org>
parents: 1321
diff changeset
1065 (read-buffer "Insert buffer: " (other-buffer) t))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 (or (bufferp buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 (setq buffer (get-buffer buffer)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 (let (start end newmark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 (set-buffer buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 (setq start (point-min) end (point-max)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 (insert-buffer-substring buffer start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 (setq newmark (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 (push-mark newmark)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 (defun append-to-buffer (buffer start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 "Append to specified buffer the text of the region.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 It is inserted into that buffer before its point.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 When calling from a program, give three arguments:
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 BUFFER (or buffer name), START and END.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 START and END specify the portion of the current buffer to be copied."
715
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1084 (interactive
7af12ccaa6c1 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 658
diff changeset
1085 (list (read-buffer "Append to buffer: " (other-buffer nil t) t)))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 (let ((oldbuf (current-buffer)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 (set-buffer (get-buffer-create buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 (insert-buffer-substring oldbuf start end))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 (defun prepend-to-buffer (buffer start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 "Prepend to specified buffer the text of the region.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 It is inserted into that buffer after its point.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 When calling from a program, give three arguments:
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 BUFFER (or buffer name), START and END.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1097 START and END specify the portion of the current buffer to be copied."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 (interactive "BPrepend to buffer: \nr")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1099 (let ((oldbuf (current-buffer)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 (set-buffer (get-buffer-create buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 (insert-buffer-substring oldbuf start end)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 (defun copy-to-buffer (buffer start end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 "Copy to specified buffer the text of the region.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1107 It is inserted into that buffer, replacing existing text there.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1108
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 When calling from a program, give three arguments:
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 BUFFER (or buffer name), START and END.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 START and END specify the portion of the current buffer to be copied."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 (interactive "BCopy to buffer: \nr")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113 (let ((oldbuf (current-buffer)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 (set-buffer (get-buffer-create buffer))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 (erase-buffer)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 (insert-buffer-substring oldbuf start end)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120 (defun mark ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 "Return this buffer's mark value as integer, or nil if no mark.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 If you are using this in an editing command, you are most likely making
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 a mistake; see the documentation of `set-mark'."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 (marker-position (mark-marker)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 (defun set-mark (pos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 "Set this buffer's mark to POS. Don't use this function!
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1128 That is to say, don't use this function unless you want
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1129 the user to see that the mark has moved, and you want the previous
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 mark position to be lost.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 Normally, when a new mark is set, the old one should go on the stack.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 This is why most applications should use push-mark, not set-mark.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1135 Novice Emacs Lisp programmers often try to use the mark for the wrong
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 purposes. The mark saves a location for the user's convenience.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 Most editing commands should not alter the mark.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 To remember a location for internal use in the Lisp program,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 store it in a Lisp variable. Example:
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 (let ((beg (point))) (forward-line 1) (delete-region beg (point)))."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 (set-marker (mark-marker) pos (current-buffer)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 (defvar mark-ring nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 "The list of saved former marks of the current buffer,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 most recent first.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 (make-variable-buffer-local 'mark-ring)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 (defconst mark-ring-max 16
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 "*Maximum size of mark ring. Start discarding off end if gets this big.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 (defun set-mark-command (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 "Set mark at where point is, or jump to mark.
1740
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
1155 With no prefix argument, set mark, and push old mark position on mark ring.
6d74de06a35d * simple.el (kill-region): Change interactive spec to signal an
Jim Blandy <jimb@redhat.com>
parents: 1581
diff changeset
1156 With argument, jump to mark, and pop a new position for mark off the ring.
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1158 Novice Emacs Lisp programmers often try to use the mark for the wrong
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 purposes. See the documentation of `set-mark' for more information."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 (if (null arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 (push-mark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 (if (null (mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164 (error "No mark set in this buffer")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 (goto-char (mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 (pop-mark))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 (defun push-mark (&optional location nomsg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 "Set mark at LOCATION (point, by default) and push old mark on mark ring.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 Displays \"Mark set\" unless the optional second arg NOMSG is non-nil.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1172 Novice Emacs Lisp programmers often try to use the mark for the wrong
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 purposes. See the documentation of `set-mark' for more information."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 (if (null (mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 (setq mark-ring (cons (copy-marker (mark-marker)) mark-ring))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 (if (> (length mark-ring) mark-ring-max)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 (move-marker (car (nthcdr mark-ring-max mark-ring)) nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 (setcdr (nthcdr (1- mark-ring-max) mark-ring) nil))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 (set-mark (or location (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 (or nomsg executing-macro (> (minibuffer-depth) 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 (message "Mark set"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 (defun pop-mark ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 "Pop off mark ring into the buffer's actual mark.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 Does not set point. Does nothing if mark ring is empty."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189 (if mark-ring
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 (setq mark-ring (nconc mark-ring (list (copy-marker (mark-marker)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 (set-mark (+ 0 (car mark-ring)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 (move-marker (car mark-ring) nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 (if (null (mark)) (ding))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 (setq mark-ring (cdr mark-ring)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 (fset 'exchange-dot-and-mark 'exchange-point-and-mark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 (defun exchange-point-and-mark ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 "Put the mark where point is now, and point where the mark is now."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 (interactive nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 (let ((omark (mark)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 (if (null omark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 (error "No mark set in this buffer"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 (set-mark (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 (goto-char omark)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 (defun next-line (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 "Move cursor vertically down ARG lines.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 If there is no character in the target line exactly under the current column,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 the cursor is positioned after the character in that line which spans this
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 column, or at the end of the line if it is not long enough.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 If there is no line in the buffer after this one,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 a newline character is inserted to create a line
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 and the cursor moves to that line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 The command \\[set-goal-column] can be used to create
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 a semipermanent goal column to which this command always moves.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 Then it does not try to move vertically. This goal column is stored
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 in `goal-column', which is nil when there is none.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 If you are thinking of using this in a Lisp program, consider
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223 using `forward-line' instead. It is usually easier to use
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 and more reliable (no dependence on goal column, etc.)."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 (if (= arg 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 (let ((opoint (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 (forward-line 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 (if (or (= opoint (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 (not (eq (preceding-char) ?\n)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 (insert ?\n)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 (goto-char opoint)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 (line-move arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 (line-move arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 (defun previous-line (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 "Move cursor vertically up ARG lines.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 If there is no character in the target line exactly over the current column,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 the cursor is positioned after the character in that line which spans this
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 column, or at the end of the line if it is not long enough.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 The command \\[set-goal-column] can be used to create
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 a semipermanent goal column to which this command always moves.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 Then it does not try to move vertically.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 If you are thinking of using this in a Lisp program, consider using
1556
fce86d06a758 * simple.el (previous-line): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1481
diff changeset
1248 `forward-line' with a negative argument instead. It is usually easier
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 to use and more reliable (no dependence on goal column, etc.)."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 (line-move (- arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 (defconst track-eol nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 "*Non-nil means vertical motion starting at end of line keeps to ends of lines.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 This means moving to the end of each line moved onto.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 The beginning of a blank line does not count as the end of a line.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258
1466
04b4499061fd (goal-column): Don't put the defvar inside the make-variable-buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 1459
diff changeset
1259 (defvar goal-column nil
04b4499061fd (goal-column): Don't put the defvar inside the make-variable-buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 1459
diff changeset
1260 "*Semipermanent goal column for vertical motion, as set by \\[set-goal-column], or nil.")
04b4499061fd (goal-column): Don't put the defvar inside the make-variable-buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 1459
diff changeset
1261 (make-variable-buffer-local 'goal-column)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 (defvar temporary-goal-column 0
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 "Current goal column for vertical motion.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 It is the column where point was
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 at the start of current run of vertical motion commands.
513
12facf6e03ed *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 475
diff changeset
1267 When the `track-eol' feature is doing its job, the value is 9999.")
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 (defun line-move (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 (if (not (or (eq last-command 'next-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 (eq last-command 'previous-line)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 (setq temporary-goal-column
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 (if (and track-eol (eolp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 ;; Don't count beg of empty line as end of line
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 ;; unless we just did explicit end-of-line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 (or (not (bolp)) (eq last-command 'end-of-line)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 9999
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 (current-column))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 (if (not (integerp selective-display))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 (forward-line arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 ;; Move by arg lines, but ignore invisible ones.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 (while (> arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 (vertical-motion 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 (forward-char -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 (forward-line 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 (setq arg (1- arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 (while (< arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 (vertical-motion -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 (setq arg (1+ arg))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 (move-to-column (or goal-column temporary-goal-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293
1771
3f0f18d4eb8c * simple.el (set-goal-column): Make this command disabled by default.
Jim Blandy <jimb@redhat.com>
parents: 1760
diff changeset
1294 ;;; Many people have said they rarely use this feature, and often type
3f0f18d4eb8c * simple.el (set-goal-column): Make this command disabled by default.
Jim Blandy <jimb@redhat.com>
parents: 1760
diff changeset
1295 ;;; it by accident. Maybe it shouldn't even be on a key.
3f0f18d4eb8c * simple.el (set-goal-column): Make this command disabled by default.
Jim Blandy <jimb@redhat.com>
parents: 1760
diff changeset
1296 (put 'set-goal-column 'disabled t)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 (defun set-goal-column (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 "Set the current horizontal position as a goal for \\[next-line] and \\[previous-line].
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 Those commands will move to this position in the line moved to
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 rather than trying to keep the same horizontal position.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 With a non-nil argument, clears out the goal column
1466
04b4499061fd (goal-column): Don't put the defvar inside the make-variable-buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 1459
diff changeset
1303 so that \\[next-line] and \\[previous-line] resume vertical motion.
04b4499061fd (goal-column): Don't put the defvar inside the make-variable-buffer-local.
Richard M. Stallman <rms@gnu.org>
parents: 1459
diff changeset
1304 The goal column is stored in the variable `goal-column'."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 (if arg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 (setq goal-column nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 (message "No goal column"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 (setq goal-column (current-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 (message (substitute-command-keys
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 "Goal column %d (use \\[set-goal-column] with an arg to unset it)")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 goal-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 (defun transpose-chars (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 "Interchange characters around point, moving forward one character.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 With prefix arg ARG, effect is to take character before point
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319 and drag it forward past ARG other characters (backward if ARG negative).
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 If no argument and at end of line, the previous two chars are exchanged."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 (interactive "*P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 (and (null arg) (eolp) (forward-char -1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 (transpose-subr 'forward-char (prefix-numeric-value arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325 (defun transpose-words (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 "Interchange words around point, leaving point at end of them.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 With prefix arg ARG, effect is to take word before or around point
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 and drag it forward past ARG other words (backward if ARG negative).
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 If ARG is zero, the words around or after point and around or after mark
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 are interchanged."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 (interactive "*p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 (transpose-subr 'forward-word arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 (defun transpose-sexps (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 "Like \\[transpose-words] but applies to sexps.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 Does not work on a sexp that point is in the middle of
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 if it is a list or string."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 (interactive "*p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 (transpose-subr 'forward-sexp arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 (defun transpose-lines (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 "Exchange current line and previous line, leaving point after both.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343 With argument ARG, takes previous line and moves it past ARG lines.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 With argument 0, interchanges line point is in with line mark is in."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 (interactive "*p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 (transpose-subr (function
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 (lambda (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 (if (= arg 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 ;; Move forward over a line,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 ;; but create a newline if none exists yet.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 (if (eobp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 (newline)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 (forward-char 1)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 (forward-line arg))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 (defun transpose-subr (mover arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 (let (start1 end1 start2 end2)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 (if (= arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 (funcall mover 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 (setq end2 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 (funcall mover -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 (setq start2 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 (goto-char (mark))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 (funcall mover 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 (setq end1 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 (funcall mover -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 (setq start1 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 (transpose-subr-1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 (exchange-point-and-mark)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 (while (> arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 (funcall mover -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 (setq start1 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 (funcall mover 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 (setq end1 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 (funcall mover 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 (setq end2 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 (funcall mover -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 (setq start2 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 (transpose-subr-1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 (goto-char end2)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 (setq arg (1- arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 (while (< arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 (funcall mover -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 (setq start2 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 (funcall mover -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 (setq start1 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 (funcall mover 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393 (setq end1 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 (funcall mover 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395 (setq end2 (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 (transpose-subr-1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397 (setq arg (1+ arg)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 (defun transpose-subr-1 ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 (if (> (min end1 end2) (max start1 start2))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 (error "Don't have two things to transpose"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 (let ((word1 (buffer-substring start1 end1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 (word2 (buffer-substring start2 end2)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 (delete-region start2 end2)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 (goto-char start2)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406 (insert word1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 (goto-char (if (< start1 start2) start1
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 (+ start1 (- (length word1) (length word2)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 (delete-char (length word1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 (insert word2)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412 (defconst comment-column 32
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 "*Column to indent right-margin comments to.
1581
9de0900ca56a * simple.el (comment-column): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1556
diff changeset
1414 Setting this variable automatically makes it local to the current buffer.
9de0900ca56a * simple.el (comment-column): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1556
diff changeset
1415 Each mode establishes a different default value for this variable; you
9de0900ca56a * simple.el (comment-column): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 1556
diff changeset
1416 can the value for a particular mode using that mode's hook.")
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 (make-variable-buffer-local 'comment-column)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 (defconst comment-start nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 "*String to insert to start a new comment, or nil if no comment syntax defined.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 (defconst comment-start-skip nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 "*Regexp to match the start of a comment plus everything up to its body.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 If there are any \\(...\\) pairs, the comment delimiter text is held to begin
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 at the place matched by the close of the first pair.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 (defconst comment-end ""
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 "*String to insert to end a new comment.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 Should be an empty string if comments are terminated by end-of-line.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 (defconst comment-indent-hook
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 '(lambda () comment-column)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 "Function to compute desired indentation for a comment.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 This function is called with no args with point at the beginning of
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 the comment's starting delimiter.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 (defun indent-for-comment ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 "Indent this line's comment to comment column, or insert an empty comment."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 (beginning-of-line 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 (if (null comment-start)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 (error "No comment syntax defined")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 (let* ((eolpos (save-excursion (end-of-line) (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 cpos indent begpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 (if (re-search-forward comment-start-skip eolpos 'move)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 (progn (setq cpos (point-marker))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 ;; Find the start of the comment delimiter.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 ;; If there were paren-pairs in comment-start-skip,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 ;; position at the end of the first pair.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 (if (match-end 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 (goto-char (match-end 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 ;; If comment-start-skip matched a string with internal
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 ;; whitespace (not final whitespace) then the delimiter
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 ;; start at the end of that whitespace.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 ;; Otherwise, it starts at the beginning of what was matched.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456 (skip-chars-backward " \t" (match-beginning 0))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 (skip-chars-backward "^ \t" (match-beginning 0)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 (setq begpos (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 ;; Compute desired indent.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 (if (= (current-column)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 (setq indent (funcall comment-indent-hook)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462 (goto-char begpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 ;; If that's different from current, change it.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 (delete-region (point) begpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 (indent-to indent))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 ;; An existing comment?
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 (if cpos
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 (progn (goto-char cpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 (set-marker cpos nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 ;; No, insert one.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 (insert comment-start)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474 (insert comment-end))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 (defun set-comment-column (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 "Set the comment column based on point.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 With no arg, set the comment column to the current column.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 With just minus as arg, kill any comment on this line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 With any other arg, set comment column to indentation of the previous comment
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 and then align or create a comment on this line at that column."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 (if (eq arg '-)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 (kill-comment nil)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 (if arg
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 (re-search-backward comment-start-skip)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1491 (re-search-forward comment-start-skip)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 (goto-char (match-beginning 0))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 (setq comment-column (current-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 (message "Comment column set to %d" comment-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495 (indent-for-comment))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 (setq comment-column (current-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497 (message "Comment column set to %d" comment-column))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499 (defun kill-comment (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500 "Kill the comment on this line, if any.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 With argument, kill comments on that many lines starting with this one."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 ;; this function loses in a lot of situations. it incorrectly recognises
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 ;; comment delimiters sometimes (ergo, inside a string), doesn't work
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 ;; with multi-line comments, can kill extra whitespace if comment wasn't
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 ;; through end-of-line, et cetera.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 (or comment-start-skip (error "No comment syntax defined"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 (let ((count (prefix-numeric-value arg)) endc)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509 (while (> count 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 (setq endc (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 (and (string< "" comment-end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 (setq endc
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 (re-search-forward (regexp-quote comment-end) endc 'move)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 (skip-chars-forward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 (if (re-search-forward comment-start-skip endc t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 (goto-char (match-beginning 0))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 (kill-region (point) endc)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 ;; to catch comments a line beginnings
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 (indent-according-to-mode))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 (if arg (forward-line 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 (setq count (1- count)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 (defun comment-region (beg end &optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 "Comment the region; third arg numeric means use ARG comment characters.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 If ARG is negative, delete that many comment characters instead.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 Comments are terminated on each line, even for syntax in which newline does
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 not end the comment. Blank lines do not get comments."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 ;; if someone wants it to only put a comment-start at the beginning and
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 ;; comment-end at the end then typing it, C-x C-x, closing it, C-x C-x
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 ;; is easy enough. No option is made here for other than commenting
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 ;; every line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 (interactive "r\np")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 (or comment-start (error "No comment syntax is defined"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 (if (> beg end) (let (mid) (setq mid beg beg end end mid)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 (save-restriction
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 (let ((cs comment-start) (ce comment-end))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 (cond ((not arg) (setq arg 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 ((> arg 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 (while (> (setq arg (1- arg)) 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 (setq cs (concat cs comment-start)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 ce (concat ce comment-end)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 (narrow-to-region beg end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 (goto-char beg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 (while (not (eobp))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554 (if (< arg 0)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 (let ((count arg))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556 (while (and (> 1 (setq count (1+ count)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 (looking-at (regexp-quote cs)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 (delete-char (length cs)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 (if (string= "" ce) ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560 (setq count arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 (while (> 1 (setq count (1+ count)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 ;; this is questionable if comment-end ends in whitespace
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 ;; that is pretty brain-damaged though
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 (backward-char (length ce))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 (if (looking-at (regexp-quote ce))
1459
a7394244aa9a (comment-region): Do move to next line, in neg arg case.
Richard M. Stallman <rms@gnu.org>
parents: 1331
diff changeset
1568 (delete-char (length ce)))))
a7394244aa9a (comment-region): Do move to next line, in neg arg case.
Richard M. Stallman <rms@gnu.org>
parents: 1331
diff changeset
1569 (forward-line 1))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 (if (looking-at "[ \t]*$") ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 (insert cs)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 (if (string= "" ce) ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 (insert ce)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 (search-forward "\n" nil 'move)))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 (defun backward-word (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 "Move backward until encountering the end of a word.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 With argument, do this that many times.
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1580 In programs, it is faster to call `forward-word' with negative arg."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 (forward-word (- arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 (defun mark-word (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 "Set mark arg words away from point."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 (push-mark
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 (forward-word arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 (point))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 (defun kill-word (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 "Kill characters forward until encountering the end of a word.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 With argument, do this that many times."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 (interactive "p")
1276
6b63876aea1c (kill-word): Don't change point before calling kill-region.
Richard M. Stallman <rms@gnu.org>
parents: 1145
diff changeset
1596 (kill-region (point) (save-excursion (forward-word arg) (point))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 (defun backward-kill-word (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 "Kill characters backward until encountering the end of a word.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 With argument, do this that many times."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 (interactive "p")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 (kill-word (- arg)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 (defconst fill-prefix nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 "*String for filling to insert at front of new line, or nil for none.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 Setting this variable automatically makes it local to the current buffer.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 (make-variable-buffer-local 'fill-prefix)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 (defconst auto-fill-inhibit-regexp nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 "*Regexp to match lines which should not be auto-filled.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 (defun do-auto-fill ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 (let (give-up)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 (or (and auto-fill-inhibit-regexp
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 (save-excursion (beginning-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 (looking-at auto-fill-inhibit-regexp)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 (while (and (not give-up) (> (current-column) fill-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618 (let ((fill-point
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 (let ((opoint (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 (move-to-column (1+ fill-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 (skip-chars-backward "^ \t\n")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 (if (bolp)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 (re-search-forward "[ \t]" opoint t))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 (point)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 ;; If there is a space on the line before fill-point,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 ;; and nonspaces precede it, break the line there.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 (if (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 (goto-char fill-point)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631 (not (bolp)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 ;; If point is at the fill-point, do not `save-excursion'.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 ;; Otherwise, if a comment prefix or fill-prefix is inserted,
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634 ;; point will end up before it rather than after it.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635 (if (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637 (= (point) fill-point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 (indent-new-comment-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 (goto-char fill-point)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 (indent-new-comment-line)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 ;; No place to break => stop trying.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 (setq give-up t)))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 (defconst comment-multi-line nil
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 "*Non-nil means \\[indent-new-comment-line] should continue same comment
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1647 on new line, with no new terminator or starter.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1648 This is obsolete because you might as well use \\[newline-and-indent].")
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 (defun indent-new-comment-line ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651 "Break line at point and indent, continuing comment if presently within one.
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1652 The body of the continued comment is indented under the previous comment line.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1653
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1654 This command is intended for styles where you write a comment per line,
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1655 starting a new comment (and terminating it if necessary) on each line.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1656 If you want to continue one comment across several lines, use \\[newline-and-indent]."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 (interactive "*")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 (let (comcol comstart)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 (delete-region (point)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 (progn (skip-chars-forward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 (point)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 (insert ?\n)
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1664 (if (not comment-multi-line)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1665 (save-excursion
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1666 (if (and comment-start-skip
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1667 (let ((opoint (point)))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1668 (forward-line -1)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1669 (re-search-forward comment-start-skip opoint t)))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1670 ;; The old line is a comment.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1671 ;; Set WIN to the pos of the comment-start.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1672 ;; But if the comment is empty, look at preceding lines
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1673 ;; to find one that has a nonempty comment.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1674 (let ((win (match-beginning 0)))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1675 (while (and (eolp) (not (bobp))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1676 (let (opoint)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1677 (beginning-of-line)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1678 (setq opoint (point))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1679 (forward-line -1)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1680 (re-search-forward comment-start-skip opoint t)))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1681 (setq win (match-beginning 0)))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1682 ;; Indent this line like what we found.
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1683 (goto-char win)
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1684 (setq comcol (current-column))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1685 (setq comstart (buffer-substring (point) (match-end 0)))))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686 (if comcol
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 (let ((comment-column comcol)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 (comment-start comstart)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 (comment-end comment-end))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690 (and comment-end (not (equal comment-end ""))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1691 ; (if (not comment-multi-line)
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693 (forward-char -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 (insert comment-end)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695 (forward-char 1))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1696 ; (setq comment-column (+ comment-column (length comment-start))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1697 ; comment-start "")
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1698 ; )
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1699 )
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 (if (not (eolp))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 (setq comment-end ""))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 (insert ?\n)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703 (forward-char -1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 (indent-for-comment)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 ;; Make sure we delete the newline inserted above.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 (delete-char 1)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 (if fill-prefix
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 (insert fill-prefix)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 (indent-according-to-mode)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 (defun auto-fill-mode (&optional arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 "Toggle auto-fill mode.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1715 With arg, turn auto-fill mode on if and only if arg is positive.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 In auto-fill mode, inserting a space at a column beyond fill-column
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 automatically breaks the line at a previous space."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719 (prog1 (setq auto-fill-function
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 (if (if (null arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 (not auto-fill-function)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 (> (prefix-numeric-value arg) 0))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 'do-auto-fill
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 ;; update mode-line
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 (set-buffer-modified-p (buffer-modified-p))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 (defun turn-on-auto-fill ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 "Unconditionally turn on Auto Fill mode."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 (auto-fill-mode 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732 (defun set-fill-column (arg)
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1733 "Set `fill-column' to current column, or to argument if given.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1734 The variable `fill-column' has a separate value for each buffer."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 (setq fill-column (if (integerp arg) arg (current-column)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 (message "fill-column set to %d" fill-column))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 (defun set-selective-display (arg)
1027
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1740 "Set `selective-display' to ARG; clear it if no arg.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1741 When the value of `selective-display' is a number > 0,
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1742 lines whose indentation is >= that value are not displayed.
f0000f6f7942 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 954
diff changeset
1743 The variable `selective-display' has a separate value for each buffer."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 (if (eq selective-display t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 (error "selective-display already in use for marked lines"))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1747 (let ((current-vpos
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1748 (save-restriction
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1749 (narrow-to-region (point-min) (point))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1750 (goto-char (window-start))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1751 (vertical-motion (window-height)))))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1752 (setq selective-display
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1753 (and arg (prefix-numeric-value arg)))
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1754 (recenter current-vpos))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 (set-window-start (selected-window) (window-start (selected-window)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 (princ "selective-display set to " t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 (prin1 selective-display t)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 (princ "." t))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 (defun overwrite-mode (arg)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 "Toggle overwrite mode.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 With arg, turn overwrite mode on iff arg is positive.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 In overwrite mode, printing characters typed in replace existing text
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 on a one-for-one basis, rather than pushing it to the right."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 (interactive "P")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 (setq overwrite-mode
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 (if (null arg) (not overwrite-mode)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 (> (prefix-numeric-value arg) 0)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 (set-buffer-modified-p (buffer-modified-p))) ;No-op, but updates mode line.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 (defvar blink-matching-paren t
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 "*Non-nil means show matching open-paren when close-paren is inserted.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 (defconst blink-matching-paren-distance 4000
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775 "*If non-nil, is maximum distance to search for matching open-paren
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 when close-paren is inserted.")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 (defun blink-matching-open ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 "Move cursor momentarily to the beginning of the sexp before point."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 (and (> (point) (1+ (point-min)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 (/= (char-syntax (char-after (- (point) 2))) ?\\ )
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 blink-matching-paren
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 (let* ((oldpos (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 (blinkpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 (mismatch))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 (save-restriction
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 (if blink-matching-paren-distance
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 (narrow-to-region (max (point-min)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 (- (point) blink-matching-paren-distance))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 oldpos))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 (condition-case ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 (setq blinkpos (scan-sexps oldpos -1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 (error nil)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 (and blinkpos (/= (char-syntax (char-after blinkpos))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 ?\$)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798 (setq mismatch
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 (/= (char-after (1- oldpos))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 (logand (lsh (aref (syntax-table)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 (char-after blinkpos))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 -8)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 255))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 (if mismatch (setq blinkpos nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 (if blinkpos
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 (goto-char blinkpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 (if (pos-visible-in-window-p)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 (sit-for 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 (goto-char blinkpos)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 (message
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812 "Matches %s"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 (if (save-excursion
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 (skip-chars-backward " \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815 (not (bolp)))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 (buffer-substring (progn (beginning-of-line) (point))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 (1+ blinkpos))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 (buffer-substring blinkpos
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 (progn
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 (forward-char 1)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821 (skip-chars-forward "\n \t")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822 (end-of-line)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 (point)))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 (cond (mismatch
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 (message "Mismatched parentheses"))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 ((not blink-matching-paren-distance)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827 (message "Unmatched parenthesis"))))))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 ;Turned off because it makes dbx bomb out.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830 (setq blink-paren-function 'blink-matching-open)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 ; this is just something for the luser to see in a keymap -- this is not
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833 ; how quitting works normally!
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 (defun keyboard-quit ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 "Signal a quit condition."
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836 (interactive)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 (signal 'quit nil))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839 (define-key global-map "\C-g" 'keyboard-quit)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 (defun set-variable (var val)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 "Set VARIABLE to VALUE. VALUE is a Lisp object.
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 When using this interactively, supply a Lisp expression for VALUE.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1844 If you want VALUE to be a string, you must surround it with doublequotes.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1845
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1846 If VARIABLE has a `variable-interactive' property, that is used as if
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1847 it were the arg to `interactive' (which see) to interactively read the value."
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 (interactive
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 (let* ((var (read-variable "Set variable: "))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 (minibuffer-help-form
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 '(funcall myhelp))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852 (myhelp
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 (function
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 (lambda ()
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 (with-output-to-temp-buffer "*Help*"
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856 (prin1 var)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 (princ "\nDocumentation:\n")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 (princ (substring (documentation-property var 'variable-documentation)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 1))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 (if (boundp var)
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 (let ((print-length 20))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 (princ "\n\nCurrent value: ")
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 (prin1 (symbol-value var))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 nil)))))
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 (list var
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1866 (let ((prop (get var 'variable-interactive)))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1867 (if prop
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1868 ;; Use VAR's `variable-interactive' property
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1869 ;; as an interactive spec for prompting.
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1870 (call-interactively (list 'lambda '(arg)
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1871 (list 'interactive prop)
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1872 'arg))
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 762
diff changeset
1873 (eval-minibuffer (format "Set %s to value: " var)))))))
475
fb215f87f4a9 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 (set var val))
658
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1875
7cbd4fcd8b0f *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 617
diff changeset
1876 ;;; simple.el ends here