annotate lisp/rect.el @ 106768:21fd634f447a

Make line<->pixel_y conversion macros aware of native menu/tool bars. They are placed above the internal border. This supersedes special treatment of native tool bars in the display code. This fixes wrong display position of native menu bars and bogus mouse highlighting of native tool bars, both of which can be found when internal border width is large. Also it fixes wrong flashed part on visible bell with native menu bars. * frame.h (FRAME_TOP_MARGIN_HEIGHT): New macro. (FRAME_LINE_TO_PIXEL_Y, FRAME_PIXEL_Y_TO_LINE): Take account of pseudo windows above internal border. * window.h (WINDOW_MENU_BAR_P, WINDOW_TOOL_BAR_P): New macros. (WINDOW_TOP_EDGE_Y, WINDOW_BOTTOM_EDGE_Y): Take account of pseudo windows above internal border. * xdisp.c (get_glyph_string_clip_rects, init_glyph_string): Don't treat tool bar windows specially. * xfns.c (x_set_tool_bar_lines): Take account of menu bar height. * xterm.c (x_after_update_window_line): Don't treat tool bar windows specially. (XTflash): Take account of menu bar height. * w32term.c (x_after_update_window_line): Don't treat tool bar windows specially.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sat, 09 Jan 2010 13:16:32 +0900
parents a9dc0e7c3f2b
children 1d1d5d9bd884
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
38436
b174db545cfd Some fixes to follow coding conventions.
Pavel Janík <Pavel@Janik.cz>
parents: 37444
diff changeset
1 ;;; rect.el --- rectangle functions for GNU Emacs
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
2
64762
41bb365f41c4 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64091
diff changeset
3 ;; Copyright (C) 1985, 1999, 2000, 2001, 2002, 2003, 2004
100908
a9dc0e7c3f2b Add 2009 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 99298
diff changeset
4 ;; 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
845
213978acbc1e entered into RCS
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
5
39537
133fc59b5c6a Update maintainer's email address.
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
6 ;; Maintainer: Didier Verna <didier@xemacs.org>
814
38b2499cb3e9 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 807
diff changeset
7 ;; Keywords: internal
789
71d052f72ac1 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
8
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
9 ;; This file is part of GNU Emacs.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
10
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
11 ;; GNU Emacs is free software: you can redistribute it and/or modify
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
12 ;; it under the terms of the GNU General Public License as published by
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
13 ;; the Free Software Foundation, either version 3 of the License, or
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
14 ;; (at your option) any later version.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
15
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
16 ;; GNU Emacs is distributed in the hope that it will be useful,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
19 ;; GNU General Public License for more details.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
20
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
21 ;; You should have received a copy of the GNU General Public License
94678
ee5932bf781d Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 93975
diff changeset
22 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
23
2308
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1619
diff changeset
24 ;;; Commentary:
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1619
diff changeset
25
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
26 ;; This package provides the operations on rectangles that are documented
2308
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1619
diff changeset
27 ;; in the Emacs manual.
f287613dfc28 Added or corrected Commentary sections
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 1619
diff changeset
28
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
29 ;; ### NOTE: this file has been almost completely rewritten by Didier Verna
39537
133fc59b5c6a Update maintainer's email address.
Eli Zaretskii <eliz@gnu.org>
parents: 38436
diff changeset
30 ;; <didier@xemacs.org> in July 1999. The purpose of this rewrite is to be less
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
31 ;; intrusive and fill lines with whitespaces only when needed. A few functions
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
32 ;; are untouched though, as noted above their definition.
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
33
96440
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
34 ;;; Global key bindings
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
35
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
36 ;;;###autoload (define-key ctl-x-r-map "c" 'clear-rectangle)
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
37 ;;;###autoload (define-key ctl-x-r-map "k" 'kill-rectangle)
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
38 ;;;###autoload (define-key ctl-x-r-map "d" 'delete-rectangle)
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
39 ;;;###autoload (define-key ctl-x-r-map "y" 'yank-rectangle)
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
40 ;;;###autoload (define-key ctl-x-r-map "o" 'open-rectangle)
4dbdccc0a028 Bind global keys to ctl-x-r-map in autoload cookies.
Juri Linkov <juri@jurta.org>
parents: 94678
diff changeset
41 ;;;###autoload (define-key ctl-x-r-map "t" 'string-rectangle)
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
42
789
71d052f72ac1 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
43 ;;; Code:
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
44
23757
717a33da04a1 (move-to-column-force): New function.
Kenichi Handa <handa@m17n.org>
parents: 23641
diff changeset
45 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
46 (defun move-to-column-force (column &optional flag)
46054
06ea4b707bb2 (move-to-column-force): Likewise.
Juanma Barranquero <lekktu@gmail.com>
parents: 45168
diff changeset
47 "If COLUMN is within a multi-column character, replace it by spaces and tab.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
48 As for `move-to-column', passing anything but nil or t in FLAG will move to
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
49 the desired column only if the line is long enough."
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
50 (move-to-column column (or flag t)))
46512
8e08ec435afd (move-to-column-force): Add autoload cookie to obsolescence declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 46054
diff changeset
51
8e08ec435afd (move-to-column-force): Add autoload cookie to obsolescence declaration.
Juanma Barranquero <lekktu@gmail.com>
parents: 46054
diff changeset
52 ;;;###autoload
46054
06ea4b707bb2 (move-to-column-force): Likewise.
Juanma Barranquero <lekktu@gmail.com>
parents: 45168
diff changeset
53 (make-obsolete 'move-to-column-force 'move-to-column "21.2")
23757
717a33da04a1 (move-to-column-force): New function.
Kenichi Handa <handa@m17n.org>
parents: 23641
diff changeset
54
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
55 ;; not used any more --dv
22213
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
56 ;; extract-rectangle-line stores lines into this list
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
57 ;; to accumulate them for extract-rectangle and delete-extract-rectangle.
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
58 (defvar operate-on-rectangle-lines)
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
59
30283
70a7936c29c5 (open-rectangle-line): Remove unused let.
Dave Love <fx@gnu.org>
parents: 28078
diff changeset
60 ;; ### NOTE: this function is untouched, but not used anymore apart from
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
61 ;; `delete-whitespace-rectangle'. `apply-on-rectangle' is used instead. --dv
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
62 (defun operate-on-rectangle (function start end coerce-tabs)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
63 "Call FUNCTION for each line of rectangle with corners at START, END.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
64 If COERCE-TABS is non-nil, convert multi-column characters
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
65 that span the starting or ending columns on any line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
66 to multiple spaces before calling FUNCTION.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
67 FUNCTION is called with three arguments:
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
68 position of start of segment of this line within the rectangle,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
69 number of columns that belong to rectangle but are before that position,
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
70 number of columns that belong to rectangle but are after point.
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
71 Point is at the end of the segment of this line within the rectangle."
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
72 (let (startcol startlinepos endcol endlinepos)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
73 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
74 (goto-char start)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
75 (setq startcol (current-column))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
76 (beginning-of-line)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
77 (setq startlinepos (point)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
78 (save-excursion
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
79 (goto-char end)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
80 (setq endcol (current-column))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
81 (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
82 (setq endlinepos (point-marker)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
83 (if (< endcol startcol)
1619
6147d2164331 * rect.el (operate-on-rectangle): Use move-to-column's FORCE
Jim Blandy <jimb@redhat.com>
parents: 1542
diff changeset
84 (setq startcol (prog1 endcol (setq endcol startcol))))
5787
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
85 (save-excursion
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
86 (goto-char startlinepos)
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
87 (while (< (point) endlinepos)
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
88 (let (startpos begextra endextra)
23757
717a33da04a1 (move-to-column-force): New function.
Kenichi Handa <handa@m17n.org>
parents: 23641
diff changeset
89 (if coerce-tabs
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
90 (move-to-column startcol t)
23757
717a33da04a1 (move-to-column-force): New function.
Kenichi Handa <handa@m17n.org>
parents: 23641
diff changeset
91 (move-to-column startcol))
5787
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
92 (setq begextra (- (current-column) startcol))
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
93 (setq startpos (point))
23757
717a33da04a1 (move-to-column-force): New function.
Kenichi Handa <handa@m17n.org>
parents: 23641
diff changeset
94 (if coerce-tabs
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
95 (move-to-column endcol t)
23757
717a33da04a1 (move-to-column-force): New function.
Kenichi Handa <handa@m17n.org>
parents: 23641
diff changeset
96 (move-to-column endcol))
19732
d8478556c7f0 (operate-on-rectangle): If we overshoot when looking for endcol, back up.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
97 ;; If we overshot, move back one character
d8478556c7f0 (operate-on-rectangle): If we overshoot when looking for endcol, back up.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
98 ;; so that endextra will be positive.
d8478556c7f0 (operate-on-rectangle): If we overshoot when looking for endcol, back up.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
99 (if (and (not coerce-tabs) (> (current-column) endcol))
d8478556c7f0 (operate-on-rectangle): If we overshoot when looking for endcol, back up.
Richard M. Stallman <rms@gnu.org>
parents: 14169
diff changeset
100 (backward-char 1))
5787
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
101 (setq endextra (- endcol (current-column)))
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
102 (if (< begextra 0)
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
103 (setq endextra (+ endextra begextra)
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
104 begextra 0))
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
105 (funcall function startpos begextra endextra))
bef3a67ac893 (string-rectangle): Make operate-on-rectangle convert tabs.
Richard M. Stallman <rms@gnu.org>
parents: 2637
diff changeset
106 (forward-line 1)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
107 (- endcol startcol)))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
108
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
109 ;; The replacement for `operate-on-rectangle' -- dv
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
110 (defun apply-on-rectangle (function start end &rest args)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
111 "Call FUNCTION for each line of rectangle with corners at START, END.
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
112 FUNCTION is called with two arguments: the start and end columns of the
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
113 rectangle, plus ARGS extra arguments. Point is at the beginning of line when
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
114 the function is called."
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
115 (let (startcol startpt endcol endpt)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
116 (save-excursion
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
117 (goto-char start)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
118 (setq startcol (current-column))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
119 (beginning-of-line)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
120 (setq startpt (point))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
121 (goto-char end)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
122 (setq endcol (current-column))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
123 (forward-line 1)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
124 (setq endpt (point-marker))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
125 ;; ensure the start column is the left one.
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
126 (if (< endcol startcol)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
127 (let ((col startcol))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
128 (setq startcol endcol endcol col)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
129 ;; start looping over lines
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
130 (goto-char startpt)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
131 (while (< (point) endpt)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
132 (apply function startcol endcol args)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
133 (forward-line 1)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
134 ))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
135
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
136 (defun delete-rectangle-line (startcol endcol fill)
59783
b2ab001718c6 (delete-rectangle-line, delete-extract-rectangle-line)
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
137 (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
138 (delete-region (point)
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
139 (progn (move-to-column endcol 'coerce)
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
140 (point)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
141
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
142 (defun delete-extract-rectangle-line (startcol endcol lines fill)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
143 (let ((pt (point-at-eol)))
59783
b2ab001718c6 (delete-rectangle-line, delete-extract-rectangle-line)
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
144 (if (< (move-to-column startcol (if fill t 'coerce)) startcol)
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
145 (setcdr lines (cons (spaces-string (- endcol startcol))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
146 (cdr lines)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
147 ;; else
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
148 (setq pt (point))
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
149 (move-to-column endcol t)
69862
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
150 (setcdr lines (cons (filter-buffer-substring pt (point) t) (cdr lines))))
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
151 ))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
152
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
153 ;; ### NOTE: this is actually the only function that needs to do complicated
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
154 ;; stuff like what's happening in `operate-on-rectangle', because the buffer
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
155 ;; might be read-only. --dv
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
156 (defun extract-rectangle-line (startcol endcol lines)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
157 (let (start end begextra endextra line)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
158 (move-to-column startcol)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
159 (setq start (point)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
160 begextra (- (current-column) startcol))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
161 (move-to-column endcol)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
162 (setq end (point)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
163 endextra (- endcol (current-column)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
164 (setq line (buffer-substring start (point)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
165 (if (< begextra 0)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
166 (setq endextra (+ endextra begextra)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
167 begextra 0))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
168 (if (< endextra 0)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
169 (setq endextra 0))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
170 (goto-char start)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
171 (while (search-forward "\t" end t)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
172 (let ((width (- (current-column)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
173 (save-excursion (forward-char -1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
174 (current-column)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
175 (setq line (concat (substring line 0 (- (point) end 1))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
176 (spaces-string width)
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
177 (substring line (+ (length line)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
178 (- (point) end)))))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
179 (if (or (> begextra 0) (> endextra 0))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
180 (setq line (concat (spaces-string begextra)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
181 line
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
182 (spaces-string endextra))))
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
183 (setcdr lines (cons line (cdr lines)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
184
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
185 (defconst spaces-strings
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
186 '["" " " " " " " " " " " " " " " " "])
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
187
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
188 ;; this one is untouched --dv
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
189 (defun spaces-string (n)
99298
225286546090 Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 96440
diff changeset
190 "Return a string with N spaces."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
191 (if (<= n 8) (aref spaces-strings n)
99298
225286546090 Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 96440
diff changeset
192 (make-string n ?\s)))
49597
e88404e8f2cf Trailing whitespace deleted.
Juanma Barranquero <lekktu@gmail.com>
parents: 46512
diff changeset
193
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
194 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
195 (defun delete-rectangle (start end &optional fill)
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
196 "Delete (don't save) text in the region-rectangle.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
197 The same range of columns is deleted in each line starting with the
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
198 line where the region begins and ending with the line where the region
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
199 ends.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
200
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
201 When called from a program the rectangle's corners are START and END.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
202 With a prefix (or a FILL) argument, also fill lines where nothing has
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
203 to be deleted."
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
204 (interactive "*r\nP")
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
205 (apply-on-rectangle 'delete-rectangle-line start end fill))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
206
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
207 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
208 (defun delete-extract-rectangle (start end &optional fill)
25380
b5ef1f54a2ca (delete-extract-rectangle): Doc fix from verna.
Dave Love <fx@gnu.org>
parents: 25379
diff changeset
209 "Delete the contents of the rectangle with corners at START and END.
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
210 Return it as a list of strings, one for each line of the rectangle.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
211
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
212 When called from a program the rectangle's corners are START and END.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
213 With an optional FILL argument, also fill lines where nothing has to be
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
214 deleted."
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
215 (let ((lines (list nil)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
216 (apply-on-rectangle 'delete-extract-rectangle-line start end lines fill)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
217 (nreverse (cdr lines))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
218
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
219 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
220 (defun extract-rectangle (start end)
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
221 "Return the contents of the rectangle with corners at START and END.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
222 Return it as a list of strings, one for each line of the rectangle."
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
223 (let ((lines (list nil)))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
224 (apply-on-rectangle 'extract-rectangle-line start end lines)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
225 (nreverse (cdr lines))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
226
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
227 (defvar killed-rectangle nil
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
228 "Rectangle for `yank-rectangle' to insert.")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
229
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
230 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
231 (defun kill-rectangle (start end &optional fill)
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
232 "Delete the region-rectangle and save it as the last killed one.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
233
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
234 When called from a program the rectangle's corners are START and END.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
235 You might prefer to use `delete-extract-rectangle' from a program.
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
236
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
237 With a prefix (or a FILL) argument, also fill lines where nothing has to be
69862
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
238 deleted.
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
239
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
240 If the buffer is read-only, Emacs will beep and refrain from deleting
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
241 the rectangle, but put it in the kill ring anyway. This means that
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
242 you can use this command to copy text from a read-only buffer.
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
243 \(If the variable `kill-read-only-ok' is non-nil, then this won't
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
244 even beep.)"
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
245 (interactive "r\nP")
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
246 (condition-case nil
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
247 (setq killed-rectangle (delete-extract-rectangle start end fill))
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
248 ((buffer-read-only text-read-only)
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
249 (setq killed-rectangle (extract-rectangle start end))
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
250 (if kill-read-only-ok
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
251 (progn (message "Read only text copied to kill ring") nil)
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
252 (barf-if-buffer-read-only)
dd0c0f578fc9 (kill-rectangle): Don't barf if `kill-read-only-ok' is set.
Eli Zaretskii <eliz@gnu.org>
parents: 68651
diff changeset
253 (signal 'text-read-only (list (current-buffer)))))))
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
254
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
255 ;; this one is untouched --dv
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
256 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
257 (defun yank-rectangle ()
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
258 "Yank the last killed rectangle with upper left corner at point."
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
259 (interactive "*")
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
260 (insert-rectangle killed-rectangle))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
261
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
262 ;; this one is untoutched --dv
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
263 ;;;###autoload
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
264 (defun insert-rectangle (rectangle)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
265 "Insert text of RECTANGLE with upper left corner at point.
242
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
266 RECTANGLE's first line is inserted at point, its second
5647f2040009 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 36
diff changeset
267 line is inserted at a point vertically under point, etc.
1542
724b443e445d (insert-rectangle): Put mark at upper left corner.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
268 RECTANGLE should be a list of strings.
724b443e445d (insert-rectangle): Put mark at upper left corner.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
269 After this command, the mark is at the upper left corner
724b443e445d (insert-rectangle): Put mark at upper left corner.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
270 and point is at the lower right corner."
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
271 (let ((lines rectangle)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
272 (insertcolumn (current-column))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
273 (first t))
1542
724b443e445d (insert-rectangle): Put mark at upper left corner.
Richard M. Stallman <rms@gnu.org>
parents: 845
diff changeset
274 (push-mark)
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
275 (while lines
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
276 (or first
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
277 (progn
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
278 (forward-line 1)
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
279 (or (bolp) (insert ?\n))
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
280 (move-to-column insertcolumn t)))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
281 (setq first nil)
44676
37fdab0b94fa (insert-rectangle): Use insert-for-yank.
Richard M. Stallman <rms@gnu.org>
parents: 44207
diff changeset
282 (insert-for-yank (car lines))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
283 (setq lines (cdr lines)))))
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
284
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
285 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
286 (defun open-rectangle (start end &optional fill)
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
287 "Blank out the region-rectangle, shifting text right.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
288
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
289 The text previously in the region is not overwritten by the blanks,
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
290 but instead winds up to the right of the rectangle.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
291
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
292 When called from a program the rectangle's corners are START and END.
99298
225286546090 Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 96440
diff changeset
293 With a prefix (or a FILL) argument, fill with blanks even if there is
225286546090 Fix typos in docstrings.
Juanma Barranquero <lekktu@gmail.com>
parents: 96440
diff changeset
294 no text on the right side of the rectangle."
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
295 (interactive "*r\nP")
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
296 (apply-on-rectangle 'open-rectangle-line start end fill)
1619
6147d2164331 * rect.el (operate-on-rectangle): Use move-to-column's FORCE
Jim Blandy <jimb@redhat.com>
parents: 1542
diff changeset
297 (goto-char start))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
298
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
299 (defun open-rectangle-line (startcol endcol fill)
59783
b2ab001718c6 (delete-rectangle-line, delete-extract-rectangle-line)
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
300 (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
30283
70a7936c29c5 (open-rectangle-line): Remove unused let.
Dave Love <fx@gnu.org>
parents: 28078
diff changeset
301 (unless (and (not fill)
70a7936c29c5 (open-rectangle-line): Remove unused let.
Dave Love <fx@gnu.org>
parents: 28078
diff changeset
302 (= (point) (point-at-eol)))
70a7936c29c5 (open-rectangle-line): Remove unused let.
Dave Love <fx@gnu.org>
parents: 28078
diff changeset
303 (indent-to endcol))))
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
304
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
305 (defun delete-whitespace-rectangle-line (startcol endcol fill)
59783
b2ab001718c6 (delete-rectangle-line, delete-extract-rectangle-line)
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
306 (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
307 (unless (= (point) (point-at-eol))
37444
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
308 (delete-region (point) (progn (skip-syntax-forward " ") (point))))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
309
45168
4f3c96288c84 (close-rectangle): Don't hide it behind the autoload-cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 44676
diff changeset
310 ;;;###autoload
4f3c96288c84 (close-rectangle): Don't hide it behind the autoload-cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 44676
diff changeset
311 (defalias 'close-rectangle 'delete-whitespace-rectangle) ;; Old name
4f3c96288c84 (close-rectangle): Don't hide it behind the autoload-cookie.
Markus Rost <rost@math.uni-bielefeld.de>
parents: 44676
diff changeset
312
258
1e0bc00dca7a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 242
diff changeset
313 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
314 (defun delete-whitespace-rectangle (start end &optional fill)
22205
8576d32229fc (close-rectangle): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19732
diff changeset
315 "Delete all whitespace following a specified column in each line.
8576d32229fc (close-rectangle): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19732
diff changeset
316 The left edge of the rectangle specifies the position in each line
8576d32229fc (close-rectangle): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19732
diff changeset
317 at which whitespace deletion should begin. On each line in the
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
318 rectangle, all continuous whitespace starting at that column is deleted.
22205
8576d32229fc (close-rectangle): New command.
Richard M. Stallman <rms@gnu.org>
parents: 19732
diff changeset
319
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
320 When called from a program the rectangle's corners are START and END.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
321 With a prefix (or a FILL) argument, also fill too short lines."
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
322 (interactive "*r\nP")
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
323 (apply-on-rectangle 'delete-whitespace-rectangle-line start end fill))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
324
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
325 ;; not used any more --dv
22213
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
326 ;; string-rectangle uses this variable to pass the string
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
327 ;; to string-rectangle-line.
84c3c863f0bd (string-rectangle-string): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 22205
diff changeset
328 (defvar string-rectangle-string)
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
329 (defvar string-rectangle-history nil)
33772
4787f33fe54f (string-rectangle): Revert last change.
Dave Love <fx@gnu.org>
parents: 33750
diff changeset
330 (defun string-rectangle-line (startcol endcol string delete)
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
331 (move-to-column startcol t)
33772
4787f33fe54f (string-rectangle): Revert last change.
Dave Love <fx@gnu.org>
parents: 33750
diff changeset
332 (if delete
4787f33fe54f (string-rectangle): Revert last change.
Dave Love <fx@gnu.org>
parents: 33750
diff changeset
333 (delete-rectangle-line startcol endcol nil))
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
334 (insert string))
2380
e67f6d2679e3 (fill-rectangle) Added. Inspired by Lynn Slater's insert-box package in LCD,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2308
diff changeset
335
e67f6d2679e3 (fill-rectangle) Added. Inspired by Lynn Slater's insert-box package in LCD,
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 2308
diff changeset
336 ;;;###autoload
37444
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
337 (defun string-rectangle (start end string)
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
338 "Replace rectangle contents with STRING on each line.
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
339 The length of STRING need not be the same as the rectangle width.
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
340
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
341 Called from a program, takes three args; START, END and STRING."
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
342 (interactive
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
343 (progn (barf-if-buffer-read-only)
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
344 (list
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
345 (region-beginning)
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
346 (region-end)
65680
ed770a0a7846 2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents: 64762
diff changeset
347 (read-string (format "String rectangle (default %s): "
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
348 (or (car string-rectangle-history) ""))
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
349 nil 'string-rectangle-history
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
350 (car string-rectangle-history)))))
33772
4787f33fe54f (string-rectangle): Revert last change.
Dave Love <fx@gnu.org>
parents: 33750
diff changeset
351 (apply-on-rectangle 'string-rectangle-line start end string t))
28078
99865d22cc31 2000-09-01 Didier Verna <didier@xemacs.org>
Dave Love <fx@gnu.org>
parents: 25380
diff changeset
352
44207
6c55bf040a71 (replace-rectangle): Add autoload.
Richard M. Stallman <rms@gnu.org>
parents: 43555
diff changeset
353 ;;;###autoload
37444
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
354 (defalias 'replace-rectangle 'string-rectangle)
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
355
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
356 ;;;###autoload
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
357 (defun string-insert-rectangle (start end string)
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
358 "Insert STRING on each line of region-rectangle, shifting text right.
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
359
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
360 When called from a program, the rectangle's corners are START and END.
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
361 The left edge of the rectangle specifies the column for insertion.
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
362 This command does not delete or overwrite any existing text."
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
363 (interactive
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
364 (progn (barf-if-buffer-read-only)
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
365 (list
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
366 (region-beginning)
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
367 (region-end)
65680
ed770a0a7846 2005-09-24 Emilio C. Lopes <eclig@gmx.net>
Romain Francoise <romain@orebokech.com>
parents: 64762
diff changeset
368 (read-string (format "String insert rectangle (default %s): "
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
369 (or (car string-rectangle-history) ""))
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
370 nil 'string-rectangle-history
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
371 (car string-rectangle-history)))))
37444
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
372 (apply-on-rectangle 'string-rectangle-line start end string nil))
d5ed9aa37aa2 (string-rectangle): Revert to 20.x behaviour.
Gerd Moellmann <gerd@gnu.org>
parents: 33807
diff changeset
373
28078
99865d22cc31 2000-09-01 Didier Verna <didier@xemacs.org>
Dave Love <fx@gnu.org>
parents: 25380
diff changeset
374 ;;;###autoload
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
375 (defun clear-rectangle (start end &optional fill)
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
376 "Blank out the region-rectangle.
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
377 The text previously in the region is overwritten with blanks.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
378
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
379 When called from a program the rectangle's corners are START and END.
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
380 With a prefix (or a FILL) argument, also fill with blanks the parts of the
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
381 rectangle which were empty."
25379
167c69238538 Add/fix various doc strings. Add `*' to all the interactive specs.
Dave Love <fx@gnu.org>
parents: 25291
diff changeset
382 (interactive "*r\nP")
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
383 (apply-on-rectangle 'clear-rectangle-line start end fill))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
384
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
385 (defun clear-rectangle-line (startcol endcol fill)
43555
c33c91ae60fc (clear-rectangle-line): Reindent to the same column
Richard M. Stallman <rms@gnu.org>
parents: 41173
diff changeset
386 (let ((pt (point-at-eol)))
59783
b2ab001718c6 (delete-rectangle-line, delete-extract-rectangle-line)
Richard M. Stallman <rms@gnu.org>
parents: 52401
diff changeset
387 (when (= (move-to-column startcol (if fill t 'coerce)) startcol)
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
388 (if (and (not fill)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
389 (<= (save-excursion (goto-char pt) (current-column)) endcol))
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
390 (delete-region (point) pt)
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
391 ;; else
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
392 (setq pt (point))
41173
e1285c5daeaf (move-to-column-force): Mark obsolete.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 39537
diff changeset
393 (move-to-column endcol t)
43555
c33c91ae60fc (clear-rectangle-line): Reindent to the same column
Richard M. Stallman <rms@gnu.org>
parents: 41173
diff changeset
394 (setq endcol (current-column))
25168
0fbd51325497 All functions rewritten, except when noted above
Richard M. Stallman <rms@gnu.org>
parents: 23812
diff changeset
395 (delete-region pt (point))
43555
c33c91ae60fc (clear-rectangle-line): Reindent to the same column
Richard M. Stallman <rms@gnu.org>
parents: 41173
diff changeset
396 (indent-to endcol)))))
36
9697c13298e5 Initial revision
Joseph Arceneaux <jla@gnu.org>
parents:
diff changeset
397
1619
6147d2164331 * rect.el (operate-on-rectangle): Use move-to-column's FORCE
Jim Blandy <jimb@redhat.com>
parents: 1542
diff changeset
398 (provide 'rect)
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
399
93975
1e3a407766b9 Fix up comment convention on the arch-tag lines.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 79721
diff changeset
400 ;; arch-tag: 178847b3-1f50-4b03-83de-a6e911cc1d16
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 258
diff changeset
401 ;;; rect.el ends here