Mercurial > emacs
annotate src/cm.h @ 99492:ee792794d888
(isearch-search-fun): Compare the length of the
current search string with the length of the string from the
previous search state to detect the situation when the user
adds or removes characters in the search string.
Use word-search-forward-lax and word-search-backward-lax in this
case, and otherwise word-search-forward and word-search-backward.
author | Juri Linkov <juri@jurta.org> |
---|---|
date | Tue, 11 Nov 2008 19:43:09 +0000 |
parents | 29adfc9354e7 |
children | e038c1a8307c |
rev | line source |
---|---|
486 | 1 /* Cursor motion calculation definitions for GNU Emacs |
75227
e90d04cd455a
Update copyright for years from Emacs 21 to present (mainly adding
Glenn Morris <rgm@gnu.org>
parents:
68651
diff
changeset
|
2 Copyright (C) 1985, 1989, 2001, 2002, 2003, 2004, |
79759 | 3 2005, 2006, 2007, 2008 Free Software Foundation, Inc. |
486 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
94994
29adfc9354e7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
7 GNU Emacs is free software: you can redistribute it and/or modify |
486 | 8 it under the terms of the GNU General Public License as published by |
94994
29adfc9354e7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
9 the Free Software Foundation, either version 3 of the License, or |
29adfc9354e7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
10 (at your option) any later version. |
486 | 11 |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
94994
29adfc9354e7
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
87649
diff
changeset
|
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
486 | 19 |
20 /* Holds the minimum and maximum costs for the parametrized capabilities. */ | |
21 struct parmcap | |
22 { | |
23 int mincost, maxcost; | |
24 }; | |
25 | |
26 /* This structure holds everything needed to do cursor motion except the pad | |
27 character (PC) and the output speed of the terminal (ospeed), which | |
28 termcap wants in global variables. */ | |
29 | |
30 struct cm | |
31 { | |
32 /* Cursor position. -1 in *both* variables means the cursor | |
33 position is unknown, in order to force absolute cursor motion. */ | |
34 | |
35 int cm_curY; /* Current row */ | |
36 int cm_curX; /* Current column */ | |
37 | |
38 /* Capabilities from termcap */ | |
39 char *cm_up; /* up (up) */ | |
40 char *cm_down; /* down (do) */ | |
41 char *cm_left; /* left (le) */ | |
42 char *cm_right; /* right (nd) */ | |
43 char *cm_home; /* home (ho) */ | |
44 char *cm_cr; /* carriage return (cr) */ | |
45 char *cm_ll; /* last line (ll) */ | |
46 char *cm_tab; /* tab (ta) */ | |
47 char *cm_backtab; /* backtab (bt) */ | |
48 char *cm_abs; /* absolute (cm) */ | |
49 char *cm_habs; /* horizontal absolute (ch) */ | |
50 char *cm_vabs; /* vertical absolute (cv) */ | |
51 #if 0 | |
52 char *cm_ds; /* "don't send" string (ds) */ | |
53 #endif | |
54 char *cm_multiup; /* multiple up (UP) */ | |
55 char *cm_multidown; /* multiple down (DO) */ | |
56 char *cm_multileft; /* multiple left (LE) */ | |
57 char *cm_multiright; /* multiple right (RI) */ | |
58 int cm_cols; /* number of cols on screen (co) */ | |
59 int cm_rows; /* number of rows on screen (li) */ | |
60 int cm_tabwidth; /* tab width (it) */ | |
61 unsigned int cm_autowrap:1; /* autowrap flag (am) */ | |
62 unsigned int cm_magicwrap:1; /* VT-100: cursor stays in last col but | |
63 will cm_wrap if next char is | |
64 printing (xn) */ | |
65 unsigned int cm_usetabs:1; /* if set, use tabs */ | |
66 unsigned int cm_losewrap:1; /* if reach right margin, forget cursor | |
67 location */ | |
68 unsigned int cm_autolf:1; /* \r performs a \r\n (rn) */ | |
69 | |
70 /* Parametrized capabilities. This needs to be a struct since | |
71 the costs are accessed through pointers. */ | |
72 | |
73 #if 0 | |
74 struct parmcap cc_abs; /* absolute (cm) */ | |
75 struct parmcap cc_habs; /* horizontal absolute (ch) */ | |
76 struct parmcap cc_vabs; /* vertical absolute (cv) */ | |
77 struct parmcap cc_multiup; /* multiple up (UP) */ | |
78 struct parmcap cc_multidown; /* multiple down (DO) */ | |
79 struct parmcap cc_multileft; /* multiple left (LE) */ | |
80 struct parmcap cc_multiright; /* multiple right (RI) */ | |
81 #endif | |
82 | |
83 /* Costs for the non-parametrized capabilities */ | |
84 int cc_up; /* cost for up */ | |
85 int cc_down; /* etc. */ | |
86 int cc_left; | |
87 int cc_right; | |
88 int cc_home; | |
89 int cc_cr; | |
90 int cc_ll; | |
91 int cc_tab; | |
92 int cc_backtab; | |
93 /* These are temporary, until the code is installed to use the | |
94 struct parmcap fields above. */ | |
95 int cc_abs; | |
96 int cc_habs; | |
97 int cc_vabs; | |
98 }; | |
99 | |
100 extern char PC; /* Pad character */ | |
18659
b6ced5dad84b
(ospeed): Declare as short unless HAVE_TERMIOS_H and LINUX.
Richard M. Stallman <rms@gnu.org>
parents:
18473
diff
changeset
|
101 |
486 | 102 /* Shorthand */ |
103 #ifndef NoCMShortHand | |
53232
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
104 #define curY(tty) (tty)->Wcm->cm_curY |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
105 #define curX(tty) (tty)->Wcm->cm_curX |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
106 #define Up(tty) (tty)->Wcm->cm_up |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
107 #define Down(tty) (tty)->Wcm->cm_down |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
108 #define Left(tty) (tty)->Wcm->cm_left |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
109 #define Right(tty) (tty)->Wcm->cm_right |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
110 #define Tab(tty) (tty)->Wcm->cm_tab |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
111 #define BackTab(tty) (tty)->Wcm->cm_backtab |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
112 #define TabWidth(tty) (tty)->Wcm->cm_tabwidth |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
113 #define CR(tty) (tty)->Wcm->cm_cr |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
114 #define Home(tty) (tty)->Wcm->cm_home |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
115 #define LastLine(tty) (tty)->Wcm->cm_ll |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
116 #define AbsPosition(tty) (tty)->Wcm->cm_abs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
117 #define ColPosition(tty) (tty)->Wcm->cm_habs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
118 #define RowPosition(tty) (tty)->Wcm->cm_vabs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
119 #define MultiUp(tty) (tty)->Wcm->cm_multiup |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
120 #define MultiDown(tty) (tty)->Wcm->cm_multidown |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
121 #define MultiLeft(tty) (tty)->Wcm->cm_multileft |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
122 #define MultiRight(tty) (tty)->Wcm->cm_multiright |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
123 #define AutoWrap(tty) (tty)->Wcm->cm_autowrap |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
124 #define MagicWrap(tty) (tty)->Wcm->cm_magicwrap |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
125 #define UseTabs(tty) (tty)->Wcm->cm_usetabs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
126 #define FrameRows(tty) (tty)->Wcm->cm_rows |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
127 #define FrameCols(tty) (tty)->Wcm->cm_cols |
486 | 128 |
53232
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
129 #define UpCost(tty) (tty)->Wcm->cc_up |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
130 #define DownCost(tty) (tty)->Wcm->cc_down |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
131 #define LeftCost(tty) (tty)->Wcm->cc_left |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
132 #define RightCost(tty) (tty)->Wcm->cc_right |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
133 #define HomeCost(tty) (tty)->Wcm->cc_home |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
134 #define CRCost(tty) (tty)->Wcm->cc_cr |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
135 #define LastLineCost(tty) (tty)->Wcm->cc_ll |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
136 #define TabCost(tty) (tty)->Wcm->cc_tab |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
137 #define BackTabCost(tty) (tty)->Wcm->cc_backtab |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
138 #define AbsPositionCost(tty) (tty)->Wcm->cc_abs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
139 #define ColPositionCost(tty) (tty)->Wcm->cc_habs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
140 #define RowPositionCost(tty) (tty)->Wcm->cc_vabs |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
141 #define MultiUpCost(tty) (tty)->Wcm->cc_multiup |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
142 #define MultiDownCost(tty) (tty)->Wcm->cc_multidown |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
143 #define MultiLeftCost(tty) (tty)->Wcm->cc_multileft |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
144 #define MultiRightCost(tty) (tty)->Wcm->cc_multiright |
486 | 145 #endif |
146 | |
53232
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
147 #define cmat(tty,row,col) (curY(tty) = (row), curX(tty) = (col)) |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
148 #define cmplus(tty,n) \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
149 { \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
150 if ((curX (tty) += (n)) >= FrameCols (tty) && !MagicWrap (tty)) \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
151 { \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
152 if ((tty)->Wcm->cm_losewrap) losecursor (tty); \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
153 else if (AutoWrap (tty)) curX (tty) = 0, curY (tty)++; \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
154 else curX (tty)--; \ |
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
155 } \ |
486 | 156 } |
157 | |
53232
22aaf1e5fbe6
Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey <lorentey@elte.hu>
parents:
53226
diff
changeset
|
158 #define losecursor(tty) (curX(tty) = -1, curY(tty) = -1) |
486 | 159 |
160 extern int cost; | |
161 extern int evalcost (); | |
162 | |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
52401
diff
changeset
|
163 #define emacs_tputs(tty, str, affcnt, putc) (current_tty = (tty), tputs (str, affcnt, putc)) |
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
52401
diff
changeset
|
164 |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
53340
diff
changeset
|
165 extern struct tty_display_info *current_tty; |
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
53340
diff
changeset
|
166 extern void cmcheckmagic P_ ((struct tty_display_info *)); |
53226
dd3018b4785b
Implemented multiple tty support.
Karoly Lorentey <lorentey@elte.hu>
parents:
52401
diff
changeset
|
167 extern int cmputc P_ ((int)); |
82989
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
53340
diff
changeset
|
168 extern void cmcostinit P_ ((struct tty_display_info *)); |
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
53340
diff
changeset
|
169 extern void cmgoto P_ ((struct tty_display_info *, int, int)); |
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
53340
diff
changeset
|
170 extern void Wcm_clear P_ ((struct tty_display_info *)); |
f3845715a5f6
Separate frame-local, tty-dependent parameters from tty-local parameters.
Karoly Lorentey <lorentey@elte.hu>
parents:
53340
diff
changeset
|
171 extern int Wcm_init P_ ((struct tty_display_info *)); |
52401 | 172 |
173 /* arch-tag: acc1535a-7136-49d6-b22d-9bc85702251b | |
174 (do not change this comment) */ |