annotate src/gutter.c @ 404:2f8bb876ab1d r21-2-32

Import from CVS: tag r21-2-32
author cvs
date Mon, 13 Aug 2007 11:16:07 +0200
parents a86b2b5e0111
children b8cc9ab3f761
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1 /* Gutter implementation.
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
2 Copyright (C) 1999, 2000 Andy Piper.
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
3
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
4 This file is part of XEmacs.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
5
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
6 XEmacs is free software; you can redistribute it and/or modify it
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
7 under the terms of the GNU General Public License as published by the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
8 Free Software Foundation; either version 2, or (at your option) any
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
9 later version.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
10
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
14 for more details.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
15
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
17 along with XEmacs; see the file COPYING. If not, write to
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
19 Boston, MA 02111-1307, USA. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
20
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
21 /* Synched up with: Not in FSF. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
22
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
23 /* written by Andy Piper <andy@xemacs.org> with specifiers partially
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
24 ripped-off from toolbar.c */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
25
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
26 #include <config.h>
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
27 #include "lisp.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
28
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
29 #include "buffer.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
30 #include "frame.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
31 #include "device.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
32 #include "faces.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
33 #include "glyphs.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
34 #include "redisplay.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
35 #include "window.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
36 #include "gutter.h"
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
37
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
38 Lisp_Object Vgutter[4];
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
39 Lisp_Object Vgutter_size[4];
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
40 Lisp_Object Vgutter_visible_p[4];
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
41 Lisp_Object Vgutter_border_width[4];
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
42
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
43 Lisp_Object Vdefault_gutter, Vdefault_gutter_visible_p;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
44 Lisp_Object Vdefault_gutter_width, Vdefault_gutter_height;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
45 Lisp_Object Vdefault_gutter_border_width;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
46
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
47 Lisp_Object Vdefault_gutter_position;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
48
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
49 Lisp_Object Qgutter_size;
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
50 Lisp_Object Qgutter_visible;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
51 Lisp_Object Qdefault_gutter_position_changed_hook;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
52
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
53 #define SET_GUTTER_WAS_VISIBLE_FLAG(frame, pos, flag) \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
54 do { \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
55 switch (pos) \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
56 { \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
57 case TOP_GUTTER: \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
58 (frame)->top_gutter_was_visible = flag; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
59 break; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
60 case BOTTOM_GUTTER: \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
61 (frame)->bottom_gutter_was_visible = flag; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
62 break; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
63 case LEFT_GUTTER: \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
64 (frame)->left_gutter_was_visible = flag; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
65 break; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
66 case RIGHT_GUTTER: \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
67 (frame)->right_gutter_was_visible = flag; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
68 break; \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
69 default: \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
70 abort (); \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
71 } \
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
72 } while (0)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
73
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
74 static int gutter_was_visible (struct frame* frame, enum gutter_pos pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
75 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
76 switch (pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
77 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
78 case TOP_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
79 return frame->top_gutter_was_visible;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
80 case BOTTOM_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
81 return frame->bottom_gutter_was_visible;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
82 case LEFT_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
83 return frame->left_gutter_was_visible;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
84 case RIGHT_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
85 return frame->right_gutter_was_visible;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
86 default:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
87 abort ();
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
88 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
89 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
90
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
91 #if 0
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
92 static Lisp_Object
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
93 frame_topmost_window (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
94 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
95 Lisp_Object w = FRAME_ROOT_WINDOW (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
96
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
97 do {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
98 while (!NILP (XWINDOW (w)->vchild))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
99 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
100 w = XWINDOW (w)->vchild;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
101 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
102 } while (!NILP (XWINDOW (w)->hchild) && !NILP (w = XWINDOW (w)->hchild));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
103
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
104 return w;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
105 }
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
106 #endif
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
107
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
108 static Lisp_Object
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
109 frame_bottommost_window (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
110 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
111 Lisp_Object w = FRAME_ROOT_WINDOW (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
112
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
113 do {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
114 while (!NILP (XWINDOW (w)->vchild))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
115 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
116 w = XWINDOW (w)->vchild;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
117 while (!NILP (XWINDOW (w)->next))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
118 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
119 w = XWINDOW (w)->next;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
120 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
121 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
122 } while (!NILP (XWINDOW (w)->hchild) && !NILP (w = XWINDOW (w)->hchild));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
123
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
124 return w;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
125 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
126
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
127 #if 0
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
128 static Lisp_Object
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
129 frame_leftmost_window (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
130 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
131 Lisp_Object w = FRAME_ROOT_WINDOW (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
132
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
133 do {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
134 while (!NILP (XWINDOW (w)->hchild))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
135 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
136 w = XWINDOW (w)->hchild;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
137 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
138 } while (!NILP (XWINDOW (w)->vchild) && !NILP (w = XWINDOW (w)->vchild));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
139
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
140 return w;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
141 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
142
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
143 static Lisp_Object
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
144 frame_rightmost_window (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
145 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
146 Lisp_Object w = FRAME_ROOT_WINDOW (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
147
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
148 do {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
149 while (!NILP (XWINDOW (w)->hchild))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
150 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
151 w = XWINDOW (w)->hchild;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
152 while (!NILP (XWINDOW (w)->next))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
153 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
154 w = XWINDOW (w)->next;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
155 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
156 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
157 } while (!NILP (XWINDOW (w)->vchild) && !NILP (w = XWINDOW (w)->vchild));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
158 return w;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
159 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
160 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
161
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
162 /* calculate the coordinates of a gutter for the current frame and
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
163 selected window. we have to be careful in calculating this as we
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
164 need to use *two* windows, the currently selected window will give
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
165 us the actual height, width and contents of the gutter, but if we
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
166 use this for calculating the gutter positions we run into trouble
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
167 if it is not the window nearest the gutter. Instead we predetermine
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
168 the nearest window and then use that.*/
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
169 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
170 get_gutter_coords (struct frame *f, enum gutter_pos pos, int *x, int *y,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
171 int *width, int *height)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
172 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
173 struct window
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
174 * bot = XWINDOW (frame_bottommost_window (f));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
175 /* The top and bottom gutters take precedence over the left and
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
176 right. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
177 switch (pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
178 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
179 case TOP_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
180 *x = FRAME_LEFT_BORDER_END (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
181 *y = FRAME_TOP_BORDER_END (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
182 *width = FRAME_RIGHT_BORDER_START (f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
183 - FRAME_LEFT_BORDER_END (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
184 *height = FRAME_TOP_GUTTER_BOUNDS (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
185 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
186
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
187 case BOTTOM_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
188 *x = FRAME_LEFT_BORDER_END (f);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
189 *y = WINDOW_BOTTOM (bot);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
190 *width = FRAME_RIGHT_BORDER_START (f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
191 - FRAME_LEFT_BORDER_END (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
192 *height = FRAME_BOTTOM_GUTTER_BOUNDS (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
193 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
194
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
195 case LEFT_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
196 *x = FRAME_LEFT_BORDER_END (f);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
197 *y = FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
198 *width = FRAME_LEFT_GUTTER_BOUNDS (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
199 *height = WINDOW_BOTTOM (bot)
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
200 - (FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f));
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
201 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
202
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
203 case RIGHT_GUTTER:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
204 *x = FRAME_RIGHT_BORDER_START (f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
205 - FRAME_RIGHT_GUTTER_BOUNDS (f);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
206 *y = FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
207 *width = FRAME_RIGHT_GUTTER_BOUNDS (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
208 *height = WINDOW_BOTTOM (bot)
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
209 - (FRAME_TOP_BORDER_END (f) + FRAME_TOP_GUTTER_BOUNDS (f));
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
210 break;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
211
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
212 default:
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
213 abort ();
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
214 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
215 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
216
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
217 /* Convert the gutter specifier into something we can actually
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
218 display. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
219 static Lisp_Object construct_window_gutter_spec (struct window* w,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
220 enum gutter_pos pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
221 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
222 Lisp_Object rest, *args;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
223 int nargs = 0;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
224 Lisp_Object gutter = RAW_WINDOW_GUTTER (w, pos);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
225
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
226 if (STRINGP (gutter) || NILP (gutter))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
227 return gutter;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
228
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
229 GET_LIST_LENGTH (gutter, nargs);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
230 args = alloca_array (Lisp_Object, nargs >> 1);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
231 nargs = 0;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
232
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
233 for (rest = gutter; !NILP (rest); rest = XCDR (XCDR (rest)))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
234 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
235 /* We only put things in the real gutter that are declared to be
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
236 visible. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
237 if (!CONSP (WINDOW_GUTTER_VISIBLE (w, pos))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
238 ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
239 !NILP (Fmemq (XCAR (rest), WINDOW_GUTTER_VISIBLE (w, pos))))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
240 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
241 args [nargs++] = XCAR (XCDR (rest));
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
242 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
243 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
244
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
245 return Fconcat (nargs, args);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
246 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
247
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
248 static void
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
249 output_gutter (struct frame *f, enum gutter_pos pos, int force)
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
250 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
251 Lisp_Object frame;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
252 Lisp_Object window = FRAME_LAST_NONMINIBUF_WINDOW (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
253 struct device *d = XDEVICE (f->device);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
254 struct window* w = XWINDOW (window);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
255 int x, y, width, height, ypos;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
256 int line, border_width;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
257 face_index findex;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
258 display_line_dynarr* ddla, *cdla;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
259 struct display_line *dl;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
260 int cdla_len;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
261
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
262 if (!WINDOW_LIVE_P (w))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
263 return;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
264
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
265 border_width = FRAME_GUTTER_BORDER_WIDTH (f, pos);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
266 findex = get_builtin_face_cache_index (w, Vwidget_face);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
267
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
268 if (!f->current_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
269 f->current_display_lines[pos] = Dynarr_new (display_line);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
270 if (!f->desired_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
271 f->desired_display_lines[pos] = Dynarr_new (display_line);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
272
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
273 ddla = f->desired_display_lines[pos];
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
274 cdla = f->current_display_lines[pos];
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
275 cdla_len = Dynarr_length (cdla);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
276
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
277 XSETFRAME (frame, f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
278
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
279 get_gutter_coords (f, pos, &x, &y, &width, &height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
280 /* generate some display lines */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
281 generate_displayable_area (w, WINDOW_GUTTER (w, pos),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
282 x + border_width, y + border_width,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
283 width - 2 * border_width,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
284 height - 2 * border_width, ddla, 0, findex);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
285
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
286 /* We only output the gutter if we think something of significance
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
287 has changed. This is, for example, because redisplay can cause
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
288 new face cache elements to get added causing compare_runes to
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
289 fail because the findex for a particular face has changed. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
290 if (force || f->faces_changed || f->frame_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
291 f->gutter_changed || f->glyphs_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
292 f->size_changed || f->subwindows_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
293 w->windows_changed || f->windows_structure_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
294 cdla_len != Dynarr_length (ddla) ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
295 (f->extents_changed && w->gutter_extent_modiff[pos]))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
296 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
297 #ifdef DEBUG_GUTTERS
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
298 printf ("gutter redisplay triggered by %s\n", force ? "force" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
299 f->faces_changed ? "f->faces_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
300 f->frame_changed ? "f->frame_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
301 f->gutter_changed ? "f->gutter_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
302 f->glyphs_changed ? "f->glyphs_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
303 f->size_changed ? "f->size_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
304 f->subwindows_changed ? "f->subwindows_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
305 w->windows_changed ? "w->windows_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
306 f->windows_structure_changed ? "f->windows_structure_changed" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
307 cdla_len != Dynarr_length (ddla) ? "different display structures" :
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
308 f->extents_changed && w->gutter_extent_modiff[pos] ?
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
309 "f->extents_changed && w->gutter_extent_modiff[pos]" : "<null>");
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
310 #endif
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
311 /* Output each line. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
312 for (line = 0; line < Dynarr_length (ddla); line++)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
313 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
314 output_display_line (w, cdla, ddla, line, -1, -1);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
315 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
316
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
317 /* If the number of display lines has shrunk, adjust. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
318 if (cdla_len > Dynarr_length (ddla))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
319 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
320 Dynarr_length (cdla) = Dynarr_length (ddla);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
321 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
322
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
323 /* grab coordinates of last line and blank after it. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
324 dl = Dynarr_atp (ddla, Dynarr_length (ddla) - 1);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
325 ypos = dl->ypos + dl->descent - dl->clip;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
326 redisplay_clear_region (window, findex, x + border_width , ypos,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
327 width - 2 * border_width, height - (ypos - y) - border_width);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
328 /* bevel the gutter area if so desired */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
329 if (border_width != 0)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
330 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
331 MAYBE_DEVMETH (d, bevel_area,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
332 (w, findex, x, y, width, height, border_width,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
333 EDGE_ALL, EDGE_BEVEL_OUT));
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
334 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
335 }
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
336 else
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
337 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
338 /* Nothing of significance happened so sync the display line
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
339 structs. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
340 for (line = 0; line < Dynarr_length (ddla); line++)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
341 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
342 sync_display_line_structs (w, line, 1, cdla, ddla);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
343 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
344 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
345
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
346 w->gutter_extent_modiff [pos] = 0;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
347 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
348
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
349 /* Sizing gutters is a pain so we try and help the user by detemining
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
350 what height will accommodate all lines. This is useless on left and
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
351 right gutters as we always have a maximal number of lines. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
352 static Lisp_Object
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
353 calculate_gutter_size (struct window *w, enum gutter_pos pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
354 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
355 struct frame* f = XFRAME (WINDOW_FRAME (w));
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
356 int ypos, count;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
357 display_line_dynarr* ddla;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
358 struct display_line *dl;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
359
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
360 /* we cannot autodetect gutter sizes for the left and right as there
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
361 is no reasonable metric to use */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
362 assert (pos == TOP_GUTTER || pos == BOTTOM_GUTTER);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
363 /* degenerate case */
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
364 if (NILP (RAW_WINDOW_GUTTER (w, pos))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
365 ||
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
366 !FRAME_VISIBLE_P (f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
367 ||
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
368 NILP (w->buffer))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
369 return Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
370
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
371 /* Redisplay code that we use relies on GC not happening. Make it
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
372 so. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
373 count = specpdl_depth ();
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
374 record_unwind_protect (restore_gc_inhibit,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
375 make_int (gc_currently_forbidden));
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
376 gc_currently_forbidden = 1;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
377
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
378 ddla = Dynarr_new (display_line);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
379 /* generate some display lines */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
380 generate_displayable_area (w, WINDOW_GUTTER (w, pos),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
381 FRAME_LEFT_BORDER_END (f),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
382 0,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
383 FRAME_RIGHT_BORDER_START (f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
384 - FRAME_LEFT_BORDER_END (f),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
385 200,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
386 ddla, 0, 0);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
387
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
388 /* Let GC happen again. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
389 unbind_to (count, Qnil);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
390
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
391 /* grab coordinates of last line */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
392 if (Dynarr_length (ddla))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
393 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
394 dl = Dynarr_atp (ddla, Dynarr_length (ddla) - 1);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
395 ypos = dl->ypos + dl->descent - dl->clip;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
396 free_display_lines (ddla);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
397 return make_int (ypos);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
398 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
399 else
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
400 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
401 free_display_lines (ddla);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
402 return Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
403 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
404 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
405
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
406 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
407 clear_gutter (struct frame *f, enum gutter_pos pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
408 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
409 int x, y, width, height;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
410 Lisp_Object window = FRAME_LAST_NONMINIBUF_WINDOW (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
411 face_index findex = get_builtin_face_cache_index (XWINDOW (window),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
412 Vwidget_face);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
413 get_gutter_coords (f, pos, &x, &y, &width, &height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
414
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
415 SET_GUTTER_WAS_VISIBLE_FLAG (f, pos, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
416
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
417 redisplay_clear_region (window, findex, x, y, width, height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
418 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
419
400
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
420 /* #### I don't currently believe that redisplay needs to mark the
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
421 glyphs in its structures since these will always be referenced from
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
422 somewhere else. However, I'm not sure enough to stake my life on it
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
423 at this point, so we do the safe thing. */
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
424
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
425 /* See the comment in image_instantiate_cache_result as to why marking
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
426 the glyph will also mark the image_instance. */
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
427 void
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
428 mark_gutters (struct frame* f)
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
429 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
430 enum gutter_pos pos;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
431 GUTTER_POS_LOOP (pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
432 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
433 if (f->current_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
434 mark_redisplay_structs (f->current_display_lines[pos]);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
435 /* #### Do we really need to mark the desired lines? */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
436 if (f->desired_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
437 mark_redisplay_structs (f->desired_display_lines[pos]);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
438 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
439 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
440
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
441 /* This is called by extent_changed_for_redisplay, so that redisplay
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
442 knows exactly what extents have changed. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
443 void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
444 gutter_extent_signal_changed_region_maybe (Lisp_Object obj,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
445 Bufpos start, Bufpos end)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
446 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
447 /* #### Start and end are currently ignored but could be used by a
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
448 more optimal gutter redisplay. We currently loop over all frames
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
449 here, this could be optimized. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
450 Lisp_Object frmcons, devcons, concons;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
451
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
452 FRAME_LOOP_NO_BREAK (frmcons, devcons, concons)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
453 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
454 struct frame *f = XFRAME (XCAR (frmcons));
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
455 enum gutter_pos pos;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
456 Lisp_Object window = FRAME_LAST_NONMINIBUF_WINDOW (f);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
457 struct window* w = XWINDOW (window);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
458
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
459 GUTTER_POS_LOOP (pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
460 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
461 if (EQ (WINDOW_GUTTER (w, pos), obj))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
462 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
463 w->gutter_extent_modiff[pos]++;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
464 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
465 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
466 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
467 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
468
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
469 /* We have to change the gutter geometry separately to the gutter
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
470 update since it needs to occur outside of redisplay proper. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
471 void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
472 update_frame_gutter_geometry (struct frame *f)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
473 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
474 if (f->gutter_changed || f->windows_structure_changed)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
475 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
476 enum gutter_pos pos;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
477
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
478 /* If the gutter geometry has changed then re-layout the
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
479 frame. If we are in display there is almost no point in doing
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
480 anything else since the frame size changes will be delayed
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
481 until we are out of redisplay proper. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
482 GUTTER_POS_LOOP (pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
483 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
484 if (FRAME_GUTTER_BOUNDS (f, pos) != f->current_gutter_bounds[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
485 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
486 int width, height;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
487 pixel_to_char_size (f, FRAME_PIXWIDTH (f), FRAME_PIXHEIGHT (f),
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
488 &width, &height);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
489 change_frame_size (f, height, width, 0);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
490 break;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
491 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
492 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
493
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
494 GUTTER_POS_LOOP (pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
495 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
496 /* Mark sizes as up-to-date. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
497 f->current_gutter_bounds[pos] = FRAME_GUTTER_BOUNDS (f, pos);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
498 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
499 }
400
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
500 }
a86b2b5e0111 Import from CVS: tag r21-2-30
cvs
parents: 398
diff changeset
501
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
502 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
503 update_frame_gutters (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
504 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
505 if (f->faces_changed || f->frame_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
506 f->gutter_changed || f->glyphs_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
507 f->size_changed || f->subwindows_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
508 f->windows_changed || f->windows_structure_changed ||
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
509 f->extents_changed)
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
510 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
511 enum gutter_pos pos;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
512
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
513 /* We don't actually care about these when outputting the gutter
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
514 so locally disable them. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
515 int local_clip_changed = f->clip_changed;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
516 int local_buffers_changed = f->buffers_changed;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
517 f->clip_changed = 0;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
518 f->buffers_changed = 0;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
519
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
520 /* and output */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
521 GUTTER_POS_LOOP (pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
522 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
523 if (FRAME_GUTTER_VISIBLE (f, pos))
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
524 output_gutter (f, pos, 0);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
525
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
526 else if (gutter_was_visible (f, pos))
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
527 clear_gutter (f, pos);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
528 }
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
529
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
530 f->clip_changed = local_clip_changed;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
531 f->buffers_changed = local_buffers_changed;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
532 f->gutter_changed = 0;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
533 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
534 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
535
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
536 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
537 reset_gutter_display_lines (struct frame* f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
538 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
539 enum gutter_pos pos;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
540 GUTTER_POS_LOOP (pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
541 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
542 if (f->current_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
543 Dynarr_reset (f->current_display_lines[pos]);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
544 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
545 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
546
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
547 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
548 redraw_exposed_gutter (struct frame *f, enum gutter_pos pos, int x, int y,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
549 int width, int height)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
550 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
551 int g_x, g_y, g_width, g_height;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
552
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
553 get_gutter_coords (f, pos, &g_x, &g_y, &g_width, &g_height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
554
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
555 if (((y + height) < g_y) || (y > (g_y + g_height)) || !height || !width || !g_height || !g_width)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
556 return;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
557 if (((x + width) < g_x) || (x > (g_x + g_width)))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
558 return;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
559
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
560 /* #### optimize this - redrawing the whole gutter for every expose
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
561 is very expensive. We reset the current display lines because if
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
562 they're being exposed they are no longer current. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
563 reset_gutter_display_lines (f);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
564
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
565 /* Even if none of the gutter is in the area, the blank region at
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
566 the very least must be because the first thing we did is verify
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
567 that some portion of the gutter is in the exposed region. */
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
568 output_gutter (f, pos, 1);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
569 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
570
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
571 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
572 redraw_exposed_gutters (struct frame *f, int x, int y, int width,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
573 int height)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
574 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
575 enum gutter_pos pos;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
576 GUTTER_POS_LOOP (pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
577 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
578 if (FRAME_GUTTER_VISIBLE (f, pos))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
579 redraw_exposed_gutter (f, pos, x, y, width, height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
580 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
581 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
582
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
583 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
584 free_frame_gutters (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
585 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
586 enum gutter_pos pos;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
587 GUTTER_POS_LOOP (pos)
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
588 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
589 if (f->current_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
590 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
591 free_display_lines (f->current_display_lines[pos]);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
592 f->current_display_lines[pos] = 0;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
593 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
594 if (f->desired_display_lines[pos])
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
595 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
596 free_display_lines (f->desired_display_lines[pos]);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
597 f->desired_display_lines[pos] = 0;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
598 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
599 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
600 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
601
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
602 static enum gutter_pos
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
603 decode_gutter_position (Lisp_Object position)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
604 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
605 if (EQ (position, Qtop)) return TOP_GUTTER;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
606 if (EQ (position, Qbottom)) return BOTTOM_GUTTER;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
607 if (EQ (position, Qleft)) return LEFT_GUTTER;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
608 if (EQ (position, Qright)) return RIGHT_GUTTER;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
609 signal_simple_error ("Invalid gutter position", position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
610
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
611 return TOP_GUTTER; /* not reached */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
612 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
613
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
614 DEFUN ("set-default-gutter-position", Fset_default_gutter_position, 1, 1, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
615 Set the position that the `default-gutter' will be displayed at.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
616 Valid positions are 'top, 'bottom, 'left and 'right.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
617 See `default-gutter-position'.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
618 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
619 (position))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
620 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
621 enum gutter_pos cur = decode_gutter_position (Vdefault_gutter_position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
622 enum gutter_pos new = decode_gutter_position (position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
623
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
624 if (cur != new)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
625 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
626 /* The following calls will automatically cause the dirty
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
627 flags to be set; we delay frame size changes to avoid
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
628 lots of frame flickering. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
629 /* #### I think this should be GC protected. -sb */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
630 hold_frame_size_changes ();
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
631 set_specifier_fallback (Vgutter[cur], list1 (Fcons (Qnil, Qnil)));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
632 set_specifier_fallback (Vgutter[new], Vdefault_gutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
633 set_specifier_fallback (Vgutter_size[cur], list1 (Fcons (Qnil, Qzero)));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
634 set_specifier_fallback (Vgutter_size[new],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
635 new == TOP_GUTTER || new == BOTTOM_GUTTER
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
636 ? Vdefault_gutter_height
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
637 : Vdefault_gutter_width);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
638 set_specifier_fallback (Vgutter_border_width[cur],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
639 list1 (Fcons (Qnil, Qzero)));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
640 set_specifier_fallback (Vgutter_border_width[new],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
641 Vdefault_gutter_border_width);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
642 /* We don't realy want the left and right gutters to default to
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
643 visible. */
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
644 set_specifier_fallback (Vgutter_visible_p[cur],
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
645 cur == TOP_GUTTER || cur == BOTTOM_GUTTER ?
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
646 list1 (Fcons (Qnil, Qt))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
647 : list1 (Fcons (Qnil, Qnil)));
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
648 set_specifier_fallback (Vgutter_visible_p[new],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
649 Vdefault_gutter_visible_p);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
650
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
651 Vdefault_gutter_position = position;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
652 unhold_frame_size_changes ();
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
653 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
654
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
655 run_hook (Qdefault_gutter_position_changed_hook);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
656
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
657 return position;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
658 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
659
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
660 DEFUN ("default-gutter-position", Fdefault_gutter_position, 0, 0, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
661 Return the position that the `default-gutter' will be displayed at.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
662 The `default-gutter' will only be displayed here if the corresponding
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
663 position-specific gutter specifier does not provide a value.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
664 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
665 ())
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
666 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
667 return Vdefault_gutter_position;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
668 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
669
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
670 DEFUN ("gutter-pixel-width", Fgutter_pixel_width, 0, 2, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
671 Return the pixel width of the gutter at POS in LOCALE.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
672 POS defaults to the default gutter position. LOCALE defaults to
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
673 the current window.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
674 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
675 (pos, locale))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
676 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
677 int x, y, width, height;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
678 enum gutter_pos p = TOP_GUTTER;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
679 struct frame *f = decode_frame (FW_FRAME (locale));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
680
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
681 if (NILP (pos))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
682 pos = Vdefault_gutter_position;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
683 p = decode_gutter_position (pos);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
684
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
685 get_gutter_coords (f, p, &x, &y, &width, &height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
686 width -= (FRAME_GUTTER_BORDER_WIDTH (f, p) * 2);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
687
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
688 return make_int (width);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
689 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
690
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
691 DEFUN ("gutter-pixel-height", Fgutter_pixel_height, 0, 2, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
692 Return the pixel height of the gutter at POS in LOCALE.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
693 POS defaults to the default gutter position. LOCALE defaults to
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
694 the current window.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
695 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
696 (pos, locale))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
697 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
698 int x, y, width, height;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
699 enum gutter_pos p = TOP_GUTTER;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
700 struct frame *f = decode_frame (FW_FRAME (locale));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
701
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
702 if (NILP (pos))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
703 pos = Vdefault_gutter_position;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
704 p = decode_gutter_position (pos);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
705
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
706 get_gutter_coords (f, p, &x, &y, &width, &height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
707 height -= (FRAME_GUTTER_BORDER_WIDTH (f, p) * 2);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
708
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
709 return make_int (height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
710 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
711
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
712 DEFINE_SPECIFIER_TYPE (gutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
713
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
714 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
715 gutter_after_change (Lisp_Object specifier, Lisp_Object locale)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
716 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
717 MARK_GUTTER_CHANGED;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
718 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
719
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
720 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
721 gutter_validate (Lisp_Object instantiator)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
722 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
723 if (NILP (instantiator))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
724 return;
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
725
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
726 /* Must be a string or a plist. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
727 if (!STRINGP (instantiator) && NILP (Fvalid_plist_p (instantiator)))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
728 signal_simple_error ("Gutter spec must be string, plist or nil", instantiator);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
729
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
730 if (!STRINGP (instantiator))
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
731 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
732 Lisp_Object rest;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
733
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
734 for (rest = instantiator; !NILP (rest); rest = XCDR (XCDR (rest)))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
735 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
736 if (!SYMBOLP (XCAR (rest))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
737 || !STRINGP (XCAR (XCDR (rest))))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
738 signal_simple_error ("Gutter plist spec must contain strings", instantiator);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
739 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
740 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
741 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
742
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
743 DEFUN ("gutter-specifier-p", Fgutter_specifier_p, 1, 1, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
744 Return non-nil if OBJECT is a gutter specifier.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
745 Gutter specifiers are used to specify the format of a gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
746 The values of the variables `default-gutter', `top-gutter',
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
747 `left-gutter', `right-gutter', and `bottom-gutter' are always
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
748 gutter specifiers.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
749
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
750 Valid gutter instantiators are called "gutter descriptors" and are
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
751 either strings or property-lists of strings. See `default-gutter' for
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
752 a description of the exact format.
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
753 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
754 (object))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
755 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
756 return GUTTER_SPECIFIERP (object) ? Qt : Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
757 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
758
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
759
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
760 /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
761 Helper for invalidating the real specifier when default
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
762 specifier caching changes
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
763 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
764 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
765 recompute_overlaying_specifier (Lisp_Object real_one[4])
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
766 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
767 enum gutter_pos pos = decode_gutter_position (Vdefault_gutter_position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
768 Fset_specifier_dirty_flag (real_one[pos]);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
769 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
770
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
771 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
772 gutter_specs_changed (Lisp_Object specifier, struct window *w,
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
773 Lisp_Object oldval, enum gutter_pos pos)
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
774 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
775 w->real_gutter[pos] = construct_window_gutter_spec (w, pos);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
776 w->real_gutter_size[pos] = w->gutter_size[pos];
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
777
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
778 if (EQ (w->real_gutter_size[pos], Qautodetect)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
779 && !NILP (w->gutter_visible_p[pos]))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
780 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
781 w->real_gutter_size [pos] = calculate_gutter_size (w, pos);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
782 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
783 MARK_GUTTER_CHANGED;
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
784 MARK_MODELINE_CHANGED;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
785 MARK_WINDOWS_CHANGED (w);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
786 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
787
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
788 /* We define all of these so we can access which actual gutter changed. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
789 static void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
790 top_gutter_specs_changed (Lisp_Object specifier, struct window *w,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
791 Lisp_Object oldval)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
792 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
793 gutter_specs_changed (specifier, w, oldval, TOP_GUTTER);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
794 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
795
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
796 static void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
797 bottom_gutter_specs_changed (Lisp_Object specifier, struct window *w,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
798 Lisp_Object oldval)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
799 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
800 gutter_specs_changed (specifier, w, oldval, BOTTOM_GUTTER);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
801 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
802
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
803 static void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
804 left_gutter_specs_changed (Lisp_Object specifier, struct window *w,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
805 Lisp_Object oldval)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
806 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
807 gutter_specs_changed (specifier, w, oldval, LEFT_GUTTER);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
808 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
809
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
810 static void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
811 right_gutter_specs_changed (Lisp_Object specifier, struct window *w,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
812 Lisp_Object oldval)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
813 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
814 gutter_specs_changed (specifier, w, oldval, RIGHT_GUTTER);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
815 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
816
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
817 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
818 default_gutter_specs_changed (Lisp_Object specifier, struct window *w,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
819 Lisp_Object oldval)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
820 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
821 recompute_overlaying_specifier (Vgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
822 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
823
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
824 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
825 gutter_geometry_changed_in_window (Lisp_Object specifier, struct window *w,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
826 Lisp_Object oldval)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
827 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
828 enum gutter_pos pos;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
829 GUTTER_POS_LOOP (pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
830 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
831 w->real_gutter_size[pos] = w->gutter_size[pos];
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
832 if (EQ (w->real_gutter_size[pos], Qautodetect)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
833 && !NILP (w->gutter_visible_p[pos]))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
834 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
835 w->real_gutter_size [pos] = calculate_gutter_size (w, pos);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
836 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
837 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
838
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
839 MARK_GUTTER_CHANGED;
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
840 MARK_MODELINE_CHANGED;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
841 MARK_WINDOWS_CHANGED (w);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
842 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
843
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
844 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
845 default_gutter_size_changed_in_window (Lisp_Object specifier, struct window *w,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
846 Lisp_Object oldval)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
847 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
848 recompute_overlaying_specifier (Vgutter_size);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
849 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
850
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
851 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
852 default_gutter_border_width_changed_in_window (Lisp_Object specifier,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
853 struct window *w,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
854 Lisp_Object oldval)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
855 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
856 recompute_overlaying_specifier (Vgutter_border_width);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
857 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
858
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
859 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
860 default_gutter_visible_p_changed_in_window (Lisp_Object specifier,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
861 struct window *w,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
862 Lisp_Object oldval)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
863 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
864 recompute_overlaying_specifier (Vgutter_visible_p);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
865 /* Need to reconstruct the gutter specifier as it is affected by the
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
866 visibility. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
867 recompute_overlaying_specifier (Vgutter);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
868 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
869
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
870
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
871 DECLARE_SPECIFIER_TYPE (gutter_size);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
872 #define GUTTER_SIZE_SPECIFIERP(x) SPECIFIER_TYPEP (x, gutter_size)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
873 DEFINE_SPECIFIER_TYPE (gutter_size);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
874
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
875 static void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
876 gutter_size_validate (Lisp_Object instantiator)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
877 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
878 if (NILP (instantiator))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
879 return;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
880
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
881 if (!INTP (instantiator) && !EQ (instantiator, Qautodetect))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
882 signal_simple_error ("Gutter size must be an integer or 'autodetect", instantiator);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
883 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
884
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
885 DEFUN ("gutter-size-specifier-p", Fgutter_size_specifier_p, 1, 1, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
886 Return non-nil if OBJECT is a gutter-size specifier.
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
887
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
888 Gutter-size specifiers are used to specify the size of a gutter. The
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
889 values of the variables `default-gutter-size', `top-gutter-size',
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
890 `left-gutter-size', `right-gutter-size', and `bottom-gutter-size' are
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
891 always gutter-size specifiers.
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
892
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
893 Valid gutter-size instantiators are either integers or the special
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
894 symbol 'autodetect. If a gutter-size is set to 'autodetect them the
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
895 size of the gutter will be adjusted to just accomodate the gutters
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
896 contents. 'autodetect only works for top and bottom gutters.
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
897 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
898 (object))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
899 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
900 return GUTTER_SIZE_SPECIFIERP (object) ? Qt : Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
901 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
902
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
903 DECLARE_SPECIFIER_TYPE (gutter_visible);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
904 #define GUTTER_VISIBLE_SPECIFIERP(x) SPECIFIER_TYPEP (x, gutter_visible)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
905 DEFINE_SPECIFIER_TYPE (gutter_visible);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
906
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
907 static void
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
908 gutter_visible_validate (Lisp_Object instantiator)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
909 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
910 if (NILP (instantiator))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
911 return;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
912
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
913 if (!NILP (instantiator) && !EQ (instantiator, Qt) && !CONSP (instantiator))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
914 signal_simple_error ("Gutter visibility must be a boolean or list of symbols",
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
915 instantiator);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
916
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
917 if (CONSP (instantiator))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
918 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
919 Lisp_Object rest;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
920
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
921 EXTERNAL_LIST_LOOP (rest, instantiator)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
922 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
923 if (!SYMBOLP (XCAR (rest)))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
924 signal_simple_error ("Gutter visibility must be a boolean or list of symbols",
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
925 instantiator);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
926 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
927 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
928 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
929
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
930 DEFUN ("gutter-visible-specifier-p", Fgutter_visible_specifier_p, 1, 1, 0, /*
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
931 Return non-nil if OBJECT is a gutter-visible specifier.
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
932
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
933 Gutter-visible specifiers are used to specify the visibility of a
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
934 gutter. The values of the variables `default-gutter-visible-p',
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
935 `top-gutter-visible-p', `left-gutter-visible-p',
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
936 `right-gutter-visible-p', and `bottom-gutter-visible-p' are always
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
937 gutter-visible specifiers.
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
938
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
939 Valid gutter-visible instantiators are t, nil or a list of symbols.
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
940 If a gutter-visible instantiator is set to a list of symbols, and the
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
941 correspondong gutter specification is a property-list strings, then
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
942 elements of the gutter specification will only be visible if the
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
943 corresponding symbol occurs in the gutter-visible instantiator.
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
944 */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
945 (object))
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
946 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
947 return GUTTER_VISIBLE_SPECIFIERP (object) ? Qt : Qnil;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
948 }
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
949
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
950 DEFUN ("redisplay-gutter-area", Fredisplay_gutter_area, 0, 0, 0, /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
951 Ensure that all gutters are correctly showing their gutter specifier.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
952 */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
953 ())
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
954 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
955 Lisp_Object devcons, concons;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
956
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
957 DEVICE_LOOP_NO_BREAK (devcons, concons)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
958 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
959 struct device *d = XDEVICE (XCAR (devcons));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
960 Lisp_Object frmcons;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
961
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
962 DEVICE_FRAME_LOOP (frmcons, d)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
963 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
964 struct frame *f = XFRAME (XCAR (frmcons));
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
965
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
966 /* Sequence is quite important here. We not only want to
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
967 redisplay the gutter area but we also want to flush any
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
968 frame size changes out so that the gutter redisplay happens
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
969 in a kosha environment.
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
970
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
971 This is not only so that things look right but so that
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
972 glyph redisplay optimization kicks in, by default display
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
973 lines will be completely re-output if
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
974 f->windows_structure_changed is 1, and this is true if
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
975 frame size changes haven't been flushed out. Once frame
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
976 size changes have been flushed out we then need to
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
977 redisplay the frame in order to flush out pending window
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
978 size changes. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
979 update_frame_gutter_geometry (f);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
980
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
981 if (f->windows_structure_changed)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
982 redisplay_frame (f, 1);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
983 else if (FRAME_REPAINT_P (f))
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
984 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
985 /* We have to be "in display" when we output the gutter
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
986 - make it so. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
987 hold_frame_size_changes ();
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
988 update_frame_gutters (f);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
989 unhold_one_frame_size_changes (f);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
990 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
991 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
992 /* We now call the output_end routine for tty frames. We delay
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
993 doing so in order to avoid cursor flicker. So much for 100%
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
994 encapsulation. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
995 if (DEVICE_TTY_P (d))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
996 DEVMETH (d, output_end, (d));
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
997
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
998 d->gutter_changed = 0;
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
999 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1000
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1001 /* This is so that further changes to the gutters will trigger redisplay. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1002 gutter_changed_set = 0;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1003 gutter_changed = 0;
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1004
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1005 return Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1006 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1007
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1008 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1009 init_frame_gutters (struct frame *f)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1010 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1011 enum gutter_pos pos;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1012 struct window* w = XWINDOW (FRAME_LAST_NONMINIBUF_WINDOW (f));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1013 /* We are here as far in frame creation so cached specifiers are
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1014 already recomputed, and possibly modified by resource
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1015 initialization. We need to recalculate autodetected gutters. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1016 GUTTER_POS_LOOP (pos)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1017 {
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1018 w->real_gutter[pos] = construct_window_gutter_spec (w, pos);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1019 w->real_gutter_size[pos] = w->gutter_size[pos];
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1020 if (EQ (w->gutter_size[pos], Qautodetect)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1021 && !NILP (w->gutter_visible_p[pos]))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1022 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1023 w->real_gutter_size [pos] = calculate_gutter_size (w, pos);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1024 MARK_GUTTER_CHANGED;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1025 MARK_WINDOWS_CHANGED (w);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1026 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1027 }
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1028
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1029 /* Keep a record of the current sizes of things. */
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1030 GUTTER_POS_LOOP (pos)
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1031 {
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1032 f->current_gutter_bounds[pos] = FRAME_GUTTER_BOUNDS (f, pos);
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1033 }
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1034 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1035
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1036 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1037 syms_of_gutter (void)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1038 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1039 DEFSUBR (Fgutter_specifier_p);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1040 DEFSUBR (Fgutter_size_specifier_p);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1041 DEFSUBR (Fgutter_visible_specifier_p);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1042 DEFSUBR (Fset_default_gutter_position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1043 DEFSUBR (Fdefault_gutter_position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1044 DEFSUBR (Fgutter_pixel_height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1045 DEFSUBR (Fgutter_pixel_width);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1046 DEFSUBR (Fredisplay_gutter_area);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1047
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1048 defsymbol (&Qgutter_size, "gutter-size");
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1049 defsymbol (&Qgutter_visible, "gutter-visible");
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1050 defsymbol (&Qdefault_gutter_position_changed_hook,
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1051 "default-gutter-position-changed");
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1052 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1053
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1054 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1055 vars_of_gutter (void)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1056 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1057 staticpro (&Vdefault_gutter_position);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1058 Vdefault_gutter_position = Qtop;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1059
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1060 Fprovide (Qgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1061 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1062
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1063 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1064 specifier_type_create_gutter (void)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1065 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1066 INITIALIZE_SPECIFIER_TYPE (gutter, "gutter", "gutter-specifier-p");
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1067 SPECIFIER_HAS_METHOD (gutter, validate);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1068 SPECIFIER_HAS_METHOD (gutter, after_change);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1069
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1070 INITIALIZE_SPECIFIER_TYPE (gutter_size, "gutter-size", "gutter-size-specifier-p");
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1071 SPECIFIER_HAS_METHOD (gutter_size, validate);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1072
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1073 INITIALIZE_SPECIFIER_TYPE (gutter_visible, "gutter-visible", "gutter-visible-specifier-p");
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1074 SPECIFIER_HAS_METHOD (gutter_visible, validate);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1075 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1076
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1077 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1078 reinit_specifier_type_create_gutter (void)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1079 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1080 REINITIALIZE_SPECIFIER_TYPE (gutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1081 REINITIALIZE_SPECIFIER_TYPE (gutter_size);
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1082 REINITIALIZE_SPECIFIER_TYPE (gutter_visible);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1083 }
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1084
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1085 void
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1086 specifier_vars_of_gutter (void)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1087 {
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1088 Lisp_Object fb;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1089
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1090 DEFVAR_SPECIFIER ("default-gutter", &Vdefault_gutter /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1091 Specifier for a fallback gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1092 Use `set-specifier' to change this.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1093
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1094 The position of this gutter is specified in the function
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1095 `default-gutter-position'. If the corresponding position-specific
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1096 gutter (e.g. `top-gutter' if `default-gutter-position' is 'top)
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1097 does not specify a gutter in a particular domain (usually a window),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1098 then the value of `default-gutter' in that domain, if any, will be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1099 used instead.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1100
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1101 Note that the gutter at any particular position will not be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1102 displayed unless its visibility flag is true and its thickness
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1103 \(width or height, depending on orientation) is non-zero. The
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1104 visibility is controlled by the specifiers `top-gutter-visible-p',
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1105 `bottom-gutter-visible-p', `left-gutter-visible-p', and
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1106 `right-gutter-visible-p', and the thickness is controlled by the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1107 specifiers `top-gutter-height', `bottom-gutter-height',
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1108 `left-gutter-width', and `right-gutter-width'.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1109
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1110 Note that one of the four visibility specifiers inherits from
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1111 `default-gutter-visibility' and one of the four thickness
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1112 specifiers inherits from either `default-gutter-width' or
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1113 `default-gutter-height' (depending on orientation), just
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1114 like for the gutter description specifiers (e.g. `top-gutter')
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1115 mentioned above.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1116
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1117 Therefore, if you are setting `default-gutter', you should control
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1118 the visibility and thickness using `default-gutter-visible-p',
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1119 `default-gutter-width', and `default-gutter-height', rather than
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1120 using position-specific specifiers. That way, you will get sane
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1121 behavior if the user changes the default gutter position.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1122
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1123 The gutter value should be a string, a property list of strings or
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1124 nil. You can attach extents and glyphs to the string and hence display
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1125 glyphs and text in other fonts in the gutter area. If the gutter value
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1126 is a property list then the strings will be concatenated together
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1127 before being displayed. */ );
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1128
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1129 Vdefault_gutter = Fmake_specifier (Qgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1130 /* #### It would be even nicer if the specifier caching
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1131 automatically knew about specifier fallbacks, so we didn't
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1132 have to do it ourselves. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1133 set_specifier_caching (Vdefault_gutter,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1134 offsetof (struct window, default_gutter),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1135 default_gutter_specs_changed,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1136 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1137
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1138 DEFVAR_SPECIFIER ("top-gutter",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1139 &Vgutter[TOP_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1140 Specifier for the gutter at the top of the frame.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1141 Use `set-specifier' to change this.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1142 See `default-gutter' for a description of a valid gutter instantiator.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1143 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1144 Vgutter[TOP_GUTTER] = Fmake_specifier (Qgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1145 set_specifier_caching (Vgutter[TOP_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1146 offsetof (struct window, gutter[TOP_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1147 top_gutter_specs_changed,
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1148 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1149
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1150 DEFVAR_SPECIFIER ("bottom-gutter",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1151 &Vgutter[BOTTOM_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1152 Specifier for the gutter at the bottom of the frame.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1153 Use `set-specifier' to change this.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1154 See `default-gutter' for a description of a valid gutter instantiator.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1155
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1156 Note that, unless the `default-gutter-position' is `bottom', by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1157 default the height of the bottom gutter (controlled by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1158 `bottom-gutter-height') is 0; thus, a bottom gutter will not be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1159 displayed even if you provide a value for `bottom-gutter'.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1160 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1161 Vgutter[BOTTOM_GUTTER] = Fmake_specifier (Qgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1162 set_specifier_caching (Vgutter[BOTTOM_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1163 offsetof (struct window, gutter[BOTTOM_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1164 bottom_gutter_specs_changed,
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1165 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1166
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1167 DEFVAR_SPECIFIER ("left-gutter",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1168 &Vgutter[LEFT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1169 Specifier for the gutter at the left edge of the frame.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1170 Use `set-specifier' to change this.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1171 See `default-gutter' for a description of a valid gutter instantiator.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1172
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1173 Note that, unless the `default-gutter-position' is `left', by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1174 default the height of the left gutter (controlled by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1175 `left-gutter-width') is 0; thus, a left gutter will not be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1176 displayed even if you provide a value for `left-gutter'.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1177 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1178 Vgutter[LEFT_GUTTER] = Fmake_specifier (Qgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1179 set_specifier_caching (Vgutter[LEFT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1180 offsetof (struct window, gutter[LEFT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1181 left_gutter_specs_changed,
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1182 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1183
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1184 DEFVAR_SPECIFIER ("right-gutter",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1185 &Vgutter[RIGHT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1186 Specifier for the gutter at the right edge of the frame.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1187 Use `set-specifier' to change this.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1188 See `default-gutter' for a description of a valid gutter instantiator.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1189
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1190 Note that, unless the `default-gutter-position' is `right', by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1191 default the height of the right gutter (controlled by
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1192 `right-gutter-width') is 0; thus, a right gutter will not be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1193 displayed even if you provide a value for `right-gutter'.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1194 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1195 Vgutter[RIGHT_GUTTER] = Fmake_specifier (Qgutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1196 set_specifier_caching (Vgutter[RIGHT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1197 offsetof (struct window, gutter[RIGHT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1198 right_gutter_specs_changed,
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1199 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1200
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1201 /* initially, top inherits from default; this can be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1202 changed with `set-default-gutter-position'. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1203 fb = list1 (Fcons (Qnil, Qnil));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1204 set_specifier_fallback (Vdefault_gutter, fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1205 set_specifier_fallback (Vgutter[TOP_GUTTER], Vdefault_gutter);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1206 set_specifier_fallback (Vgutter[BOTTOM_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1207 set_specifier_fallback (Vgutter[LEFT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1208 set_specifier_fallback (Vgutter[RIGHT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1209
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1210 DEFVAR_SPECIFIER ("default-gutter-height", &Vdefault_gutter_height /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1211 *Height of the default gutter, if it's oriented horizontally.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1212 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1213
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1214 The position of the default gutter is specified by the function
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1215 `set-default-gutter-position'. If the corresponding position-specific
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1216 gutter thickness specifier (e.g. `top-gutter-height' if
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1217 `default-gutter-position' is 'top) does not specify a thickness in a
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1218 particular domain (a window or a frame), then the value of
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1219 `default-gutter-height' or `default-gutter-width' (depending on the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1220 gutter orientation) in that domain, if any, will be used instead.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1221
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1222 Note that `default-gutter-height' is only used when
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1223 `default-gutter-position' is 'top or 'bottom, and `default-gutter-width'
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1224 is only used when `default-gutter-position' is 'left or 'right.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1225
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1226 Note that all of the position-specific gutter thickness specifiers
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1227 have a fallback value of zero when they do not correspond to the
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1228 default gutter. Therefore, you will have to set a non-zero thickness
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1229 value if you want a position-specific gutter to be displayed.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1230
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1231 If you set the height to 'autodetect the size of the gutter will be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1232 calculated to be large enough to hold the contents of the gutter. This
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1233 is the default.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1234 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1235 Vdefault_gutter_height = Fmake_specifier (Qgutter_size);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1236 set_specifier_caching (Vdefault_gutter_height,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1237 offsetof (struct window, default_gutter_height),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1238 default_gutter_size_changed_in_window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1239 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1240
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1241 DEFVAR_SPECIFIER ("default-gutter-width", &Vdefault_gutter_width /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1242 *Width of the default gutter, if it's oriented vertically.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1243 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1244
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1245 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1246 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1247 Vdefault_gutter_width = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1248 set_specifier_caching (Vdefault_gutter_width,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1249 offsetof (struct window, default_gutter_width),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1250 default_gutter_size_changed_in_window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1251 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1252
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1253 DEFVAR_SPECIFIER ("top-gutter-height",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1254 &Vgutter_size[TOP_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1255 *Height of the top gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1256 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1257
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1258 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1259 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1260 Vgutter_size[TOP_GUTTER] = Fmake_specifier (Qgutter_size);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1261 set_specifier_caching (Vgutter_size[TOP_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1262 offsetof (struct window, gutter_size[TOP_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1263 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1264
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1265 DEFVAR_SPECIFIER ("bottom-gutter-height",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1266 &Vgutter_size[BOTTOM_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1267 *Height of the bottom gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1268 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1269
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1270 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1271 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1272 Vgutter_size[BOTTOM_GUTTER] = Fmake_specifier (Qgutter_size);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1273 set_specifier_caching (Vgutter_size[BOTTOM_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1274 offsetof (struct window, gutter_size[BOTTOM_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1275 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1276
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1277 DEFVAR_SPECIFIER ("left-gutter-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1278 &Vgutter_size[LEFT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1279 *Width of left gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1280 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1281
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1282 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1283 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1284 Vgutter_size[LEFT_GUTTER] = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1285 set_specifier_caching (Vgutter_size[LEFT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1286 offsetof (struct window, gutter_size[LEFT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1287 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1288
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1289 DEFVAR_SPECIFIER ("right-gutter-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1290 &Vgutter_size[RIGHT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1291 *Width of right gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1292 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1293
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1294 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1295 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1296 Vgutter_size[RIGHT_GUTTER] = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1297 set_specifier_caching (Vgutter_size[RIGHT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1298 offsetof (struct window, gutter_size[RIGHT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1299 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1300
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1301 fb = Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1302 #ifdef HAVE_TTY
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1303 fb = Fcons (Fcons (list1 (Qtty), Qautodetect), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1304 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1305 #ifdef HAVE_X_WINDOWS
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1306 fb = Fcons (Fcons (list1 (Qx), Qautodetect), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1307 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1308 #ifdef HAVE_MS_WINDOWS
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1309 fb = Fcons (Fcons (list1 (Qmsprinter), Qautodetect), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1310 fb = Fcons (Fcons (list1 (Qmswindows), Qautodetect), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1311 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1312 if (!NILP (fb))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1313 set_specifier_fallback (Vdefault_gutter_height, fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1314
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1315 fb = Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1316 #ifdef HAVE_TTY
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1317 fb = Fcons (Fcons (list1 (Qtty), Qzero), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1318 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1319 #ifdef HAVE_X_WINDOWS
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1320 fb = Fcons (Fcons (list1 (Qx), make_int (DEFAULT_GUTTER_WIDTH)), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1321 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1322 #ifdef HAVE_MS_WINDOWS
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1323 fb = Fcons (Fcons (list1 (Qmsprinter), Qzero), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1324 fb = Fcons (Fcons (list1 (Qmswindows),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1325 make_int (DEFAULT_GUTTER_WIDTH)), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1326 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1327 if (!NILP (fb))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1328 set_specifier_fallback (Vdefault_gutter_width, fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1329
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1330 set_specifier_fallback (Vgutter_size[TOP_GUTTER], Vdefault_gutter_height);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1331 fb = list1 (Fcons (Qnil, Qzero));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1332 set_specifier_fallback (Vgutter_size[BOTTOM_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1333 set_specifier_fallback (Vgutter_size[LEFT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1334 set_specifier_fallback (Vgutter_size[RIGHT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1335
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1336 DEFVAR_SPECIFIER ("default-gutter-border-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1337 &Vdefault_gutter_border_width /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1338 *Width of the border around the default gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1339 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1340
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1341 The position of the default gutter is specified by the function
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1342 `set-default-gutter-position'. If the corresponding position-specific
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1343 gutter border width specifier (e.g. `top-gutter-border-width' if
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1344 `default-gutter-position' is 'top) does not specify a border width in a
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1345 particular domain (a window or a frame), then the value of
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1346 `default-gutter-border-width' in that domain, if any, will be used
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1347 instead.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1348
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1349 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1350 Vdefault_gutter_border_width = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1351 set_specifier_caching (Vdefault_gutter_border_width,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1352 offsetof (struct window, default_gutter_border_width),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1353 default_gutter_border_width_changed_in_window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1354 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1355
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1356 DEFVAR_SPECIFIER ("top-gutter-border-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1357 &Vgutter_border_width[TOP_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1358 *Border width of the top gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1359 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1360
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1361 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1362 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1363 Vgutter_border_width[TOP_GUTTER] = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1364 set_specifier_caching (Vgutter_border_width[TOP_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1365 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1366 gutter_border_width[TOP_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1367 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1368
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1369 DEFVAR_SPECIFIER ("bottom-gutter-border-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1370 &Vgutter_border_width[BOTTOM_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1371 *Border width of the bottom gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1372 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1373
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1374 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1375 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1376 Vgutter_border_width[BOTTOM_GUTTER] = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1377 set_specifier_caching (Vgutter_border_width[BOTTOM_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1378 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1379 gutter_border_width[BOTTOM_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1380 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1381
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1382 DEFVAR_SPECIFIER ("left-gutter-border-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1383 &Vgutter_border_width[LEFT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1384 *Border width of left gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1385 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1386
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1387 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1388 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1389 Vgutter_border_width[LEFT_GUTTER] = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1390 set_specifier_caching (Vgutter_border_width[LEFT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1391 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1392 gutter_border_width[LEFT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1393 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1394
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1395 DEFVAR_SPECIFIER ("right-gutter-border-width",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1396 &Vgutter_border_width[RIGHT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1397 *Border width of right gutter.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1398 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1399
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1400 See `default-gutter-height' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1401 */ );
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1402 Vgutter_border_width[RIGHT_GUTTER] = Fmake_specifier (Qnatnum);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1403 set_specifier_caching (Vgutter_border_width[RIGHT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1404 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1405 gutter_border_width[RIGHT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1406 gutter_geometry_changed_in_window, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1407
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1408 fb = Qnil;
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1409 #ifdef HAVE_TTY
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1410 fb = Fcons (Fcons (list1 (Qtty), Qzero), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1411 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1412 #ifdef HAVE_X_WINDOWS
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1413 fb = Fcons (Fcons (list1 (Qx), make_int (DEFAULT_GUTTER_BORDER_WIDTH)), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1414 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1415 #ifdef HAVE_MS_WINDOWS
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1416 fb = Fcons (Fcons (list1 (Qmsprinter), Qzero), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1417 fb = Fcons (Fcons (list1 (Qmswindows), make_int (DEFAULT_GUTTER_BORDER_WIDTH)), fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1418 #endif
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1419 if (!NILP (fb))
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1420 set_specifier_fallback (Vdefault_gutter_border_width, fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1421
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1422 set_specifier_fallback (Vgutter_border_width[TOP_GUTTER], Vdefault_gutter_border_width);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1423 fb = list1 (Fcons (Qnil, Qzero));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1424 set_specifier_fallback (Vgutter_border_width[BOTTOM_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1425 set_specifier_fallback (Vgutter_border_width[LEFT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1426 set_specifier_fallback (Vgutter_border_width[RIGHT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1427
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1428 DEFVAR_SPECIFIER ("default-gutter-visible-p", &Vdefault_gutter_visible_p /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1429 *Whether the default gutter is visible.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1430 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1431
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1432 The position of the default gutter is specified by the function
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1433 `set-default-gutter-position'. If the corresponding position-specific
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1434 gutter visibility specifier (e.g. `top-gutter-visible-p' if
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1435 `default-gutter-position' is 'top) does not specify a visible-p value
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1436 in a particular domain (a window or a frame), then the value of
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1437 `default-gutter-visible-p' in that domain, if any, will be used
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1438 instead.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1439
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1440 `default-gutter-visible-p' and all of the position-specific gutter
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1441 visibility specifiers have a fallback value of true.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1442 */ );
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1443 Vdefault_gutter_visible_p = Fmake_specifier (Qgutter_visible);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1444 set_specifier_caching (Vdefault_gutter_visible_p,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1445 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1446 default_gutter_visible_p),
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1447 default_gutter_visible_p_changed_in_window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1448 0, 0);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1449
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1450 DEFVAR_SPECIFIER ("top-gutter-visible-p",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1451 &Vgutter_visible_p[TOP_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1452 *Whether the top gutter is visible.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1453 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1454
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1455 See `default-gutter-visible-p' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1456 */ );
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1457 Vgutter_visible_p[TOP_GUTTER] = Fmake_specifier (Qgutter_visible);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1458 set_specifier_caching (Vgutter_visible_p[TOP_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1459 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1460 gutter_visible_p[TOP_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1461 top_gutter_specs_changed, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1462
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1463 DEFVAR_SPECIFIER ("bottom-gutter-visible-p",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1464 &Vgutter_visible_p[BOTTOM_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1465 *Whether the bottom gutter is visible.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1466 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1467
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1468 See `default-gutter-visible-p' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1469 */ );
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1470 Vgutter_visible_p[BOTTOM_GUTTER] = Fmake_specifier (Qgutter_visible);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1471 set_specifier_caching (Vgutter_visible_p[BOTTOM_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1472 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1473 gutter_visible_p[BOTTOM_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1474 bottom_gutter_specs_changed, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1475
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1476 DEFVAR_SPECIFIER ("left-gutter-visible-p",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1477 &Vgutter_visible_p[LEFT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1478 *Whether the left gutter is visible.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1479 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1480
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1481 See `default-gutter-visible-p' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1482 */ );
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1483 Vgutter_visible_p[LEFT_GUTTER] = Fmake_specifier (Qgutter_visible);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1484 set_specifier_caching (Vgutter_visible_p[LEFT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1485 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1486 gutter_visible_p[LEFT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1487 left_gutter_specs_changed, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1488
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1489 DEFVAR_SPECIFIER ("right-gutter-visible-p",
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1490 &Vgutter_visible_p[RIGHT_GUTTER] /*
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1491 *Whether the right gutter is visible.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1492 This is a specifier; use `set-specifier' to change it.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1493
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1494 See `default-gutter-visible-p' for more information.
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1495 */ );
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1496 Vgutter_visible_p[RIGHT_GUTTER] = Fmake_specifier (Qgutter_visible);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1497 set_specifier_caching (Vgutter_visible_p[RIGHT_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1498 offsetof (struct window,
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1499 gutter_visible_p[RIGHT_GUTTER]),
404
2f8bb876ab1d Import from CVS: tag r21-2-32
cvs
parents: 400
diff changeset
1500 right_gutter_specs_changed, 0, 0);
398
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1501
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1502 /* initially, top inherits from default; this can be
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1503 changed with `set-default-gutter-position'. */
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1504 fb = list1 (Fcons (Qnil, Qt));
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1505 set_specifier_fallback (Vdefault_gutter_visible_p, fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1506 set_specifier_fallback (Vgutter_visible_p[TOP_GUTTER],
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1507 Vdefault_gutter_visible_p);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1508 set_specifier_fallback (Vgutter_visible_p[BOTTOM_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1509 set_specifier_fallback (Vgutter_visible_p[LEFT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1510 set_specifier_fallback (Vgutter_visible_p[RIGHT_GUTTER], fb);
74fd4e045ea6 Import from CVS: tag r21-2-29
cvs
parents:
diff changeset
1511 }