annotate src/indent.c @ 1628:5ca8f0065e4e

* make-dist: Explain what's going on if config.sub and gmalloc.c can't be linked. Place the code which copies them near the code which links the rest of the files around them.
author Jim Blandy <jimb@redhat.com>
date Fri, 20 Nov 1992 17:08:05 +0000
parents fa662930e654
children 4edfaa19c7a7
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Indentation functions.
573
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1992 Free Software Foundation, Inc.
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 the Free Software Foundation; either version 1, or (at your option)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include "config.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include "lisp.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "buffer.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include "indent.h"
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
25 #include "frame.h"
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 #include "window.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "termchar.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "termopts.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "disptab.h"
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 /* Indentation can insert tabs if this is non-zero;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 otherwise always uses spaces */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 int indent_tabs_mode;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #define min(a, b) ((a) < (b) ? (a) : (b))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 #define max(a, b) ((a) > (b) ? (a) : (b))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #define CR 015
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 /* These three values memoize the current column to avoid recalculation */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 /* Some things in set last_known_column_point to -1
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 to mark the memoized value as invalid */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 /* Last value returned by current_column */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 int last_known_column;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 /* Value of point when current_column was called */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 int last_known_column_point;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 /* Value of MODIFF when current_column was called */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48 int last_known_column_modified;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 /* Get the display table to use for the current buffer. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 struct Lisp_Vector *
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 buffer_display_table ()
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55 Lisp_Object thisbuf;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
56
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 thisbuf = current_buffer->display_table;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58 if (XTYPE (thisbuf) == Lisp_Vector
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 && XVECTOR (thisbuf)->size == DISP_TABLE_SIZE)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 return XVECTOR (thisbuf);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 if (XTYPE (Vstandard_display_table) == Lisp_Vector
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 && XVECTOR (Vstandard_display_table)->size == DISP_TABLE_SIZE)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 return XVECTOR (Vstandard_display_table);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 return 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 DEFUN ("current-column", Fcurrent_column, Scurrent_column, 0, 0, 0,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 "Return the horizontal position of point. Beginning of line is column 0.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 This is calculated by adding together the widths of all the displayed\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 representations of the character between the start of the previous line\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71 and point. (eg control characters will have a width of 2 or 4, tabs\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 will have a variable width)\n\
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
73 Ignores finite width of frame, which means that this function may return\n\
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
74 values greater than (frame-width).\n\
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 Whether the line is visible (if `selective-display' is t) has no effect;\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 however, ^M is treated as end of line when `selective-display' is t.")
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77 ()
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 Lisp_Object temp;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80 XFASTINT (temp) = current_column ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 return temp;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83
327
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
84 /* Cancel any recorded value of the horizontal position. */
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
85
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
86 invalidate_current_column ()
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
87 {
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
88 last_known_column_point = 0;
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
89 }
554b1810e969 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 165
diff changeset
90
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 int
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 current_column ()
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 register int col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 register unsigned char *ptr, *stop;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 register int tab_seen;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 int post_tab;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 register int c;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 register int tab_width = XINT (current_buffer->tab_width);
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
100 int ctl_arrow = !NILP (current_buffer->ctl_arrow);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 register struct Lisp_Vector *dp = buffer_display_table ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 int stopchar;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 if (point == last_known_column_point
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 && MODIFF == last_known_column_modified)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 return last_known_column;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 /* Make a pointer for decrementing through the chars before point. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 ptr = &FETCH_CHAR (point - 1) + 1;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 /* Make a pointer to where consecutive chars leave off,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 going backwards from point. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 if (point == BEGV)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 stop = ptr;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 else if (point <= GPT || BEGV > GPT)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 stop = BEGV_ADDR;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 else
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 stop = GAP_END_ADDR;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 col = 0, tab_seen = 0, post_tab = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 while (1)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 if (ptr == stop)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 /* We stopped either for the beginning of the buffer
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 or for the gap. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 if (ptr == BEGV_ADDR)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 /* It was the gap. Jump back over it. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 stop = BEGV_ADDR;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 ptr = GPT_ADDR;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 /* Check whether that brings us to beginning of buffer. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 if (BEGV >= GPT) break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 c = *--ptr;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 if (c >= 040 && c < 0177
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 && (dp == 0 || XTYPE (DISP_CHAR_ROPE (dp, c)) != Lisp_String))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 col++;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 else if (c == '\n')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 else if (c == '\r' && EQ (current_buffer->selective_display, Qt))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 else if (c == '\t')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 if (tab_seen)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 col = ((col + tab_width) / tab_width) * tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 post_tab += col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 col = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 tab_seen = 1;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 else if (dp != 0 && XTYPE (DISP_CHAR_ROPE (dp, c)) == Lisp_String)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 col += XSTRING (DISP_CHAR_ROPE (dp, c))->size / sizeof (GLYPH);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 else
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 col += (ctl_arrow && c < 0200) ? 2 : 4;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 if (tab_seen)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 col = ((col + tab_width) / tab_width) * tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 col += post_tab;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 last_known_column = col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 last_known_column_point = point;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 last_known_column_modified = MODIFF;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 return col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
174 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 DEFUN ("indent-to", Findent_to, Sindent_to, 1, 2, "NIndent to column: ",
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 "Indent from point with tabs and spaces until COLUMN is reached.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 Optional second argument MIN says always do at least MIN spaces\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 even if that goes past COLUMN; by default, MIN is zero.")
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 (col, minimum)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 Lisp_Object col, minimum;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 int mincol;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 register int fromcol;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 register int tab_width = XINT (current_buffer->tab_width);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 CHECK_NUMBER (col, 0);
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
189 if (NILP (minimum))
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 XFASTINT (minimum) = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 CHECK_NUMBER (minimum, 1);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 fromcol = current_column ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 mincol = fromcol + XINT (minimum);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 if (mincol < XINT (col)) mincol = XINT (col);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197 if (fromcol == mincol)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 return make_number (mincol);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
200 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 if (indent_tabs_mode)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 Lisp_Object n;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 XFASTINT (n) = mincol / tab_width - fromcol / tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 if (XFASTINT (n) != 0)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 Finsert_char (make_number ('\t'), n);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 fromcol = (mincol / tab_width) * tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 XFASTINT (col) = mincol - fromcol;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 Finsert_char (make_number (' '), col);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 last_known_column = mincol;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 last_known_column_point = point;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 last_known_column_modified = MODIFF;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 XSETINT (col, mincol);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 return col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 DEFUN ("current-indentation", Fcurrent_indentation, Scurrent_indentation,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 0, 0, 0,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 "Return the indentation of the current line.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 This is the horizontal position of the character\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 following any initial whitespace.")
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230 ()
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 Lisp_Object val;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 XFASTINT (val) = position_indentation (find_next_newline (point, -1));
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 return val;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 position_indentation (pos)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 register int pos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 register int column = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 register int tab_width = XINT (current_buffer->tab_width);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 register unsigned char *p;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 register unsigned char *stop;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
247
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 stop = &FETCH_CHAR (BUFFER_CEILING_OF (pos)) + 1;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 p = &FETCH_CHAR (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 while (1)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 while (p == stop)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 if (pos == ZV)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 return column;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256 pos += p - &FETCH_CHAR (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 p = &FETCH_CHAR (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 stop = &FETCH_CHAR (BUFFER_CEILING_OF (pos)) + 1;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 switch (*p++)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262 case ' ':
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 column++;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 case '\t':
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 column += tab_width - column % tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268 default:
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 return column;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 DEFUN ("move-to-column", Fmove_to_column, Smove_to_column, 1, 2, 0,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 "Move point to column COLUMN in the current line.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 The column of a character is calculated by adding together the widths\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 as displayed of the previous characters in the line.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 This function ignores line-continuation;\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279 there is no upper limit on the column number a character can have\n\
1208
fa662930e654 * indent.c (Fmove_to_column): Pass the right number of arguments
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
280 and horizontal scrolling has no effect.\n\
fa662930e654 * indent.c (Fmove_to_column): Pass the right number of arguments
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
281 \n\
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 If specified column is within a character, point goes after that character.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 If it's past end of line, point goes to end of line.\n\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 A non-nil second (optional) argument FORCE means, if the line\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 is too short to reach column COLUMN then add spaces/tabs to get there,\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 and if COLUMN is in the middle of a tab character, change it to spaces.")
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 (column, force)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 Lisp_Object column, force;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 register int pos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 register int col = current_column ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 register int goal;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 register int end;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 register int tab_width = XINT (current_buffer->tab_width);
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
295 register int ctl_arrow = !NILP (current_buffer->ctl_arrow);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
296 register struct Lisp_Vector *dp = buffer_display_table ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 Lisp_Object val;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 int prev_col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 int c;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
302 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
303 CHECK_NATNUM (column, 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
304 goal = XINT (column);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 retry:
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 pos = point;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
308 end = ZV;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
309
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 /* If we're starting past the desired column,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311 back up to beginning of line and scan from there. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
312 if (col > goal)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 pos = find_next_newline (pos, -1);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 col = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 while (col < goal && pos < end)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 c = FETCH_CHAR (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 if (c == '\n')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 if (c == '\r' && EQ (current_buffer->selective_display, Qt))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 pos++;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 if (c == '\t')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 prev_col = col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329 col += tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 col = col / tab_width * tab_width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 else if (dp != 0 && XTYPE (DISP_CHAR_ROPE (dp, c)) == Lisp_String)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 col += XSTRING (DISP_CHAR_ROPE (dp, c))->size / sizeof (GLYPH);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 else if (ctl_arrow && (c < 040 || c == 0177))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 col++;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 else if (c < 040 || c >= 0177)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 col += 3;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 else
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 col++;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 SET_PT (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 /* If a tab char made us overshoot, change it to spaces
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 and scan through it again. */
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
346 if (!NILP (force) && col > goal && c == '\t' && prev_col < goal)
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 {
573
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
348 int old_point;
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
349
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 del_range (point - 1, point);
573
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
351 Findent_to (make_number (goal), Qnil);
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
352 old_point = point;
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
353 Findent_to (make_number (col), Qnil);
f0ffd1764382 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
354 SET_PT (old_point);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 /* If line ends prematurely, add space to the end. */
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
358 if (col < goal && !NILP (force))
1208
fa662930e654 * indent.c (Fmove_to_column): Pass the right number of arguments
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
359 Findent_to (make_number (col = goal), Qnil);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 last_known_column = col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 last_known_column_point = point;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363 last_known_column_modified = MODIFF;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 XFASTINT (val) = col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 return val;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 struct position val_compute_motion;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 /* Scan the current buffer forward from offset FROM, pretending that
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 this is at line FROMVPOS, column FROMHPOS, until reaching buffer
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 offset TO or line TOVPOS, column TOHPOS (whichever comes first),
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 and return the ending buffer position and screen location.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 WIDTH is the number of columns available to display text;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 compute_motion uses this to handle continuation lines and such.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 HSCROLL is the number of columns not being displayed at the left
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 margin; this is usually taken from a window's hscroll member.
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 526
diff changeset
380 TAB_OFFSET is the number of columns of the first tab that aren't
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 526
diff changeset
381 being displayed, perhaps because of a continuation line or
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 526
diff changeset
382 something.
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 compute_motion returns a pointer to a struct position. The bufpos
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 member gives the buffer position at the end of the scan, and hpos
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 and vpos give its cartesian location. I'm not clear on what the
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 other members are.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 For example, to find the buffer position of column COL of line LINE
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 of a certain window, pass the window's starting location as FROM
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 and the window's upper-left coordinates as FROMVPOS and FROMHPOS.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 Pass the buffer's ZV as TO, to limit the scan to the end of the
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 visible section of the buffer, and pass LINE and COL as TOVPOS and
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 TOHPOS.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 When displaying in window w, a typical formula for WIDTH is:
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 window_width - 1
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
399 - (window_width + window_left != frame_width)
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 where
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 window_width is XFASTINT (w->width),
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 window_left is XFASTINT (w->left),
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
404 and frame_width = FRAME_WIDTH (XFRAME (window->frame))
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 This accounts for the continuation-line backslashes, and the window
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 borders if the window is split vertically. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 struct position *
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 compute_motion (from, fromvpos, fromhpos, to, tovpos, tohpos, width, hscroll, tab_offset)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 int from, fromvpos, fromhpos, to, tovpos, tohpos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 register int width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 int hscroll, tab_offset;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
415 register int hpos = fromhpos;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
416 register int vpos = fromvpos;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 register int pos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 register int c;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 register int tab_width = XFASTINT (current_buffer->tab_width);
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
421 register int ctl_arrow = !NILP (current_buffer->ctl_arrow);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 register struct Lisp_Vector *dp = buffer_display_table ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 int selective
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 = XTYPE (current_buffer->selective_display) == Lisp_Int
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 ? XINT (current_buffer->selective_display)
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
426 : !NILP (current_buffer->selective_display) ? -1 : 0;
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
427 int prev_vpos, prev_hpos;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 int selective_rlen
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 = (selective && dp && XTYPE (DISP_INVIS_ROPE (dp)) == Lisp_String
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 ? XSTRING (DISP_INVIS_ROPE (dp))->size / sizeof (GLYPH) : 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
433 for (pos = from; pos < to; pos++)
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
435 /* Stop if past the target screen position. */
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
436 if (vpos > tovpos
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
437 || (vpos == tovpos && hpos >= tohpos))
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
438 break;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
439
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
440 prev_vpos = vpos;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
441 prev_hpos = hpos;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
442
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 c = FETCH_CHAR (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 if (c >= 040 && c < 0177
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 && (dp == 0 || XTYPE (DISP_CHAR_ROPE (dp, c)) != Lisp_String))
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
446 hpos++;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 else if (c == '\t')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
449 hpos += tab_width - ((hpos + tab_offset + hscroll - (hscroll > 0)
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
450 /* Add tab_width here to make sure positive.
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
451 hpos can be negative after continuation
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
452 but can't be less than -tab_width. */
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
453 + tab_width)
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
454 % tab_width);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 else if (c == '\n')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 if (selective > 0 && position_indentation (pos + 1) >= selective)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 /* Skip any number of invisible lines all at once */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 do
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
463 while (++pos < to && FETCH_CHAR (pos) != '\n');
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 }
614
0085dcbad4bd *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 573
diff changeset
465 while (pos < to && position_indentation (pos + 1) >= selective);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 pos--;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 /* Allow for the " ..." that is displayed for them. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 if (selective_rlen)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
470 hpos += selective_rlen;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
471 if (hpos >= width)
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
472 hpos = width;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 }
614
0085dcbad4bd *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 573
diff changeset
474 /* We have skipped the invis text, but not the newline after. */
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 else
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
477 {
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
478 /* A visible line. */
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
479 vpos++;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
480 hpos = 0;
617
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 614
diff changeset
481 hpos -= hscroll;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 614
diff changeset
482 if (hscroll > 0) hpos++; /* Count the ! on column 0 */
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 614
diff changeset
483 tab_offset = 0;
cde1f15848c6 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 614
diff changeset
484 }
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 else if (c == CR && selective < 0)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 /* In selective display mode,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 everything from a ^M to the end of the line is invisible */
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
490 while (pos < to && FETCH_CHAR (pos) != '\n') pos++;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
491 /* Stop *before* the real newline. */
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 pos--;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 /* Allow for the " ..." that is displayed for them. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 if (selective_rlen)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
496 hpos += selective_rlen;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
497 if (hpos >= width)
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
498 hpos = width;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 else if (dp != 0 && XTYPE (DISP_CHAR_ROPE (dp, c)) == Lisp_String)
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
502 hpos += XSTRING (DISP_CHAR_ROPE (dp, c))->size / sizeof (GLYPH);
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 else
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
504 hpos += (ctl_arrow && c < 0200) ? 2 : 4;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
506 /* Handle right margin. */
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
507 if (hpos >= width
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
508 && (hpos > width
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
509 || (pos < ZV - 1
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510 && FETCH_CHAR (pos + 1) != '\n')))
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
512 if (vpos > tovpos
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
513 || (vpos == tovpos && hpos >= tohpos))
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 if (hscroll
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 || (truncate_partial_width_windows
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
517 && width + 1 < FRAME_WIDTH (selected_frame))
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
518 || !NILP (current_buffer->truncate_lines))
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
520 /* Truncating: skip to newline. */
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
521 while (pos < to && FETCH_CHAR (pos) != '\n') pos++;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 pos--;
614
0085dcbad4bd *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 573
diff changeset
523 hpos = width;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 else
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 {
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
527 /* Continuing. */
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
528 vpos++;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
529 hpos -= width;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 tab_offset += width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 val_compute_motion.bufpos = pos;
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
537 val_compute_motion.hpos = hpos;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
538 val_compute_motion.vpos = vpos;
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
539 val_compute_motion.prevhpos = prev_hpos;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 /* Nonzero if have just continued a line */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 val_compute_motion.contin
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
543 = (pos != from
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
544 && (val_compute_motion.vpos != prev_vpos)
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
545 && c != '\n');
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 return &val_compute_motion;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 /* Return the column of position POS in window W's buffer,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 rounded down to a multiple of the internal width of W.
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 This is the amount of indentation of position POS
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 that is not visible in its horizontal position in the window. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 int
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 pos_tab_offset (w, pos)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 struct window *w;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 register int pos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 int opoint = point;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 int col;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 int width = XFASTINT (w->width) - 1
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 - (XFASTINT (w->width) + XFASTINT (w->left)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
565 != FRAME_WIDTH (XFRAME (w->frame)));
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 if (pos == BEGV || FETCH_CHAR (pos - 1) == '\n')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 return 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569 SET_PT (pos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 col = current_column ();
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 SET_PT (opoint);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 return col - (col % width);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 /* start_hpos is the hpos of the first character of the buffer:
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 zero except for the minibuffer window,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 where it is the width of the prompt. */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 struct position val_vmotion;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 struct position *
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 vmotion (from, vtarget, width, hscroll, window)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 register int from, vtarget, width;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 int hscroll;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 Lisp_Object window;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 struct position pos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 /* vpos is cumulative vertical position, changed as from is changed */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 register int vpos = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 register int prevline;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 register int first;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 int lmargin = hscroll > 0 ? 1 - hscroll : 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 int selective
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 = XTYPE (current_buffer->selective_display) == Lisp_Int
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 ? XINT (current_buffer->selective_display)
488
4fddd0f0fc33 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 327
diff changeset
596 : !NILP (current_buffer->selective_display) ? -1 : 0;
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597 int start_hpos = (EQ (window, minibuf_window) ? minibuf_prompt_width : 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 retry:
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 if (vtarget > vpos)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 /* Moving downward is simple, but must calculate from beg of line
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 to determine hpos of starting point */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 if (from > BEGV && FETCH_CHAR (from - 1) != '\n')
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606 prevline = find_next_newline (from, -1);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 while (selective > 0
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 && prevline > BEGV
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609 && position_indentation (prevline) >= selective)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 prevline = find_next_newline (prevline - 1, -1);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 pos = *compute_motion (prevline, 0,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 lmargin + (prevline == 1 ? start_hpos : 0),
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
613 from, 1 << (INTBITS - 2), 0,
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 width, hscroll, 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 else
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 pos.hpos = lmargin + (from == 1 ? start_hpos : 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 pos.vpos = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 return compute_motion (from, vpos, pos.hpos,
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
622 ZV, vtarget, - (1 << (INTBITS - 2)),
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 width, hscroll, pos.vpos * width);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 /* To move upward, go a line at a time until
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 we have gone at least far enough */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 first = 1;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 while ((vpos > vtarget || first) && from > BEGV)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
633 prevline = from;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 while (1)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636 prevline = find_next_newline (prevline - 1, -1);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 if (prevline == BEGV
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 || selective <= 0
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 || position_indentation (prevline) < selective)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 break;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 pos = *compute_motion (prevline, 0,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 lmargin + (prevline == 1 ? start_hpos : 0),
526
a41500eed1c5 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 488
diff changeset
644 from, 1 << (INTBITS - 2), 0,
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 width, hscroll, 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 vpos -= pos.vpos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 first = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 from = prevline;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 /* If we made exactly the desired vertical distance,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 or if we hit beginning of buffer,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 return point found */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 if (vpos >= vtarget)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 val_vmotion.bufpos = from;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 val_vmotion.vpos = vpos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 val_vmotion.hpos = lmargin;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 val_vmotion.contin = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 val_vmotion.prevhpos = 0;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 return &val_vmotion;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 /* Otherwise find the correct spot by moving down */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 goto retry;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 DEFUN ("vertical-motion", Fvertical_motion, Svertical_motion, 1, 1, 0,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669 "Move to start of screen line LINES lines down.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 If LINES is negative, this is moving up.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 Sets point to position found; this may be start of line\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 or just the start of a continuation line.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 Returns number of lines moved; may be closer to zero than LINES\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 if beginning or end of buffer was reached.")
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 (lines)
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 Lisp_Object lines;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 struct position pos;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
679 register struct window *w = XWINDOW (selected_window);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 int width = XFASTINT (w->width) - 1
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 - (XFASTINT (w->width) + XFASTINT (w->left)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 617
diff changeset
682 != FRAME_WIDTH (XFRAME (w->frame)));
165
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 CHECK_NUMBER (lines, 0);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 pos = *vmotion (point, XINT (lines), width,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 /* Not XFASTINT since perhaps could be negative */
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 XINT (w->hscroll), selected_window);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 SET_PT (pos.bufpos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 return make_number (pos.vpos);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 }
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 syms_of_indent ()
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 {
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 DEFVAR_BOOL ("indent-tabs-mode", &indent_tabs_mode,
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697 "*Indentation can insert tabs if this is non-nil.\n\
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 Setting this variable automatically makes it local to the current buffer.");
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 indent_tabs_mode = 1;
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 defsubr (&Scurrent_indentation);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 defsubr (&Sindent_to);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 defsubr (&Scurrent_column);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 defsubr (&Smove_to_column);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 defsubr (&Svertical_motion);
ee44492a4419 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 }