Mercurial > emacs
annotate src/xdisp.c @ 12682:66b3d052d4fe
(shared-lisp-mode-map): Don't bind TAB, just set indent-line-function.
| author | Richard M. Stallman <rms@gnu.org> |
|---|---|
| date | Wed, 26 Jul 1995 22:21:02 +0000 |
| parents | 55241c80f448 |
| children | 74e59068a948 |
| rev | line source |
|---|---|
| 277 | 1 /* Display generation from window structure and buffer text. |
| 10393 | 2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95 Free Software Foundation, Inc. |
| 277 | 3 |
| 4 This file is part of GNU Emacs. | |
| 5 | |
| 6 GNU Emacs is free software; you can redistribute it and/or modify | |
| 7 it under the terms of the GNU General Public License as published by | |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
8 the Free Software Foundation; either version 2, or (at your option) |
| 277 | 9 any later version. |
| 10 | |
| 11 GNU Emacs is distributed in the hope that it will be useful, | |
| 12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 14 GNU General Public License for more details. | |
| 15 | |
| 16 You should have received a copy of the GNU General Public License | |
| 17 along with GNU Emacs; see the file COPYING. If not, write to | |
| 18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
| 19 | |
| 20 | |
|
4696
1fc792473491
Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents:
4423
diff
changeset
|
21 #include <config.h> |
| 277 | 22 #include <stdio.h> |
| 23 /*#include <ctype.h>*/ | |
| 24 #undef NULL | |
| 25 #include "lisp.h" | |
| 769 | 26 #include "frame.h" |
| 277 | 27 #include "window.h" |
| 28 #include "termchar.h" | |
| 29 #include "dispextern.h" | |
| 30 #include "buffer.h" | |
| 31 #include "indent.h" | |
| 32 #include "commands.h" | |
| 33 #include "macros.h" | |
| 34 #include "disptab.h" | |
|
1718
f80c1f73f5b9
* xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents:
1656
diff
changeset
|
35 #include "termhooks.h" |
|
4386
abd79e187610
(try_window): Handle invisible newline at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
3937
diff
changeset
|
36 #include "intervals.h" |
| 12081 | 37 #include "keyboard.h" |
| 277 | 38 |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
39 #ifdef USE_X_TOOLKIT |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
40 extern void set_frame_menubar (); |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
41 #endif |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
42 |
| 277 | 43 extern int interrupt_input; |
| 44 extern int command_loop_level; | |
| 45 | |
|
8471
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
46 extern Lisp_Object Qface; |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
47 |
|
12171
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
48 extern Lisp_Object Voverriding_local_map; |
|
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
49 extern Lisp_Object Voverriding_local_map_menu_flag; |
|
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
50 |
|
12263
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
51 Lisp_Object Qoverriding_local_map, Qoverriding_terminal_local_map; |
|
12171
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
52 |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
53 /* Nonzero means print newline to stdout before next minibuffer message. */ |
| 277 | 54 |
| 55 int noninteractive_need_newline; | |
| 56 | |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
57 /* Nonzero means print newline to message log before next message. */ |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
58 |
|
10567
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
59 static int message_log_need_newline; |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
60 |
| 277 | 61 #define min(a, b) ((a) < (b) ? (a) : (b)) |
| 62 #define max(a, b) ((a) > (b) ? (a) : (b)) | |
| 11810 | 63 #define minmax(floor, val, ceil) \ |
| 64 ((val) < (floor) ? (floor) : (val) > (ceil) ? (ceil) : (val)) | |
| 277 | 65 |
| 66 /* The buffer position of the first character appearing | |
| 769 | 67 entirely or partially on the current frame line. |
| 68 Or zero, which disables the optimization for the current frame line. */ | |
| 277 | 69 static int this_line_bufpos; |
| 70 | |
| 71 /* Number of characters past the end of this line, | |
| 72 including the terminating newline */ | |
| 73 static int this_line_endpos; | |
| 74 | |
| 769 | 75 /* The vertical position of this frame line. */ |
| 277 | 76 static int this_line_vpos; |
| 77 | |
| 769 | 78 /* Hpos value for start of display on this frame line. |
| 277 | 79 Usually zero, but negative if first character really began |
| 80 on previous line */ | |
| 81 static int this_line_start_hpos; | |
| 82 | |
| 83 /* Buffer that this_line variables are describing. */ | |
| 84 static struct buffer *this_line_buffer; | |
| 85 | |
| 86 /* Value of echo_area_glyphs when it was last acted on. | |
| 769 | 87 If this is nonzero, there is a message on the frame |
| 277 | 88 in the minibuffer and it should be erased as soon |
| 89 as it is no longer requested to appear. */ | |
| 90 char *previous_echo_glyphs; | |
| 91 | |
| 769 | 92 /* Nonzero means truncate lines in all windows less wide than the frame */ |
| 277 | 93 int truncate_partial_width_windows; |
| 94 | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
95 /* Nonzero means we have more than one non-minibuffer-only frame. |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
96 Not guaranteed to be accurate except while parsing frame-title-format. */ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
97 int multiple_frames; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
98 |
| 277 | 99 Lisp_Object Vglobal_mode_string; |
| 100 | |
| 101 /* Marker for where to display an arrow on top of the buffer text. */ | |
| 102 Lisp_Object Voverlay_arrow_position; | |
| 103 | |
| 104 /* String to display for the arrow. */ | |
| 105 Lisp_Object Voverlay_arrow_string; | |
| 106 | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
107 /* Like mode-line-format, but for the titlebar on a visible frame. */ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
108 Lisp_Object Vframe_title_format; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
109 |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
110 /* Like mode-line-format, but for the titlebar on an iconified frame. */ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
111 Lisp_Object Vicon_title_format; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
112 |
|
10667
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
113 /* List of functions to call when a window's size changes. These |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
114 functions get one arg, a frame on which one or more windows' sizes |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
115 have changed. */ |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
116 static Lisp_Object Vwindow_size_change_functions; |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
117 |
| 277 | 118 /* Values of those variables at last redisplay. */ |
|
1527
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
119 static Lisp_Object last_arrow_position, last_arrow_string; |
| 277 | 120 |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
121 Lisp_Object Qmenu_bar_update_hook; |
|
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
122 |
| 277 | 123 /* Nonzero if overlay arrow has been displayed once in this window. */ |
| 124 static int overlay_arrow_seen; | |
| 125 | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
126 /* Nonzero if visible end of buffer has already been displayed once |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
127 in this window. (We need this variable in case there are overlay |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
128 strings that get displayed there.) */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
129 static int zv_strings_seen; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
130 |
|
3265
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
131 /* Nonzero means highlight the region even in nonselected windows. */ |
|
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
132 static int highlight_nonselected_windows; |
|
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
133 |
| 769 | 134 /* If cursor motion alone moves point off frame, |
| 277 | 135 Try scrolling this many lines up or down if that will bring it back. */ |
|
11719
9238e21a6f09
(prepare_menu_bars): Clear size-change flag before running
Richard M. Stallman <rms@gnu.org>
parents:
11649
diff
changeset
|
136 static int scroll_step; |
| 277 | 137 |
| 138 /* Nonzero if try_window_id has made blank lines at window bottom | |
| 139 since the last redisplay that paused */ | |
| 140 static int blank_end_of_window; | |
| 141 | |
|
10303
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
142 /* Number of windows showing the buffer of the selected window |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
143 (or another buffer with the same base buffer). |
| 277 | 144 keyboard.c refers to this. */ |
| 145 int buffer_shared; | |
| 146 | |
| 769 | 147 /* display_text_line sets these to the frame position (origin 0) of point, |
| 277 | 148 whether the window is selected or not. |
| 149 Set one to -1 first to determine whether point was found afterwards. */ | |
| 150 | |
| 151 static int cursor_vpos; | |
| 152 static int cursor_hpos; | |
| 153 | |
|
11719
9238e21a6f09
(prepare_menu_bars): Clear size-change flag before running
Richard M. Stallman <rms@gnu.org>
parents:
11649
diff
changeset
|
154 static int debug_end_pos; |
| 277 | 155 |
| 156 /* Nonzero means display mode line highlighted */ | |
| 157 int mode_line_inverse_video; | |
| 158 | |
|
10688
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
159 static int message_log_check_duplicate (); |
| 277 | 160 static void echo_area_display (); |
| 161 void mark_window_display_accurate (); | |
| 162 static void redisplay_windows (); | |
| 163 static void redisplay_window (); | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
164 static void update_menu_bar (); |
| 277 | 165 static void try_window (); |
| 166 static int try_window_id (); | |
| 167 static struct position *display_text_line (); | |
| 168 static void display_mode_line (); | |
| 169 static int display_mode_element (); | |
| 170 static char *decode_mode_spec (); | |
| 171 static int display_string (); | |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
172 static void display_menu_bar (); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
173 static int display_count_lines (); |
| 277 | 174 |
| 175 /* Prompt to display in front of the minibuffer contents */ | |
|
7951
e609577aa2f3
minibuf_prompt is now a Lisp_Object.
Karl Heuer <kwzh@gnu.org>
parents:
7933
diff
changeset
|
176 Lisp_Object minibuf_prompt; |
| 277 | 177 |
| 178 /* Width in columns of current minibuffer prompt. */ | |
| 179 int minibuf_prompt_width; | |
| 180 | |
| 181 /* Message to display instead of minibuffer contents | |
| 182 This is what the functions error and message make, | |
| 183 and command echoing uses it as well. | |
| 184 It overrides the minibuf_prompt as well as the buffer. */ | |
| 185 char *echo_area_glyphs; | |
| 186 | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
187 /* This is the length of the message in echo_area_glyphs. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
188 int echo_area_glyphs_length; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
189 |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
190 /* This is the window where the echo area message was displayed. |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
191 It is always a minibuffer window, but it may not be the |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
192 same window currently active as a minibuffer. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
193 Lisp_Object echo_area_window; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
194 |
| 277 | 195 /* true iff we should redraw the mode lines on the next redisplay */ |
| 196 int update_mode_lines; | |
| 197 | |
| 198 /* Smallest number of characters before the gap | |
| 199 at any time since last redisplay that finished. | |
| 200 Valid for current buffer when try_window_id can be called. */ | |
| 201 int beg_unchanged; | |
| 202 | |
| 203 /* Smallest number of characters after the gap | |
| 204 at any time since last redisplay that finished. | |
| 205 Valid for current buffer when try_window_id can be called. */ | |
| 206 int end_unchanged; | |
| 207 | |
| 208 /* MODIFF as of last redisplay that finished; | |
| 209 if it matches MODIFF, beg_unchanged and end_unchanged | |
| 210 contain no useful information */ | |
| 211 int unchanged_modified; | |
| 212 | |
| 213 /* Nonzero if window sizes or contents have changed | |
| 214 since last redisplay that finished */ | |
| 215 int windows_or_buffers_changed; | |
| 216 | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
217 /* Nonzero after display_mode_line if %l was used |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
218 and it displayed a line number. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
219 int line_number_displayed; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
220 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
221 /* Maximum buffer size for which to display line numbers. */ |
|
11719
9238e21a6f09
(prepare_menu_bars): Clear size-change flag before running
Richard M. Stallman <rms@gnu.org>
parents:
11649
diff
changeset
|
222 static int line_number_display_limit; |
| 10393 | 223 |
| 224 /* Number of lines to keep in the message log buffer. | |
| 225 t means infinite. nil means don't log at all. */ | |
| 226 Lisp_Object Vmessage_log_max; | |
| 277 | 227 |
|
10567
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
228 void |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
229 message_log_maybe_newline () |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
230 { |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
231 if (message_log_need_newline) |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
232 message_dolog ("", 0, 1); |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
233 } |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
234 |
|
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
235 |
|
10442
d379e2c60766
(message_dolog): Ignore narrowing.
Karl Heuer <kwzh@gnu.org>
parents:
10441
diff
changeset
|
236 /* Add a string to the message log, optionally terminated with a newline. |
|
d379e2c60766
(message_dolog): Ignore narrowing.
Karl Heuer <kwzh@gnu.org>
parents:
10441
diff
changeset
|
237 This function calls low-level routines in order to bypass text property |
|
d379e2c60766
(message_dolog): Ignore narrowing.
Karl Heuer <kwzh@gnu.org>
parents:
10441
diff
changeset
|
238 hooks, etc. which might not be safe to run. */ |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
239 |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
240 void |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
241 message_dolog (m, len, nlflag) |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
242 char *m; |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
243 int len, nlflag; |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
244 { |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
245 if (!NILP (Vmessage_log_max)) |
| 10393 | 246 { |
| 247 struct buffer *oldbuf; | |
| 248 int oldpoint, oldbegv, oldzv; | |
| 249 | |
| 250 oldbuf = current_buffer; | |
|
10567
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
251 Fset_buffer (Fget_buffer_create (build_string ("*Messages*"))); |
|
11531
355c40d2b1d2
(message_dolog): The message log doesn't need an undo list.
Karl Heuer <kwzh@gnu.org>
parents:
11499
diff
changeset
|
252 current_buffer->undo_list = Qt; |
| 10393 | 253 oldpoint = PT; |
| 254 oldbegv = BEGV; | |
| 255 oldzv = ZV; | |
|
10442
d379e2c60766
(message_dolog): Ignore narrowing.
Karl Heuer <kwzh@gnu.org>
parents:
10441
diff
changeset
|
256 BEGV = BEG; |
|
d379e2c60766
(message_dolog): Ignore narrowing.
Karl Heuer <kwzh@gnu.org>
parents:
10441
diff
changeset
|
257 ZV = Z; |
| 10393 | 258 if (oldpoint == Z) |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
259 oldpoint += len + nlflag; |
| 10393 | 260 if (oldzv == Z) |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
261 oldzv += len + nlflag; |
| 10393 | 262 TEMP_SET_PT (Z); |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
263 if (len) |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
264 insert_1 (m, len, 1, 0); |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
265 if (nlflag) |
| 10393 | 266 { |
|
10688
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
267 int this_bol, prev_bol, dup; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
268 insert_1 ("\n", 1, 1, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
269 |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
270 this_bol = scan_buffer ('\n', Z, 0, -2, 0, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
271 if (this_bol > BEG) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
272 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
273 prev_bol = scan_buffer ('\n', this_bol, 0, -2, 0, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
274 dup = message_log_check_duplicate (prev_bol, this_bol); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
275 if (dup) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
276 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
277 if (oldpoint > prev_bol) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
278 oldpoint -= min (this_bol, oldpoint) - prev_bol; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
279 if (oldbegv > prev_bol) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
280 oldbegv -= min (this_bol, oldbegv) - prev_bol; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
281 if (oldzv > prev_bol) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
282 oldzv -= min (this_bol, oldzv) - prev_bol; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
283 del_range_1 (prev_bol, this_bol, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
284 if (dup > 1) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
285 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
286 char dupstr[40]; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
287 int duplen; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
288 |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
289 /* If you change this format, don't forget to also |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
290 change message_log_check_duplicate. */ |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
291 sprintf (dupstr, " [%d times]", dup); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
292 duplen = strlen (dupstr); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
293 TEMP_SET_PT (Z-1); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
294 if (oldpoint == Z) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
295 oldpoint += duplen; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
296 if (oldzv == Z) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
297 oldzv += duplen; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
298 insert_1 (dupstr, duplen, 1, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
299 } |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
300 } |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
301 } |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
302 |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
303 if (NATNUMP (Vmessage_log_max)) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
304 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
305 int pos = scan_buffer ('\n', Z, 0, |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
306 -XFASTINT (Vmessage_log_max) - 1, 0, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
307 oldpoint -= min (pos, oldpoint) - BEG; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
308 oldbegv -= min (pos, oldbegv) - BEG; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
309 oldzv -= min (pos, oldzv) - BEG; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
310 del_range_1 (BEG, pos, 0); |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
311 } |
| 10393 | 312 } |
| 313 BEGV = oldbegv; | |
| 314 ZV = oldzv; | |
| 315 TEMP_SET_PT (oldpoint); | |
| 316 set_buffer_internal (oldbuf); | |
|
10567
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
317 message_log_need_newline = !nlflag; |
| 10393 | 318 } |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
319 } |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
320 |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
321 |
|
10688
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
322 /* We are at the end of the buffer after just having inserted a newline. |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
323 (Note: We depend on the fact we won't be crossing the gap.) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
324 Check to see if the most recent message looks a lot like the previous one. |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
325 Return 0 if different, 1 if the new one should just replace it, or a |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
326 value N > 1 if we should also append " [N times]". */ |
|
11444
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
327 |
|
10688
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
328 static int |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
329 message_log_check_duplicate (prev_bol, this_bol) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
330 int prev_bol, this_bol; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
331 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
332 int i; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
333 int len = Z - 1 - this_bol; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
334 int seen_dots = 0; |
|
11444
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
335 unsigned char *p1 = BUF_CHAR_ADDRESS (current_buffer, prev_bol); |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
336 unsigned char *p2 = BUF_CHAR_ADDRESS (current_buffer, this_bol); |
|
10688
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
337 |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
338 for (i = 0; i < len; i++) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
339 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
340 if (i >= 3 && p1[i-3] == '.' && p1[i-2] == '.' && p1[i-1] == '.' |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
341 && p1[i] != '\n') |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
342 seen_dots = 1; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
343 if (p1[i] != p2[i]) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
344 return seen_dots; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
345 } |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
346 p1 += len; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
347 if (*p1 == '\n') |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
348 return 2; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
349 if (*p1++ == ' ' && *p1++ == '[') |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
350 { |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
351 int n = 0; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
352 while (*p1 >= '0' && *p1 <= '9') |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
353 n = n * 10 + *p1++ - '0'; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
354 if (strncmp (p1, " times]\n", 8) == 0) |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
355 return n+1; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
356 } |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
357 return 0; |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
358 } |
|
340ceb6ae024
(message_log_check_duplicate): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10667
diff
changeset
|
359 |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
360 /* Display an echo area message M with a specified length of LEN chars. |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
361 The string may include null characters. If m is 0, clear out any |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
362 existing message, and let the minibuffer text show through. |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
363 Do not pass text that is stored in a Lisp string. */ |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
364 |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
365 void |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
366 message2 (m, len) |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
367 char *m; |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
368 int len; |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
369 { |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
370 /* First flush out any partial line written with print. */ |
|
10567
65c5552c16cb
(message_log_need_newline): This var is now static.
Karl Heuer <kwzh@gnu.org>
parents:
10457
diff
changeset
|
371 message_log_maybe_newline (); |
|
10416
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
372 if (m) |
|
51c4308d74c9
(message_log_need_newline): New var.
Karl Heuer <kwzh@gnu.org>
parents:
10394
diff
changeset
|
373 message_dolog (m, len, 1); |
| 10393 | 374 message2_nolog (m, len); |
| 375 } | |
| 376 | |
| 377 | |
| 378 /* The non-logging part of that function. */ | |
| 379 | |
| 380 void | |
| 381 message2_nolog (m, len) | |
| 382 char *m; | |
| 383 int len; | |
| 384 { | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
385 if (noninteractive) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
386 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
387 if (noninteractive_need_newline) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
388 putc ('\n', stderr); |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
389 noninteractive_need_newline = 0; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
390 fwrite (m, len, 1, stderr); |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
391 if (cursor_in_echo_area == 0) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
392 fprintf (stderr, "\n"); |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
393 fflush (stderr); |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
394 } |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
395 /* A null message buffer means that the frame hasn't really been |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
396 initialized yet. Error messages get reported properly by |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
397 cmd_error, so this must be just an informative message; toss it. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
398 else if (INTERACTIVE && FRAME_MESSAGE_BUF (selected_frame)) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
399 { |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
400 Lisp_Object mini_window; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
401 FRAME_PTR f; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
402 |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
403 /* Get the frame containing the minibuffer |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
404 that the selected frame is using. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
405 mini_window = FRAME_MINIBUF_WINDOW (selected_frame); |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
406 f = XFRAME (WINDOW_FRAME (XWINDOW (mini_window))); |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
407 |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
408 #ifdef MULTI_FRAME |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
409 FRAME_SAMPLE_VISIBILITY (f); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
410 if (FRAME_VISIBLE_P (selected_frame) |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
411 && ! FRAME_VISIBLE_P (f)) |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
412 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (mini_window))); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
413 #endif |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
414 |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
415 if (m) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
416 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
417 echo_area_glyphs = m; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
418 echo_area_glyphs_length = len; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
419 } |
|
1527
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
420 else |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
421 echo_area_glyphs = previous_echo_glyphs = 0; |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
422 |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
423 do_pending_window_change (); |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
424 echo_area_display (); |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
425 update_frame (f, 1, 1); |
|
1527
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
426 do_pending_window_change (); |
|
6661
a26e7181f36b
(display_text_line): Properly handle charstarts for hscroll,
Richard M. Stallman <rms@gnu.org>
parents:
6650
diff
changeset
|
427 if (frame_up_to_date_hook != 0 && ! gc_in_progress) |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
428 (*frame_up_to_date_hook) (f); |
|
1527
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
429 } |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
430 } |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
431 |
|
6366
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
432 void |
|
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
433 message1 (m) |
|
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
434 char *m; |
|
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
435 { |
|
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
436 message2 (m, (m ? strlen (m) : 0)); |
|
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
437 } |
|
6f28d7614611
(message1): Call message2 instead of duplicating code.
Karl Heuer <kwzh@gnu.org>
parents:
6342
diff
changeset
|
438 |
|
10394
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
439 void |
|
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
440 message1_nolog (m) |
|
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
441 char *m; |
|
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
442 { |
|
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
443 message2_nolog (m, (m ? strlen (m) : 0)); |
|
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
444 } |
|
afa796e2b954
(message1_nolog): New function.
Karl Heuer <kwzh@gnu.org>
parents:
10393
diff
changeset
|
445 |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
446 /* Truncate what will be displayed in the echo area |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
447 the next time we display it--but don't redisplay it now. */ |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
448 |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
449 void |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
450 truncate_echo_area (len) |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
451 int len; |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
452 { |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
453 /* A null message buffer means that the frame hasn't really been |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
454 initialized yet. Error messages get reported properly by |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
455 cmd_error, so this must be just an informative message; toss it. */ |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
456 if (!noninteractive && INTERACTIVE && FRAME_MESSAGE_BUF (selected_frame)) |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
457 echo_area_glyphs_length = len; |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
458 } |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
459 |
| 769 | 460 /* Nonzero if FRAME_MESSAGE_BUF (selected_frame) is being used by print; |
| 331 | 461 zero if being used by message. */ |
| 462 int message_buf_print; | |
| 463 | |
|
1446
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
464 /* Dump an informative message to the minibuf. If m is 0, clear out |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
465 any existing message, and let the minibuffer text show through. */ |
| 277 | 466 /* VARARGS 1 */ |
| 467 void | |
| 468 message (m, a1, a2, a3) | |
| 469 char *m; | |
|
8834
ba6936b88869
(message): Use EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents:
8797
diff
changeset
|
470 EMACS_INT a1, a2, a3; |
| 277 | 471 { |
| 472 if (noninteractive) | |
| 473 { | |
|
1446
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
474 if (m) |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
475 { |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
476 if (noninteractive_need_newline) |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
477 putc ('\n', stderr); |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
478 noninteractive_need_newline = 0; |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
479 fprintf (stderr, m, a1, a2, a3); |
|
2526
bcba821c17bc
(message, message1): If noninteractive and
Richard M. Stallman <rms@gnu.org>
parents:
2324
diff
changeset
|
480 if (cursor_in_echo_area == 0) |
|
bcba821c17bc
(message, message1): If noninteractive and
Richard M. Stallman <rms@gnu.org>
parents:
2324
diff
changeset
|
481 fprintf (stderr, "\n"); |
|
1446
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
482 fflush (stderr); |
|
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
483 } |
| 277 | 484 } |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
485 else if (INTERACTIVE) |
| 277 | 486 { |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
487 /* The frame whose minibuffer we're going to display the message on. |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
488 It may be larger than the selected frame, so we need |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
489 to use its buffer, not the selected frame's buffer. */ |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
490 Lisp_Object mini_window; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
491 FRAME_PTR f; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
492 |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
493 /* Get the frame containing the minibuffer |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
494 that the selected frame is using. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
495 mini_window = FRAME_MINIBUF_WINDOW (selected_frame); |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
496 f = XFRAME (WINDOW_FRAME (XWINDOW (mini_window))); |
| 277 | 497 |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
498 /* A null message buffer means that the frame hasn't really been |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
499 initialized yet. Error messages get reported properly by |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
500 cmd_error, so this must be just an informative message; toss it. */ |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
501 if (FRAME_MESSAGE_BUF (f)) |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
502 { |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
503 if (m) |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
504 { |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
505 int len; |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
506 #ifdef NO_ARG_ARRAY |
|
8834
ba6936b88869
(message): Use EMACS_INT.
Richard M. Stallman <rms@gnu.org>
parents:
8797
diff
changeset
|
507 EMACS_INT a[3]; |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
508 a[0] = a1; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
509 a[1] = a2; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
510 a[2] = a3; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
511 |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
512 len = doprnt (FRAME_MESSAGE_BUF (f), |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
513 FRAME_WIDTH (f), m, (char *)0, 3, a); |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
514 #else |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
515 len = doprnt (FRAME_MESSAGE_BUF (f), |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
516 FRAME_WIDTH (f), m, (char *)0, 3, &a1); |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
517 #endif /* NO_ARG_ARRAY */ |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
518 |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
519 message2 (FRAME_MESSAGE_BUF (f), len); |
|
1873
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
520 } |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
521 else |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
522 message1 (0); |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
523 |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
524 /* Print should start at the beginning of the message |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
525 buffer next time. */ |
|
c5038f47c602
* xdisp.c (message): Set echo_frame to the frame whose message buf
Jim Blandy <jimb@redhat.com>
parents:
1785
diff
changeset
|
526 message_buf_print = 0; |
|
1446
37b3c2981b40
* xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents:
1124
diff
changeset
|
527 } |
| 277 | 528 } |
| 529 } | |
| 530 | |
| 11193 | 531 /* The non-logging version of that function. */ |
| 532 void | |
| 533 message_nolog (m, a1, a2, a3) | |
| 534 char *m; | |
| 535 EMACS_INT a1, a2, a3; | |
| 536 { | |
| 537 Lisp_Object old_log_max; | |
| 538 old_log_max = Vmessage_log_max; | |
| 539 Vmessage_log_max = Qnil; | |
| 540 message (m, a1, a2, a3); | |
| 541 Vmessage_log_max = old_log_max; | |
| 542 } | |
| 543 | |
|
9088
f29b14d21b26
(update_echo_area): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8943
diff
changeset
|
544 void |
|
f29b14d21b26
(update_echo_area): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8943
diff
changeset
|
545 update_echo_area () |
|
f29b14d21b26
(update_echo_area): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8943
diff
changeset
|
546 { |
|
f29b14d21b26
(update_echo_area): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8943
diff
changeset
|
547 message2 (echo_area_glyphs, echo_area_glyphs_length); |
|
f29b14d21b26
(update_echo_area): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8943
diff
changeset
|
548 } |
|
f29b14d21b26
(update_echo_area): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8943
diff
changeset
|
549 |
| 277 | 550 static void |
| 551 echo_area_display () | |
| 552 { | |
| 553 register int vpos; | |
| 769 | 554 FRAME_PTR f; |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
555 Lisp_Object mini_window; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
556 |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
557 /* Choose the minibuffer window for this display. |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
558 It is the minibuffer window used by the selected frame. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
559 mini_window = FRAME_MINIBUF_WINDOW (selected_frame); |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
560 /* This is the frame that window is in. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
561 f = XFRAME (WINDOW_FRAME (XWINDOW (mini_window))); |
| 277 | 562 |
| 769 | 563 if (! FRAME_VISIBLE_P (f)) |
| 277 | 564 return; |
| 565 | |
| 769 | 566 if (frame_garbaged) |
| 277 | 567 { |
|
3516
f1ca34ddfd84
(redisplay, echo_area_display): Use redraw_garbaged_frames.
Richard M. Stallman <rms@gnu.org>
parents:
3266
diff
changeset
|
568 redraw_garbaged_frames (); |
| 769 | 569 frame_garbaged = 0; |
| 277 | 570 } |
| 571 | |
| 572 if (echo_area_glyphs || minibuf_level == 0) | |
| 573 { | |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
574 echo_area_window = mini_window; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
575 |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
576 vpos = XFASTINT (XWINDOW (mini_window)->top); |
| 769 | 577 get_display_line (f, vpos, 0); |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
578 display_string (XWINDOW (mini_window), vpos, |
| 277 | 579 echo_area_glyphs ? echo_area_glyphs : "", |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
580 echo_area_glyphs ? echo_area_glyphs_length : -1, |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
581 0, 0, 0, 0, FRAME_WIDTH (f)); |
| 277 | 582 |
|
12410
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
583 #if 0 /* This just gets in the way. update_frame does the job. */ |
| 277 | 584 /* If desired cursor location is on this line, put it at end of text */ |
|
11649
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
585 if (cursor_in_echo_area) |
|
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
586 FRAME_CURSOR_Y (f) = vpos; |
| 769 | 587 if (FRAME_CURSOR_Y (f) == vpos) |
| 588 FRAME_CURSOR_X (f) = FRAME_DESIRED_GLYPHS (f)->used[vpos]; | |
|
12410
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
589 #endif |
| 727 | 590 |
| 591 /* Fill the rest of the minibuffer window with blank lines. */ | |
| 592 { | |
| 593 int i; | |
| 594 | |
|
3689
82856e3ea14d
(echo_area_display): Use XFASTINT on ->height.
Richard M. Stallman <rms@gnu.org>
parents:
3648
diff
changeset
|
595 for (i = vpos + 1; |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
596 i < vpos + XFASTINT (XWINDOW (mini_window)->height); i++) |
| 727 | 597 { |
| 769 | 598 get_display_line (f, i, 0); |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
599 display_string (XWINDOW (mini_window), vpos, |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
600 "", 0, 0, 0, 0, 0, FRAME_WIDTH (f)); |
| 727 | 601 } |
| 602 } | |
| 277 | 603 } |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
604 else if (!EQ (mini_window, selected_window)) |
| 277 | 605 windows_or_buffers_changed++; |
| 606 | |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
607 if (EQ (mini_window, selected_window)) |
| 277 | 608 this_line_bufpos = 0; |
| 609 | |
| 610 previous_echo_glyphs = echo_area_glyphs; | |
| 611 } | |
|
6308
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
612 |
|
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
613 #ifdef HAVE_X_WINDOWS |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
614 static char frame_title_buf[512]; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
615 static char *frame_title_ptr; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
616 |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
617 static int |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
618 store_frame_title (str, mincol, maxcol) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
619 char *str; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
620 int mincol, maxcol; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
621 { |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
622 char *limit; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
623 if (maxcol < 0 || maxcol >= sizeof(frame_title_buf)) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
624 maxcol = sizeof (frame_title_buf); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
625 limit = &frame_title_buf[maxcol]; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
626 while (*str != '\0' && frame_title_ptr < limit) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
627 *frame_title_ptr++ = *str++; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
628 while (frame_title_ptr < &frame_title_buf[mincol]) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
629 *frame_title_ptr++ = ' '; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
630 return frame_title_ptr - frame_title_buf; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
631 } |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
632 |
|
6308
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
633 static void |
|
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
634 x_consider_frame_title (frame) |
|
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
635 Lisp_Object frame; |
|
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
636 { |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
637 Lisp_Object fmt; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
638 struct buffer *obuf; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
639 int len; |
|
6308
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
640 FRAME_PTR f = XFRAME (frame); |
|
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
641 |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
642 if (!FRAME_X_P (f) || FRAME_MINIBUF_ONLY_P (f) || f->explicit_name) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
643 return; |
|
11767
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
644 |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
645 /* Do we have more than one visible frame on this X display? */ |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
646 { |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
647 Lisp_Object tail; |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
648 |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
649 for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr) |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
650 { |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
651 FRAME_PTR tf = XFRAME (XCONS (tail)->car); |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
652 |
|
11948
19ebc17d1288
(x_consider_frame_title): Use FRAME_KBOARD.
Karl Heuer <kwzh@gnu.org>
parents:
11920
diff
changeset
|
653 if (tf != f && FRAME_KBOARD (tf) == FRAME_KBOARD (f) |
|
19ebc17d1288
(x_consider_frame_title): Use FRAME_KBOARD.
Karl Heuer <kwzh@gnu.org>
parents:
11920
diff
changeset
|
654 && !FRAME_MINIBUF_ONLY_P (tf) |
|
11767
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
655 && (FRAME_VISIBLE_P (tf) || FRAME_ICONIFIED_P (tf))) |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
656 break; |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
657 } |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
658 |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
659 multiple_frames = CONSP (tail); |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
660 } |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
661 |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
662 obuf = current_buffer; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
663 Fset_buffer (XWINDOW (f->selected_window)->buffer); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
664 fmt = (FRAME_ICONIFIED_P (f) ? Vicon_title_format : Vframe_title_format); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
665 frame_title_ptr = frame_title_buf; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
666 len = display_mode_element (XWINDOW (f->selected_window), 0, 0, 0, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
667 0, sizeof (frame_title_buf), fmt); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
668 frame_title_ptr = 0; |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
669 set_buffer_internal (obuf); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
670 /* Set the name only if it's changed. This avoids consing |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
671 in the common case where it hasn't. (If it turns out that we've |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
672 already wasted too much time by walking through the list with |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
673 display_mode_element, then we might need to optimize at a higher |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
674 level than this.) */ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
675 if (! STRINGP (f->name) || XSTRING (f->name)->size != len |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
676 || bcmp (frame_title_buf, XSTRING (f->name)->data, len) != 0) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
677 x_implicitly_set_name (f, make_string (frame_title_buf, len), Qnil); |
|
6308
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
678 } |
|
8783
226c214398a6
[!HAVE_X_WINDOWS] (frame_title_ptr): define as always null.
Karl Heuer <kwzh@gnu.org>
parents:
8772
diff
changeset
|
679 #else |
|
226c214398a6
[!HAVE_X_WINDOWS] (frame_title_ptr): define as always null.
Karl Heuer <kwzh@gnu.org>
parents:
8772
diff
changeset
|
680 #define frame_title_ptr ((char *)0) |
|
8918
1be99ca9da45
[!HAVE_X_WINDOWS] (store_frame_title): Dummy macro.
Karl Heuer <kwzh@gnu.org>
parents:
8834
diff
changeset
|
681 #define store_frame_title(str, mincol, maxcol) 0 |
|
6308
f34deea7dc2c
(x_consider_frame_title): New function, extracted from display_mode_line.
Karl Heuer <kwzh@gnu.org>
parents:
6278
diff
changeset
|
682 #endif |
| 277 | 683 |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
684 /* Prepare for redisplay by updating menu-bar item lists when appropriate. |
| 11499 | 685 This can call eval. */ |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
686 |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
687 void |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
688 prepare_menu_bars () |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
689 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
690 register struct window *w = XWINDOW (selected_window); |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
691 int all_windows; |
|
10667
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
692 struct gcpro gcpro1, gcpro2; |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
693 |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
694 all_windows = (update_mode_lines || buffer_shared > 1 |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
695 || windows_or_buffers_changed); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
696 |
|
11920
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
697 /* Update all frame titles based on their buffer names, etc. |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
698 We do this before the menu bars so that the buffer-menu |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
699 will show the up-to-date frame titles. |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
700 |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
701 This used to be done after the menu bars, for a reason that |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
702 was stated as follows but which I do not understand: |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
703 "We do this after the menu bars so that the frame will first |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
704 create its menu bar using the name `emacs' if no other name |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
705 has yet been specified." |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
706 I think that is no longer a concern. */ |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
707 #ifdef HAVE_X_WINDOWS |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
708 if (windows_or_buffers_changed) |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
709 { |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
710 Lisp_Object tail, frame; |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
711 |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
712 FOR_EACH_FRAME (tail, frame) |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
713 if (FRAME_VISIBLE_P (XFRAME (frame)) |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
714 || FRAME_ICONIFIED_P (XFRAME (frame))) |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
715 x_consider_frame_title (frame); |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
716 } |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
717 #endif |
|
d7c32bcc6cc5
(prepare_menu_bars): Update frame titles before menu bars.
Karl Heuer <kwzh@gnu.org>
parents:
11910
diff
changeset
|
718 |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
719 /* Update the menu bar item lists, if appropriate. |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
720 This has to be done before any actual redisplay |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
721 or generation of display lines. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
722 if (all_windows) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
723 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
724 Lisp_Object tail, frame; |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
725 int count = specpdl_ptr - specpdl; |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
726 |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
727 record_unwind_protect (Fstore_match_data, Fmatch_data ()); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
728 |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
729 FOR_EACH_FRAME (tail, frame) |
|
10667
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
730 { |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
731 /* If a window on this frame changed size, |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
732 report that to the user and clear the size-change flag. */ |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
733 if (FRAME_WINDOW_SIZES_CHANGED (XFRAME (frame))) |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
734 { |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
735 Lisp_Object functions; |
|
11719
9238e21a6f09
(prepare_menu_bars): Clear size-change flag before running
Richard M. Stallman <rms@gnu.org>
parents:
11649
diff
changeset
|
736 /* Clear flag first in case we get error below. */ |
|
9238e21a6f09
(prepare_menu_bars): Clear size-change flag before running
Richard M. Stallman <rms@gnu.org>
parents:
11649
diff
changeset
|
737 FRAME_WINDOW_SIZES_CHANGED (XFRAME (frame)) = 0; |
|
10667
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
738 functions = Vwindow_size_change_functions; |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
739 GCPRO2 (tail, functions); |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
740 while (CONSP (functions)) |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
741 { |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
742 call1 (XCONS (functions)->car, frame); |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
743 functions = XCONS (functions)->cdr; |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
744 } |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
745 UNGCPRO; |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
746 } |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
747 GCPRO1 (tail); |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
748 update_menu_bar (XFRAME (frame), 0); |
|
10667
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
749 UNGCPRO; |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
750 } |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
751 |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
752 unbind_to (count, Qnil); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
753 } |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
754 else |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
755 update_menu_bar (selected_frame, 1); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
756 } |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
757 |
| 769 | 758 /* Do a frame update, taking possible shortcuts into account. |
| 277 | 759 This is the main external entry point for redisplay. |
| 760 | |
| 761 If the last redisplay displayed an echo area message and that | |
| 762 message is no longer requested, we clear the echo area | |
| 763 or bring back the minibuffer if that is in use. | |
| 764 | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
765 Do not call eval from within this function. |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
766 Calls to eval after the call to echo_area_display would confuse |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
767 the display_line mechanism and would cause a crash. |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
768 Calls to eval before that point will work most of the time, |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
769 but can still lose, because this function |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
770 can be called from signal handlers; with alarms set up; |
| 277 | 771 or with synchronous processes running. |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
772 |
| 277 | 773 See Fcall_process; if you called it from here, it could be |
| 774 entered recursively. */ | |
| 775 | |
|
6650
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
776 static int do_verify_charstarts; |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
777 |
|
9530
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
778 /* Counter is used to clear the face cache |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
779 no more than once ever 1000 redisplays. */ |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
780 static int clear_face_cache_count; |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
781 |
| 277 | 782 void |
| 783 redisplay () | |
| 784 { | |
| 785 register struct window *w = XWINDOW (selected_window); | |
| 786 register int pause; | |
| 787 int must_finish = 0; | |
| 788 int all_windows; | |
| 789 register int tlbufpos, tlendpos; | |
| 790 struct position pos; | |
| 791 | |
| 792 if (noninteractive) | |
| 793 return; | |
| 794 | |
|
1656
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
795 /* Set the visible flags for all frames. |
|
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
796 Do this before checking for resized or garbaged frames; they want |
|
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
797 to know if their frames are visible. |
|
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
798 See the comment in frame.h for FRAME_SAMPLE_VISIBILITY. */ |
|
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
799 { |
|
2252
9793d8654e23
* frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents:
2189
diff
changeset
|
800 Lisp_Object tail, frame; |
|
1656
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
801 |
|
2252
9793d8654e23
* frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents:
2189
diff
changeset
|
802 FOR_EACH_FRAME (tail, frame) |
|
11444
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
803 { |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
804 FRAME_SAMPLE_VISIBILITY (XFRAME (frame)); |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
805 |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
806 /* Clear out all the display lines in which we will generate the |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
807 glyphs to display. */ |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
808 init_desired_glyphs (XFRAME (frame)); |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
809 } |
|
1656
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
810 } |
|
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
811 |
| 769 | 812 /* Notice any pending interrupt request to change frame size. */ |
| 277 | 813 do_pending_window_change (); |
| 814 | |
| 769 | 815 if (frame_garbaged) |
| 277 | 816 { |
|
3516
f1ca34ddfd84
(redisplay, echo_area_display): Use redraw_garbaged_frames.
Richard M. Stallman <rms@gnu.org>
parents:
3266
diff
changeset
|
817 redraw_garbaged_frames (); |
| 769 | 818 frame_garbaged = 0; |
| 277 | 819 } |
| 820 | |
|
11444
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
821 prepare_menu_bars (); |
|
763c454b044e
(redisplay): Call init_desired_glyphs for each frame.
Richard M. Stallman <rms@gnu.org>
parents:
11354
diff
changeset
|
822 |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
823 if (windows_or_buffers_changed) |
| 277 | 824 update_mode_lines++; |
| 825 | |
| 826 /* Detect case that we need to write a star in the mode line. */ | |
| 827 if (XFASTINT (w->last_modified) < MODIFF | |
|
10303
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
828 && XFASTINT (w->last_modified) <= SAVE_MODIFF) |
| 277 | 829 { |
| 830 w->update_mode_line = Qt; | |
| 831 if (buffer_shared > 1) | |
| 832 update_mode_lines++; | |
| 833 } | |
| 834 | |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
835 /* If %c is in use, update it if needed. */ |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
836 if (!NILP (w->column_number_displayed) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
837 /* This alternative quickly identifies a common case |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
838 where no change is needed. */ |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
839 && !(PT == XFASTINT (w->last_point) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
840 && XFASTINT (w->last_modified) >= MODIFF) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
841 && XFASTINT (w->column_number_displayed) != current_column ()) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
842 w->update_mode_line = Qt; |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
843 |
| 769 | 844 FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1; |
| 277 | 845 |
| 846 all_windows = update_mode_lines || buffer_shared > 1; | |
| 847 | |
| 848 /* If specs for an arrow have changed, do thorough redisplay | |
| 849 to ensure we remove any arrow that should no longer exist. */ | |
|
1527
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
850 if (! EQ (Voverlay_arrow_position, last_arrow_position) |
|
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
851 || ! EQ (Voverlay_arrow_string, last_arrow_string)) |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
852 all_windows = 1; |
| 277 | 853 |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
854 /* Normally the message* functions will have already displayed and |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
855 updated the echo area, but the frame may have been trashed, or |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
856 the update may have been preempted, so display the echo area |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
857 again here. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
858 if (echo_area_glyphs || previous_echo_glyphs) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
859 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
860 echo_area_display (); |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
861 must_finish = 1; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
862 } |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
863 |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
864 /* If showing region, and mark has changed, must redisplay whole window. */ |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
865 if (((!NILP (Vtransient_mark_mode) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
866 && !NILP (XBUFFER (w->buffer)->mark_active)) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
867 != !NILP (w->region_showing)) |
|
3937
adcbf7680a35
* xdisp.c (redisplay): If we're not already showing the region,
Jim Blandy <jimb@redhat.com>
parents:
3880
diff
changeset
|
868 || (!NILP (w->region_showing) |
|
adcbf7680a35
* xdisp.c (redisplay): If we're not already showing the region,
Jim Blandy <jimb@redhat.com>
parents:
3880
diff
changeset
|
869 && !EQ (w->region_showing, |
|
adcbf7680a35
* xdisp.c (redisplay): If we're not already showing the region,
Jim Blandy <jimb@redhat.com>
parents:
3880
diff
changeset
|
870 Fmarker_position (XBUFFER (w->buffer)->mark)))) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
871 this_line_bufpos = -1; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
872 |
| 277 | 873 tlbufpos = this_line_bufpos; |
| 874 tlendpos = this_line_endpos; | |
| 485 | 875 if (!all_windows && tlbufpos > 0 && NILP (w->update_mode_line) |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
876 && !current_buffer->clip_changed |
| 769 | 877 && FRAME_VISIBLE_P (XFRAME (w->frame)) |
| 277 | 878 /* Make sure recorded data applies to current buffer, etc */ |
| 879 && this_line_buffer == current_buffer | |
| 880 && current_buffer == XBUFFER (w->buffer) | |
| 485 | 881 && NILP (w->force_start) |
| 277 | 882 /* Point must be on the line that we have info recorded about */ |
| 6705 | 883 && PT >= tlbufpos |
| 884 && PT <= Z - tlendpos | |
| 277 | 885 /* All text outside that line, including its final newline, |
| 886 must be unchanged */ | |
| 887 && (XFASTINT (w->last_modified) >= MODIFF | |
| 888 || (beg_unchanged >= tlbufpos - 1 | |
| 889 && GPT >= tlbufpos | |
| 528 | 890 /* If selective display, can't optimize |
| 891 if the changes start at the beginning of the line. */ | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
892 && ((INTEGERP (current_buffer->selective_display) |
| 528 | 893 && XINT (current_buffer->selective_display) > 0 |
| 894 ? (beg_unchanged >= tlbufpos | |
| 895 && GPT > tlbufpos) | |
| 896 : 1)) | |
| 277 | 897 && end_unchanged >= tlendpos |
| 898 && Z - GPT >= tlendpos))) | |
| 899 { | |
| 900 if (tlbufpos > BEGV && FETCH_CHAR (tlbufpos - 1) != '\n' | |
| 901 && (tlbufpos == ZV | |
| 902 || FETCH_CHAR (tlbufpos) == '\n')) | |
| 903 /* Former continuation line has disappeared by becoming empty */ | |
| 904 goto cancel; | |
| 905 else if (XFASTINT (w->last_modified) < MODIFF | |
| 906 || MINI_WINDOW_P (w)) | |
| 907 { | |
| 908 cursor_vpos = -1; | |
| 909 overlay_arrow_seen = 0; | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
910 zv_strings_seen = 0; |
| 277 | 911 display_text_line (w, tlbufpos, this_line_vpos, this_line_start_hpos, |
| 912 pos_tab_offset (w, tlbufpos)); | |
| 913 /* If line contains point, is not continued, | |
| 914 and ends at same distance from eob as before, we win */ | |
| 915 if (cursor_vpos >= 0 && this_line_bufpos | |
| 916 && this_line_endpos == tlendpos) | |
| 917 { | |
|
6650
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
918 /* If this is not the window's last line, |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
919 we must adjust the charstarts of the lines below. */ |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
920 if (this_line_vpos + 1 |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
921 < XFASTINT (w->top) + window_internal_height (w)) |
|
6643
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
922 { |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
923 int left = XFASTINT (w->left); |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
924 int *charstart_next_line |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
925 = FRAME_CURRENT_GLYPHS (XFRAME (WINDOW_FRAME (w)))->charstarts[this_line_vpos + 1]; |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
926 int adjust; |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
927 |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
928 if (Z - tlendpos == ZV) |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
929 /* This line ends at end of (accessible part of) buffer. |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
930 There is no newline to count. */ |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
931 adjust = Z - tlendpos - charstart_next_line[left]; |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
932 else |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
933 /* This line ends in a newline. |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
934 Must take account of the newline and the rest of the |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
935 text that follows. */ |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
936 adjust = Z - tlendpos + 1 - charstart_next_line[left]; |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
937 |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
938 adjust_window_charstarts (w, this_line_vpos, adjust); |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
939 } |
|
6619
b3631c88ec7e
(redisplay): Call adjust_window_charstarts
Richard M. Stallman <rms@gnu.org>
parents:
6612
diff
changeset
|
940 |
| 769 | 941 if (XFASTINT (w->width) != FRAME_WIDTH (XFRAME (WINDOW_FRAME (w)))) |
| 277 | 942 preserve_other_columns (w); |
| 943 goto update; | |
| 944 } | |
| 945 else | |
| 946 goto cancel; | |
| 947 } | |
|
12410
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
948 else if (PT == XFASTINT (w->last_point) |
|
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
949 /* Make sure the cursor was last displayed |
|
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
950 in this window. Otherwise we have to reposition it. */ |
|
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
951 && XINT (w->top) <= FRAME_CURSOR_Y (selected_frame) |
|
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
952 && (XINT (w->top) + XINT (w->height) |
|
1c02a5b45ae7
(echo_area_display): Don't set FRAME_CURSOR_... here.
Richard M. Stallman <rms@gnu.org>
parents:
12348
diff
changeset
|
953 > FRAME_CURSOR_Y (selected_frame))) |
| 277 | 954 { |
| 955 if (!must_finish) | |
| 956 { | |
| 957 do_pending_window_change (); | |
| 958 return; | |
| 959 } | |
| 960 goto update; | |
| 961 } | |
|
11641
748feea0a51a
(redisplay): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11531
diff
changeset
|
962 /* If highlighting the region, or if the cursor is in the echo area, |
|
748feea0a51a
(redisplay): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11531
diff
changeset
|
963 then we can't just move the cursor. */ |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
964 else if (! (!NILP (Vtransient_mark_mode) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
965 && !NILP (current_buffer->mark_active)) |
|
11641
748feea0a51a
(redisplay): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11531
diff
changeset
|
966 && NILP (w->region_showing) |
|
748feea0a51a
(redisplay): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11531
diff
changeset
|
967 && !cursor_in_echo_area) |
| 277 | 968 { |
| 969 pos = *compute_motion (tlbufpos, 0, | |
| 970 XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0, | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
971 0, |
| 6705 | 972 PT, 2, - (1 << (SHORTBITS - 1)), |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
973 window_internal_width (w) - 1, |
| 574 | 974 XINT (w->hscroll), |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
975 pos_tab_offset (w, tlbufpos), w); |
| 277 | 976 if (pos.vpos < 1) |
| 977 { | |
| 11810 | 978 int width = window_internal_width (w) - 1; |
| 769 | 979 FRAME_CURSOR_X (selected_frame) |
| 11810 | 980 = XFASTINT (w->left) + minmax (0, pos.hpos, width); |
| 769 | 981 FRAME_CURSOR_Y (selected_frame) = this_line_vpos; |
| 277 | 982 goto update; |
| 983 } | |
| 984 else | |
| 985 goto cancel; | |
| 986 } | |
| 987 cancel: | |
| 988 /* Text changed drastically or point moved off of line */ | |
| 769 | 989 cancel_line (this_line_vpos, selected_frame); |
| 277 | 990 } |
| 991 | |
| 992 this_line_bufpos = 0; | |
| 993 all_windows |= buffer_shared > 1; | |
| 994 | |
|
9530
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
995 clear_face_cache_count++; |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
996 |
| 277 | 997 if (all_windows) |
| 998 { | |
|
2252
9793d8654e23
* frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents:
2189
diff
changeset
|
999 Lisp_Object tail, frame; |
| 277 | 1000 |
| 9572 | 1001 #ifdef HAVE_FACES |
|
9530
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1002 /* Clear the face cache, only when we do a full redisplay |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1003 and not too often either. */ |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1004 if (clear_face_cache_count > 1000) |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1005 { |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1006 clear_face_cache (); |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1007 clear_face_cache_count = 0; |
|
a605bfe5bf8a
(redisplay): Call clear_face_cache instead
Richard M. Stallman <rms@gnu.org>
parents:
9451
diff
changeset
|
1008 } |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
1009 #endif |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
1010 |
| 277 | 1011 /* Recompute # windows showing selected buffer. |
| 433 | 1012 This will be incremented each time such a window is displayed. */ |
| 277 | 1013 buffer_shared = 0; |
| 1014 | |
|
2252
9793d8654e23
* frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents:
2189
diff
changeset
|
1015 FOR_EACH_FRAME (tail, frame) |
|
1718
f80c1f73f5b9
* xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents:
1656
diff
changeset
|
1016 { |
|
2252
9793d8654e23
* frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents:
2189
diff
changeset
|
1017 FRAME_PTR f = XFRAME (frame); |
|
10769
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1018 if (! FRAME_TERMCAP_P (f) || f == selected_frame) |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1019 { |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1020 |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1021 /* Mark all the scroll bars to be removed; we'll redeem the ones |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1022 we want when we redisplay their windows. */ |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1023 if (condemn_scroll_bars_hook) |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1024 (*condemn_scroll_bars_hook) (f); |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1025 |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1026 if (FRAME_VISIBLE_P (f)) |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1027 redisplay_windows (FRAME_ROOT_WINDOW (f)); |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1028 |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1029 /* Any scroll bars which redisplay_windows should have nuked |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1030 should now go away. */ |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1031 if (judge_scroll_bars_hook) |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1032 (*judge_scroll_bars_hook) (f); |
|
813b186e70d8
(redisplay): Don't display nonselected terminal frames.
Richard M. Stallman <rms@gnu.org>
parents:
10764
diff
changeset
|
1033 } |
|
1718
f80c1f73f5b9
* xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents:
1656
diff
changeset
|
1034 } |
| 277 | 1035 } |
| 769 | 1036 else if (FRAME_VISIBLE_P (selected_frame)) |
| 277 | 1037 { |
| 1038 redisplay_window (selected_window, 1); | |
| 769 | 1039 if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame)) |
| 277 | 1040 preserve_other_columns (w); |
| 1041 } | |
| 1042 | |
| 1043 update: | |
| 1044 /* Prevent various kinds of signals during display update. | |
| 1045 stdio is not robust about handling signals, | |
| 1046 which can cause an apparent I/O error. */ | |
| 1047 if (interrupt_input) | |
| 1048 unrequest_sigio (); | |
| 1049 stop_polling (); | |
| 1050 | |
| 769 | 1051 #ifdef MULTI_FRAME |
| 277 | 1052 if (all_windows) |
| 1053 { | |
| 1054 Lisp_Object tail; | |
| 1055 | |
| 1056 pause = 0; | |
| 1057 | |
| 769 | 1058 for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr) |
| 277 | 1059 { |
| 769 | 1060 FRAME_PTR f; |
| 277 | 1061 |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
1062 if (!FRAMEP (XCONS (tail)->car)) |
| 277 | 1063 continue; |
| 1064 | |
| 769 | 1065 f = XFRAME (XCONS (tail)->car); |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
1066 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
1067 if ((! FRAME_TERMCAP_P (f) || f == selected_frame) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
1068 && FRAME_VISIBLE_P (f)) |
| 277 | 1069 { |
| 769 | 1070 pause |= update_frame (f, 0, 0); |
| 277 | 1071 if (!pause) |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1072 { |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1073 mark_window_display_accurate (f->root_window, 1); |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1074 if (frame_up_to_date_hook != 0) |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1075 (*frame_up_to_date_hook) (f); |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1076 } |
| 277 | 1077 } |
| 1078 } | |
| 1079 } | |
| 1080 else | |
| 769 | 1081 #endif /* MULTI_FRAME */ |
| 368 | 1082 { |
| 769 | 1083 if (FRAME_VISIBLE_P (selected_frame)) |
| 1084 pause = update_frame (selected_frame, 0, 0); | |
|
11108
ad6e21535db6
(redisplay): Make sure pause is set before used.
Karl Heuer <kwzh@gnu.org>
parents:
11085
diff
changeset
|
1085 else |
|
ad6e21535db6
(redisplay): Make sure pause is set before used.
Karl Heuer <kwzh@gnu.org>
parents:
11085
diff
changeset
|
1086 pause = 0; |
|
1656
a532c5a23984
* xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents:
1600
diff
changeset
|
1087 |
| 433 | 1088 /* We may have called echo_area_display at the top of this |
| 769 | 1089 function. If the echo area is on another frame, that may |
| 1090 have put text on a frame other than the selected one, so the | |
| 1091 above call to update_frame would not have caught it. Catch | |
| 433 | 1092 it here. */ |
| 1093 { | |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1094 FRAME_PTR mini_frame |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1095 = XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window))); |
| 433 | 1096 |
| 769 | 1097 if (mini_frame != selected_frame) |
| 1098 pause |= update_frame (mini_frame, 0, 0); | |
| 433 | 1099 } |
| 368 | 1100 } |
| 277 | 1101 |
| 769 | 1102 /* If frame does not match, prevent doing single-line-update next time. |
| 277 | 1103 Also, don't forget to check every line to update the arrow. */ |
| 1104 if (pause) | |
| 1105 { | |
| 1106 this_line_bufpos = 0; | |
| 485 | 1107 if (!NILP (last_arrow_position)) |
| 277 | 1108 { |
| 1109 last_arrow_position = Qt; | |
| 1110 last_arrow_string = Qt; | |
| 1111 } | |
| 769 | 1112 /* If we pause after scrolling, some lines in current_frame |
| 277 | 1113 may be null, so preserve_other_columns won't be able to |
| 1114 preserve all the vertical-bar separators. So, avoid using it | |
| 1115 in that case. */ | |
| 769 | 1116 if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame)) |
| 277 | 1117 update_mode_lines = 1; |
| 1118 } | |
| 1119 | |
| 769 | 1120 /* Now text on frame agrees with windows, so |
| 277 | 1121 put info into the windows for partial redisplay to follow */ |
| 1122 | |
| 1123 if (!pause) | |
| 1124 { | |
| 1125 register struct buffer *b = XBUFFER (w->buffer); | |
| 1126 | |
| 1127 blank_end_of_window = 0; | |
| 1128 unchanged_modified = BUF_MODIFF (b); | |
| 1129 beg_unchanged = BUF_GPT (b) - BUF_BEG (b); | |
| 1130 end_unchanged = BUF_Z (b) - BUF_GPT (b); | |
| 1131 | |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1132 XSETFASTINT (w->last_point, BUF_PT (b)); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1133 XSETFASTINT (w->last_point_x, FRAME_CURSOR_X (selected_frame)); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1134 XSETFASTINT (w->last_point_y, FRAME_CURSOR_Y (selected_frame)); |
| 277 | 1135 |
| 1136 if (all_windows) | |
|
1017
d42877206c0a
* xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents:
973
diff
changeset
|
1137 mark_window_display_accurate (FRAME_ROOT_WINDOW (selected_frame), 1); |
| 277 | 1138 else |
| 1139 { | |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1140 b->clip_changed = 0; |
| 277 | 1141 w->update_mode_line = Qnil; |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1142 XSETFASTINT (w->last_modified, BUF_MODIFF (b)); |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
1143 w->window_end_valid = w->buffer; |
| 277 | 1144 last_arrow_position = Voverlay_arrow_position; |
| 1145 last_arrow_string = Voverlay_arrow_string; | |
|
6650
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
1146 if (do_verify_charstarts) |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
1147 verify_charstarts (w); |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1148 if (frame_up_to_date_hook != 0) |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
1149 (*frame_up_to_date_hook) (selected_frame); |
| 277 | 1150 } |
| 1151 update_mode_lines = 0; | |
| 1152 windows_or_buffers_changed = 0; | |
| 1153 } | |
| 1154 | |
| 1155 /* Start SIGIO interrupts coming again. | |
| 1156 Having them off during the code above | |
| 1157 makes it less likely one will discard output, | |
| 1158 but not impossible, since there might be stuff | |
| 1159 in the system buffer here. | |
| 1160 But it is much hairier to try to do anything about that. */ | |
| 1161 | |
| 1162 if (interrupt_input) | |
| 1163 request_sigio (); | |
| 1164 start_polling (); | |
| 1165 | |
| 769 | 1166 /* Change frame size now if a change is pending. */ |
| 277 | 1167 do_pending_window_change (); |
|
7752
7b1a7e4c7694
(redisplay): If have window change at end, redisplay again.
Richard M. Stallman <rms@gnu.org>
parents:
7473
diff
changeset
|
1168 |
|
7b1a7e4c7694
(redisplay): If have window change at end, redisplay again.
Richard M. Stallman <rms@gnu.org>
parents:
7473
diff
changeset
|
1169 /* If we just did a pending size change, redisplay again |
|
7b1a7e4c7694
(redisplay): If have window change at end, redisplay again.
Richard M. Stallman <rms@gnu.org>
parents:
7473
diff
changeset
|
1170 for the new size. */ |
|
7757
8d27747de7ca
(redisplay): Limit prev change to pause != 0.
Richard M. Stallman <rms@gnu.org>
parents:
7752
diff
changeset
|
1171 if (windows_or_buffers_changed && !pause) |
|
7752
7b1a7e4c7694
(redisplay): If have window change at end, redisplay again.
Richard M. Stallman <rms@gnu.org>
parents:
7473
diff
changeset
|
1172 redisplay (); |
| 277 | 1173 } |
| 1174 | |
| 1175 /* Redisplay, but leave alone any recent echo area message | |
| 1176 unless another message has been requested in its place. | |
| 1177 | |
| 1178 This is useful in situations where you need to redisplay but no | |
| 1179 user action has occurred, making it inappropriate for the message | |
| 1180 area to be cleared. See tracking_off and | |
| 1181 wait_reading_process_input for examples of these situations. */ | |
| 1182 | |
| 1183 redisplay_preserve_echo_area () | |
| 1184 { | |
| 1185 if (echo_area_glyphs == 0 && previous_echo_glyphs != 0) | |
| 1186 { | |
| 1187 echo_area_glyphs = previous_echo_glyphs; | |
| 1188 redisplay (); | |
| 1189 echo_area_glyphs = 0; | |
| 1190 } | |
| 1191 else | |
| 1192 redisplay (); | |
| 1193 } | |
| 1194 | |
| 1195 void | |
| 1196 mark_window_display_accurate (window, flag) | |
| 1197 Lisp_Object window; | |
| 1198 int flag; | |
| 1199 { | |
| 1200 register struct window *w; | |
| 1201 | |
| 485 | 1202 for (;!NILP (window); window = w->next) |
| 277 | 1203 { |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
1204 if (!WINDOWP (window)) abort (); |
| 277 | 1205 w = XWINDOW (window); |
| 1206 | |
| 485 | 1207 if (!NILP (w->buffer)) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1208 { |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1209 XSETFASTINT (w->last_modified, |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1210 !flag ? 0 : BUF_MODIFF (XBUFFER (w->buffer))); |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1211 |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1212 /* Record if we are showing a region, so can make sure to |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1213 update it fully at next redisplay. */ |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1214 w->region_showing = (!NILP (Vtransient_mark_mode) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1215 && !NILP (XBUFFER (w->buffer)->mark_active) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1216 ? Fmarker_position (XBUFFER (w->buffer)->mark) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1217 : Qnil); |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1218 } |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1219 |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
1220 w->window_end_valid = w->buffer; |
| 277 | 1221 w->update_mode_line = Qnil; |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1222 if (!NILP (w->buffer)) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1223 XBUFFER (w->buffer)->clip_changed = 0; |
| 277 | 1224 |
| 485 | 1225 if (!NILP (w->vchild)) |
| 277 | 1226 mark_window_display_accurate (w->vchild, flag); |
| 485 | 1227 if (!NILP (w->hchild)) |
| 277 | 1228 mark_window_display_accurate (w->hchild, flag); |
| 1229 } | |
| 1230 | |
| 1231 if (flag) | |
| 1232 { | |
| 1233 last_arrow_position = Voverlay_arrow_position; | |
| 1234 last_arrow_string = Voverlay_arrow_string; | |
| 1235 } | |
| 1236 else | |
| 1237 { | |
| 1238 /* t is unequal to any useful value of Voverlay_arrow_... */ | |
| 1239 last_arrow_position = Qt; | |
| 1240 last_arrow_string = Qt; | |
| 1241 } | |
| 1242 } | |
| 1243 | |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1244 /* Update the menu bar item list for frame F. |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1245 This has to be done before we start to fill in any display lines, |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1246 because it can call eval. |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1247 |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1248 If SAVE_MATCH_DATA is 1, we must save and restore it here. */ |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1249 |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1250 static void |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1251 update_menu_bar (f, save_match_data) |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1252 FRAME_PTR f; |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1253 int save_match_data; |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1254 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1255 struct buffer *old = current_buffer; |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1256 Lisp_Object window; |
|
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1257 register struct window *w; |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1258 |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1259 window = FRAME_SELECTED_WINDOW (f); |
|
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1260 w = XWINDOW (window); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1261 |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1262 if (update_mode_lines) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1263 w->update_mode_line = Qt; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1264 |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
1265 if ( |
|
5676
b5027523c90d
Wed Jan 26 12:23:12 1994 Frederic Pierresteguy (fp@mole.gnu.ai.mit.edu)
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5658
diff
changeset
|
1266 #ifdef USE_X_TOOLKIT |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
1267 FRAME_EXTERNAL_MENU_BAR (f) |
|
5676
b5027523c90d
Wed Jan 26 12:23:12 1994 Frederic Pierresteguy (fp@mole.gnu.ai.mit.edu)
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5658
diff
changeset
|
1268 #else |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
1269 FRAME_MENU_BAR_LINES (f) > 0 |
|
5676
b5027523c90d
Wed Jan 26 12:23:12 1994 Frederic Pierresteguy (fp@mole.gnu.ai.mit.edu)
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5658
diff
changeset
|
1270 #endif |
|
6872
7c12310c8b86
(update_menu_bar): Take frame as arg.
Richard M. Stallman <rms@gnu.org>
parents:
6741
diff
changeset
|
1271 ) |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1272 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1273 /* If the user has switched buffers or windows, we need to |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1274 recompute to reflect the new bindings. But we'll |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1275 recompute when update_mode_lines is set too; that means |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1276 that people can use force-mode-line-update to request |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1277 that the menu bar be recomputed. The adverse effect on |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1278 the rest of the redisplay algorithm is about the same as |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1279 windows_or_buffers_changed anyway. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1280 if (windows_or_buffers_changed |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
1281 || !NILP (w->update_mode_line) |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1282 || (XFASTINT (w->last_modified) < MODIFF |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1283 && (XFASTINT (w->last_modified) |
|
12022
497ad07c31c2
(update_menu_bar): Do update if region display has changed.
Karl Heuer <kwzh@gnu.org>
parents:
12017
diff
changeset
|
1284 <= BUF_SAVE_MODIFF (XBUFFER (w->buffer)))) |
|
497ad07c31c2
(update_menu_bar): Do update if region display has changed.
Karl Heuer <kwzh@gnu.org>
parents:
12017
diff
changeset
|
1285 || ((!NILP (Vtransient_mark_mode) |
|
497ad07c31c2
(update_menu_bar): Do update if region display has changed.
Karl Heuer <kwzh@gnu.org>
parents:
12017
diff
changeset
|
1286 && !NILP (XBUFFER (w->buffer)->mark_active)) |
|
497ad07c31c2
(update_menu_bar): Do update if region display has changed.
Karl Heuer <kwzh@gnu.org>
parents:
12017
diff
changeset
|
1287 != !NILP (w->region_showing))) |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1288 { |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1289 struct buffer *prev = current_buffer; |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1290 int count = specpdl_ptr - specpdl; |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1291 |
|
12171
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
1292 set_buffer_internal_1 (XBUFFER (w->buffer)); |
|
12017
0d73575a1c0e
(update_menu_bar): Reverse test of save_match_data.
Karl Heuer <kwzh@gnu.org>
parents:
11971
diff
changeset
|
1293 if (save_match_data) |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1294 record_unwind_protect (Fstore_match_data, Fmatch_data ()); |
|
12171
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
1295 if (NILP (Voverriding_local_map_menu_flag)) |
|
12263
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
1296 { |
|
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
1297 specbind (Qoverriding_terminal_local_map, Qnil); |
|
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
1298 specbind (Qoverriding_local_map, Qnil); |
|
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
1299 } |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1300 |
|
12141
9265a67ccf1a
(update_menu_bar): Run activate-menubar-hook
Karl Heuer <kwzh@gnu.org>
parents:
12081
diff
changeset
|
1301 /* Run the Lucid hook. */ |
|
9265a67ccf1a
(update_menu_bar): Run activate-menubar-hook
Karl Heuer <kwzh@gnu.org>
parents:
12081
diff
changeset
|
1302 call1 (Vrun_hooks, Qactivate_menubar_hook); |
|
9265a67ccf1a
(update_menu_bar): Run activate-menubar-hook
Karl Heuer <kwzh@gnu.org>
parents:
12081
diff
changeset
|
1303 /* If it has changed current-menubar from previous value, |
|
9265a67ccf1a
(update_menu_bar): Run activate-menubar-hook
Karl Heuer <kwzh@gnu.org>
parents:
12081
diff
changeset
|
1304 really recompute the menubar from the value. */ |
|
9265a67ccf1a
(update_menu_bar): Run activate-menubar-hook
Karl Heuer <kwzh@gnu.org>
parents:
12081
diff
changeset
|
1305 if (! NILP (Vlucid_menu_bar_dirty_flag)) |
|
9265a67ccf1a
(update_menu_bar): Run activate-menubar-hook
Karl Heuer <kwzh@gnu.org>
parents:
12081
diff
changeset
|
1306 call0 (Qrecompute_lucid_menubar); |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
1307 call1 (Vrun_hooks, Qmenu_bar_update_hook); |
|
6134
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
1308 FRAME_MENU_BAR_ITEMS (f) = menu_bar_items (FRAME_MENU_BAR_ITEMS (f)); |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
1309 #ifdef USE_X_TOOLKIT |
|
6630
cd036c4e1dfd
(update_menu_bar): Pass 0 to set_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6628
diff
changeset
|
1310 set_frame_menubar (f, 0); |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
1311 #endif /* USE_X_TOOLKIT */ |
|
11761
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1312 |
|
d110042c1d95
(prepare_menu_bars): Save and restore the match data.
Richard M. Stallman <rms@gnu.org>
parents:
11719
diff
changeset
|
1313 unbind_to (count, Qnil); |
|
12171
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
1314 set_buffer_internal_1 (prev); |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1315 } |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1316 } |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1317 } |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1318 |
| 277 | 1319 int do_id = 1; |
| 1320 | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1321 /* Redisplay WINDOW and its subwindows and siblings. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1322 |
| 277 | 1323 static void |
| 1324 redisplay_windows (window) | |
| 1325 Lisp_Object window; | |
| 1326 { | |
| 485 | 1327 for (; !NILP (window); window = XWINDOW (window)->next) |
| 277 | 1328 redisplay_window (window, 0); |
| 1329 } | |
| 1330 | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1331 /* Redisplay window WINDOW and its subwindows. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1332 |
| 277 | 1333 static void |
| 1334 redisplay_window (window, just_this_one) | |
| 1335 Lisp_Object window; | |
| 1336 int just_this_one; | |
| 1337 { | |
| 1338 register struct window *w = XWINDOW (window); | |
|
1718
f80c1f73f5b9
* xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents:
1656
diff
changeset
|
1339 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
| 277 | 1340 int height; |
| 6705 | 1341 register int lpoint = PT; |
| 277 | 1342 struct buffer *old = current_buffer; |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1343 register int width = window_internal_width (w) - 1; |
| 277 | 1344 register int startp; |
| 1345 register int hscroll = XINT (w->hscroll); | |
| 1346 struct position pos; | |
| 6705 | 1347 int opoint = PT; |
| 277 | 1348 int tem; |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1349 int update_mode_line; |
|
11971
d72fbbe25780
(redisplay_window): Don't use try_window_id if
Karl Heuer <kwzh@gnu.org>
parents:
11968
diff
changeset
|
1350 struct Lisp_Vector *dp = window_display_table (w); |
| 277 | 1351 |
| 769 | 1352 if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */ |
| 277 | 1353 |
| 1354 /* If this is a combination window, do its children; that's all. */ | |
| 1355 | |
| 485 | 1356 if (!NILP (w->vchild)) |
| 277 | 1357 { |
| 1358 redisplay_windows (w->vchild); | |
| 1359 return; | |
| 1360 } | |
| 485 | 1361 if (!NILP (w->hchild)) |
| 277 | 1362 { |
| 1363 redisplay_windows (w->hchild); | |
| 1364 return; | |
| 1365 } | |
| 485 | 1366 if (NILP (w->buffer)) |
| 277 | 1367 abort (); |
| 433 | 1368 |
| 1369 height = window_internal_height (w); | |
|
11108
ad6e21535db6
(redisplay): Make sure pause is set before used.
Karl Heuer <kwzh@gnu.org>
parents:
11085
diff
changeset
|
1370 update_mode_line = (!NILP (w->update_mode_line) || update_mode_lines); |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1371 if (XBUFFER (w->buffer)->clip_changed) |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1372 update_mode_line = 1; |
| 433 | 1373 |
| 1374 if (MINI_WINDOW_P (w)) | |
| 1375 { | |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1376 if (w == XWINDOW (echo_area_window) && echo_area_glyphs) |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1377 /* We've already displayed the echo area glyphs in this window. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1378 goto finish_scroll_bars; |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1379 else if (w != XWINDOW (minibuf_window)) |
| 433 | 1380 { |
|
12629
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1381 /* This is a minibuffer, but it's not the currently active one, |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1382 so clear it. */ |
|
55241c80f448
(echo_area_display): Use selected frame's minibuf window
Richard M. Stallman <rms@gnu.org>
parents:
12598
diff
changeset
|
1383 int vpos = XFASTINT (w->top); |
| 433 | 1384 int i; |
| 1385 | |
| 1386 for (i = 0; i < height; i++) | |
| 1387 { | |
| 769 | 1388 get_display_line (f, vpos + i, 0); |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
1389 display_string (w, vpos + i, "", 0, 0, 0, 1, 0, width); |
| 433 | 1390 } |
| 1391 | |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
1392 goto finish_scroll_bars; |
| 433 | 1393 } |
| 1394 } | |
| 277 | 1395 |
| 1396 /* Otherwise set up data on this window; select its buffer and point value */ | |
| 1397 | |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1398 if (update_mode_line) |
|
11888
23ec1c193810
(redisplay_window): Use set_buffer_internal_1.
Karl Heuer <kwzh@gnu.org>
parents:
11874
diff
changeset
|
1399 set_buffer_internal_1 (XBUFFER (w->buffer)); |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1400 else |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1401 set_buffer_temp (XBUFFER (w->buffer)); |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1402 |
| 6705 | 1403 opoint = PT; |
| 277 | 1404 |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1405 /* If %c is in mode line, update it if needed. */ |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1406 if (!NILP (w->column_number_displayed) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1407 /* This alternative quickly identifies a common case |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1408 where no change is needed. */ |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1409 && !(PT == XFASTINT (w->last_point) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1410 && XFASTINT (w->last_modified) >= MODIFF) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1411 && XFASTINT (w->column_number_displayed) != current_column ()) |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1412 update_mode_line = 1; |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1413 |
|
10303
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1414 /* Count number of windows showing the selected buffer. |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1415 An indirect buffer counts as its base buffer. */ |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1416 |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1417 if (!just_this_one) |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1418 { |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1419 struct buffer *current_base, *window_base; |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1420 current_base = current_buffer; |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1421 window_base = XBUFFER (XWINDOW (selected_window)->buffer); |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1422 if (current_base->base_buffer) |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1423 current_base = current_base->base_buffer; |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1424 if (window_base->base_buffer) |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1425 window_base = window_base->base_buffer; |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1426 if (current_base == window_base) |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1427 buffer_shared++; |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
1428 } |
| 277 | 1429 |
| 1430 /* POINT refers normally to the selected window. | |
| 1431 For any other window, set up appropriate value. */ | |
| 1432 | |
| 1433 if (!EQ (window, selected_window)) | |
| 1434 { | |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1435 int new_pt = marker_position (w->pointm); |
|
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1436 if (new_pt < BEGV) |
| 277 | 1437 { |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1438 new_pt = BEGV; |
|
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1439 Fset_marker (w->pointm, make_number (new_pt), Qnil); |
| 277 | 1440 } |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1441 else if (new_pt > (ZV - 1)) |
| 277 | 1442 { |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1443 new_pt = ZV; |
|
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1444 Fset_marker (w->pointm, make_number (new_pt), Qnil); |
| 277 | 1445 } |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1446 /* We don't use SET_PT so that the point-motion hooks don't run. */ |
|
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1447 BUF_PT (current_buffer) = new_pt; |
| 277 | 1448 } |
| 1449 | |
|
9412
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1450 /* If any of the character widths specified in the display table |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1451 have changed, invalidate the width run cache. It's true that this |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1452 may be a bit late to catch such changes, but the rest of |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1453 redisplay goes (non-fatally) haywire when the display table is |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1454 changed, so why should we worry about doing any better? */ |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1455 if (current_buffer->width_run_cache) |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1456 { |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1457 struct Lisp_Vector *disptab = buffer_display_table (); |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1458 |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1459 if (! disptab_matches_widthtab (disptab, |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1460 XVECTOR (current_buffer->width_table))) |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1461 { |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1462 invalidate_region_cache (current_buffer, |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1463 current_buffer->width_run_cache, |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1464 BEG, Z); |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1465 recompute_width_table (current_buffer, disptab); |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1466 } |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1467 } |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
1468 |
| 277 | 1469 /* If window-start is screwed up, choose a new one. */ |
| 1470 if (XMARKER (w->start)->buffer != current_buffer) | |
| 1471 goto recenter; | |
| 1472 | |
| 1473 startp = marker_position (w->start); | |
| 1474 | |
| 433 | 1475 /* Handle case where place to start displaying has been specified, |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1476 unless the specified location is outside the accessible range. */ |
| 485 | 1477 if (!NILP (w->force_start)) |
| 277 | 1478 { |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1479 /* Forget any recorded base line for line number display. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1480 w->base_line_number = Qnil; |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1481 /* Redisplay the mode line. Select the buffer properly for that. */ |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1482 if (!update_mode_line) |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1483 { |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1484 set_buffer_temp (old); |
|
11888
23ec1c193810
(redisplay_window): Use set_buffer_internal_1.
Karl Heuer <kwzh@gnu.org>
parents:
11874
diff
changeset
|
1485 set_buffer_internal_1 (XBUFFER (w->buffer)); |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1486 update_mode_line = 1; |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1487 w->update_mode_line = Qt; |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1488 } |
| 277 | 1489 w->force_start = Qnil; |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1490 XSETFASTINT (w->last_modified, 0); |
| 433 | 1491 if (startp < BEGV) startp = BEGV; |
| 1492 if (startp > ZV) startp = ZV; | |
| 277 | 1493 try_window (window, startp); |
| 1494 if (cursor_vpos < 0) | |
| 1495 { | |
| 1496 /* If point does not appear, move point so it does appear */ | |
| 1497 pos = *compute_motion (startp, 0, | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1498 (((EQ (window, minibuf_window) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1499 && startp == BEG) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1500 ? minibuf_prompt_width : 0) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1501 + (hscroll ? 1 - hscroll : 0)), |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1502 0, |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1503 ZV, height / 2, |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1504 - (1 << (SHORTBITS - 1)), |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1505 width, hscroll, pos_tab_offset (w, startp), w); |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1506 BUF_PT (current_buffer) = pos.bufpos; |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
1507 if (w != XWINDOW (selected_window)) |
| 6705 | 1508 Fset_marker (w->pointm, make_number (PT), Qnil); |
| 277 | 1509 else |
| 1510 { | |
|
5340
fcd6e0da3380
(redisplay_window): Before altering lpoint,
Richard M. Stallman <rms@gnu.org>
parents:
5230
diff
changeset
|
1511 if (current_buffer == old) |
| 6705 | 1512 lpoint = PT; |
| 11810 | 1513 FRAME_CURSOR_X (f) = (XFASTINT (w->left) |
| 1514 + minmax (0, pos.hpos, width)); | |
| 769 | 1515 FRAME_CURSOR_Y (f) = pos.vpos + XFASTINT (w->top); |
| 277 | 1516 } |
|
9218
db4473eb2265
(redisplay_window): If we set PT, and that alters a region
Richard M. Stallman <rms@gnu.org>
parents:
9104
diff
changeset
|
1517 /* If we are highlighting the region, |
|
db4473eb2265
(redisplay_window): If we set PT, and that alters a region
Richard M. Stallman <rms@gnu.org>
parents:
9104
diff
changeset
|
1518 then we just changed the region, so redisplay to show it. */ |
|
db4473eb2265
(redisplay_window): If we set PT, and that alters a region
Richard M. Stallman <rms@gnu.org>
parents:
9104
diff
changeset
|
1519 if (!NILP (Vtransient_mark_mode) |
|
db4473eb2265
(redisplay_window): If we set PT, and that alters a region
Richard M. Stallman <rms@gnu.org>
parents:
9104
diff
changeset
|
1520 && !NILP (current_buffer->mark_active)) |
|
9420
836113a97d92
(redisplay_window): Fix Oct 1 change:
Richard M. Stallman <rms@gnu.org>
parents:
9412
diff
changeset
|
1521 { |
|
836113a97d92
(redisplay_window): Fix Oct 1 change:
Richard M. Stallman <rms@gnu.org>
parents:
9412
diff
changeset
|
1522 cancel_my_columns (XWINDOW (window)); |
|
836113a97d92
(redisplay_window): Fix Oct 1 change:
Richard M. Stallman <rms@gnu.org>
parents:
9412
diff
changeset
|
1523 try_window (window, startp); |
|
836113a97d92
(redisplay_window): Fix Oct 1 change:
Richard M. Stallman <rms@gnu.org>
parents:
9412
diff
changeset
|
1524 } |
| 277 | 1525 } |
| 1526 goto done; | |
| 1527 } | |
| 1528 | |
| 1529 /* Handle case where text has not changed, only point, | |
| 769 | 1530 and it has not moved off the frame */ |
| 277 | 1531 |
| 1532 /* This code is not used for minibuffer for the sake of | |
| 1533 the case of redisplaying to replace an echo area message; | |
| 1534 since in that case the minibuffer contents per se are usually unchanged. | |
| 1535 This code is of no real use in the minibuffer since | |
| 1536 the handling of this_line_bufpos, etc., | |
| 1537 in redisplay handles the same cases. */ | |
| 1538 | |
| 1539 if (XFASTINT (w->last_modified) >= MODIFF | |
|
12493
f8ada5acbaec
(redisplay_window): Fix typos in clip_changed change.
Richard M. Stallman <rms@gnu.org>
parents:
12472
diff
changeset
|
1540 && PT >= startp && !current_buffer->clip_changed |
| 769 | 1541 && (just_this_one || XFASTINT (w->width) == FRAME_WIDTH (f)) |
|
11085
a9c7a7f91693
(redisplay_window): Skip the only-point-has-changed
Richard M. Stallman <rms@gnu.org>
parents:
11066
diff
changeset
|
1542 /* If force-mode-line-update was called, really redisplay; |
|
a9c7a7f91693
(redisplay_window): Skip the only-point-has-changed
Richard M. Stallman <rms@gnu.org>
parents:
11066
diff
changeset
|
1543 that's how redisplay is forced after e.g. changing |
|
a9c7a7f91693
(redisplay_window): Skip the only-point-has-changed
Richard M. Stallman <rms@gnu.org>
parents:
11066
diff
changeset
|
1544 buffer-invisibility-spec. */ |
|
11111
e3022a32d11d
(try_window_id): Stop scan at bottom of window, not one line later.
Karl Heuer <kwzh@gnu.org>
parents:
11108
diff
changeset
|
1545 && NILP (w->update_mode_line) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1546 /* Can't use this case if highlighting a region. */ |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1547 && !(!NILP (Vtransient_mark_mode) && !NILP (current_buffer->mark_active)) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1548 && NILP (w->region_showing) |
|
7927
e02087efad68
(redisplay_window): Don't use shortcut if window_end_vpos is out of date.
Karl Heuer <kwzh@gnu.org>
parents:
7913
diff
changeset
|
1549 /* If end pos is out of date, scroll bar and percentage will be wrong */ |
|
e02087efad68
(redisplay_window): Don't use shortcut if window_end_vpos is out of date.
Karl Heuer <kwzh@gnu.org>
parents:
7913
diff
changeset
|
1550 && INTEGERP (w->window_end_vpos) |
|
e02087efad68
(redisplay_window): Don't use shortcut if window_end_vpos is out of date.
Karl Heuer <kwzh@gnu.org>
parents:
7913
diff
changeset
|
1551 && XFASTINT (w->window_end_vpos) < XFASTINT (w->height) |
| 277 | 1552 && !EQ (window, minibuf_window)) |
| 1553 { | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1554 pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0), 0, |
|
11111
e3022a32d11d
(try_window_id): Stop scan at bottom of window, not one line later.
Karl Heuer <kwzh@gnu.org>
parents:
11108
diff
changeset
|
1555 PT, height, 0, width, hscroll, |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1556 pos_tab_offset (w, startp), w); |
| 277 | 1557 |
| 1558 if (pos.vpos < height) | |
| 1559 { | |
| 769 | 1560 /* Ok, point is still on frame */ |
| 1561 if (w == XWINDOW (FRAME_SELECTED_WINDOW (f))) | |
| 277 | 1562 { |
| 1563 /* These variables are supposed to be origin 1 */ | |
| 11810 | 1564 FRAME_CURSOR_X (f) = (XFASTINT (w->left) |
| 1565 + minmax (0, pos.hpos, width)); | |
| 769 | 1566 FRAME_CURSOR_Y (f) = pos.vpos + XFASTINT (w->top); |
| 277 | 1567 } |
| 1568 /* This doesn't do the trick, because if a window to the right of | |
| 1569 this one must be redisplayed, this does nothing because there | |
| 769 | 1570 is nothing in DesiredFrame yet, and then the other window is |
| 277 | 1571 redisplayed, making likes that are empty in this window's columns. |
| 769 | 1572 if (XFASTINT (w->width) != FRAME_WIDTH (f)) |
| 277 | 1573 preserve_my_columns (w); |
| 1574 */ | |
| 1575 goto done; | |
| 1576 } | |
| 1577 /* Don't bother trying redisplay with same start; | |
| 1578 we already know it will lose */ | |
| 1579 } | |
| 1580 /* If current starting point was originally the beginning of a line | |
| 1581 but no longer is, find a new starting point. */ | |
| 485 | 1582 else if (!NILP (w->start_at_line_beg) |
|
8594
4d8d02befd11
(redisplay_window): Don't access text before BEGV.
Richard M. Stallman <rms@gnu.org>
parents:
8514
diff
changeset
|
1583 && !(startp <= BEGV |
| 277 | 1584 || FETCH_CHAR (startp - 1) == '\n')) |
| 1585 { | |
| 1586 goto recenter; | |
| 1587 } | |
| 1588 else if (just_this_one && !MINI_WINDOW_P (w) | |
| 6705 | 1589 && PT >= startp |
| 277 | 1590 && XFASTINT (w->last_modified) |
|
3648
9838d64cc5ae
* xdisp.c (redisplay_window): Don't call try_window_id if the
Jim Blandy <jimb@redhat.com>
parents:
3586
diff
changeset
|
1591 /* or else vmotion on first line won't work. */ |
|
9838d64cc5ae
* xdisp.c (redisplay_window): Don't call try_window_id if the
Jim Blandy <jimb@redhat.com>
parents:
3586
diff
changeset
|
1592 && ! NILP (w->start_at_line_beg) |
| 277 | 1593 && ! EQ (w->window_end_valid, Qnil) |
|
12493
f8ada5acbaec
(redisplay_window): Fix typos in clip_changed change.
Richard M. Stallman <rms@gnu.org>
parents:
12472
diff
changeset
|
1594 && do_id && !current_buffer->clip_changed |
| 277 | 1595 && !blank_end_of_window |
| 769 | 1596 && XFASTINT (w->width) == FRAME_WIDTH (f) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1597 /* Can't use this case if highlighting a region. */ |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1598 && !(!NILP (Vtransient_mark_mode) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1599 && !NILP (current_buffer->mark_active)) |
|
11971
d72fbbe25780
(redisplay_window): Don't use try_window_id if
Karl Heuer <kwzh@gnu.org>
parents:
11968
diff
changeset
|
1600 /* Don't use try_window_id if newline |
|
d72fbbe25780
(redisplay_window): Don't use try_window_id if
Karl Heuer <kwzh@gnu.org>
parents:
11968
diff
changeset
|
1601 doesn't display as the end of a line. */ |
|
d72fbbe25780
(redisplay_window): Don't use try_window_id if
Karl Heuer <kwzh@gnu.org>
parents:
11968
diff
changeset
|
1602 && !(dp != 0 && VECTORP (DISP_CHAR_VECTOR (dp, '\n'))) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
1603 && NILP (w->region_showing) |
| 277 | 1604 && EQ (last_arrow_position, Voverlay_arrow_position) |
| 1605 && EQ (last_arrow_string, Voverlay_arrow_string) | |
| 769 | 1606 && (tem = try_window_id (FRAME_SELECTED_WINDOW (f))) |
| 277 | 1607 && tem != -2) |
| 1608 { | |
| 1609 /* tem > 0 means success. tem == -1 means choose new start. | |
| 1610 tem == -2 means try again with same start, | |
| 1611 and nothing but whitespace follows the changed stuff. | |
| 1612 tem == 0 means try again with same start. */ | |
| 1613 if (tem > 0) | |
| 1614 goto done; | |
| 1615 } | |
| 1616 else if (startp >= BEGV && startp <= ZV | |
| 1617 /* Avoid starting display at end of buffer! */ | |
| 433 | 1618 && (startp < ZV || startp == BEGV |
| 277 | 1619 || (XFASTINT (w->last_modified) >= MODIFF))) |
| 1620 { | |
| 1621 /* Try to redisplay starting at same place as before */ | |
| 769 | 1622 /* If point has not moved off frame, accept the results */ |
| 277 | 1623 try_window (window, startp); |
| 1624 if (cursor_vpos >= 0) | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1625 { |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1626 if (!just_this_one || current_buffer->clip_changed |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1627 || beg_unchanged < startp) |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1628 /* Forget any recorded base line for line number display. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1629 w->base_line_number = Qnil; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1630 goto done; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1631 } |
| 277 | 1632 else |
| 1633 cancel_my_columns (w); | |
| 1634 } | |
| 1635 | |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1636 XSETFASTINT (w->last_modified, 0); |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1637 /* Redisplay the mode line. Select the buffer properly for that. */ |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1638 if (!update_mode_line) |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1639 { |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1640 set_buffer_temp (old); |
|
11888
23ec1c193810
(redisplay_window): Use set_buffer_internal_1.
Karl Heuer <kwzh@gnu.org>
parents:
11874
diff
changeset
|
1641 set_buffer_internal_1 (XBUFFER (w->buffer)); |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1642 update_mode_line = 1; |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1643 w->update_mode_line = Qt; |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1644 } |
| 277 | 1645 |
| 1646 /* Try to scroll by specified few lines */ | |
| 1647 | |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1648 if (scroll_step && !current_buffer->clip_changed) |
| 277 | 1649 { |
| 6705 | 1650 if (PT > startp) |
| 277 | 1651 { |
| 11810 | 1652 pos = *vmotion (Z - XFASTINT (w->window_end_pos), scroll_step, w); |
| 277 | 1653 if (pos.vpos >= height) |
| 1654 goto scroll_fail; | |
| 1655 } | |
| 1656 | |
| 11810 | 1657 pos = *vmotion (startp, (PT < startp ? - scroll_step : scroll_step), w); |
| 277 | 1658 |
| 6705 | 1659 if (PT >= pos.bufpos) |
| 277 | 1660 { |
| 1661 try_window (window, pos.bufpos); | |
| 1662 if (cursor_vpos >= 0) | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1663 { |
|
12472
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1664 if (!just_this_one || current_buffer->clip_changed |
|
f92dc5a9194d
(clip_changed): Variable deleted.
Richard M. Stallman <rms@gnu.org>
parents:
12410
diff
changeset
|
1665 || beg_unchanged < startp) |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1666 /* Forget any recorded base line for line number display. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1667 w->base_line_number = Qnil; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1668 goto done; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1669 } |
| 277 | 1670 else |
| 1671 cancel_my_columns (w); | |
| 1672 } | |
| 1673 scroll_fail: ; | |
| 1674 } | |
| 1675 | |
| 1676 /* Finally, just choose place to start which centers point */ | |
| 1677 | |
| 1678 recenter: | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1679 /* Forget any previously recorded base line for line number display. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1680 w->base_line_number = Qnil; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1681 |
| 11810 | 1682 pos = *vmotion (PT, - (height / 2), w); |
| 277 | 1683 try_window (window, pos.bufpos); |
| 1684 | |
| 1685 startp = marker_position (w->start); | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1686 w->start_at_line_beg |
|
8594
4d8d02befd11
(redisplay_window): Don't access text before BEGV.
Richard M. Stallman <rms@gnu.org>
parents:
8514
diff
changeset
|
1687 = (startp == BEGV || FETCH_CHAR (startp - 1) == '\n') ? Qt : Qnil; |
| 277 | 1688 |
| 1689 done: | |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1690 if ((update_mode_line |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1691 /* If window not full width, must redo its mode line |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1692 if the window to its side is being redone */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1693 || (!just_this_one && width < FRAME_WIDTH (f) - 1) |
|
10441
f1fc7b6e5fa4
(redisplay, redisplay_window, display_mode_line, decode_mode_spec): Use window
Karl Heuer <kwzh@gnu.org>
parents:
10416
diff
changeset
|
1694 || INTEGERP (w->base_line_pos) |
|
f1fc7b6e5fa4
(redisplay, redisplay_window, display_mode_line, decode_mode_spec): Use window
Karl Heuer <kwzh@gnu.org>
parents:
10416
diff
changeset
|
1695 || (!NILP (w->column_number_displayed) |
|
f1fc7b6e5fa4
(redisplay, redisplay_window, display_mode_line, decode_mode_spec): Use window
Karl Heuer <kwzh@gnu.org>
parents:
10416
diff
changeset
|
1696 && XFASTINT (w->column_number_displayed) != current_column ())) |
| 277 | 1697 && height != XFASTINT (w->height)) |
| 1698 display_mode_line (w); | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1699 if (! line_number_displayed |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1700 && ! BUFFERP (w->base_line_pos)) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1701 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1702 w->base_line_pos = Qnil; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1703 w->base_line_number = Qnil; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
1704 } |
| 277 | 1705 |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
1706 /* When we reach a frame's selected window, redo the frame's menu bar. */ |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1707 if (update_mode_line |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
1708 #ifdef USE_X_TOOLKIT |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
1709 && FRAME_EXTERNAL_MENU_BAR (f) |
|
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
1710 #else |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
1711 && FRAME_MENU_BAR_LINES (f) > 0 |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
1712 #endif |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
1713 && EQ (FRAME_SELECTED_WINDOW (f), window)) |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
1714 display_menu_bar (w); |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
1715 |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
1716 finish_scroll_bars: |
|
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
1717 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1718 { |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1719 int start, end, whole; |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1720 |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1721 /* Calculate the start and end positions for the current window. |
|
2874
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1722 At some point, it would be nice to choose between scrollbars |
|
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1723 which reflect the whole buffer size, with special markers |
|
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1724 indicating narrowing, and scrollbars which reflect only the |
|
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1725 visible region. |
|
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1726 |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1727 Note that minibuffers sometimes aren't displaying any text. */ |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1728 if (! MINI_WINDOW_P (w) |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1729 || (w == XWINDOW (minibuf_window) && ! echo_area_glyphs)) |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1730 { |
|
2929
f3c44426bed2
Fix the fix to scrollbar computaaFix the fix to the fix for scrollbar computation.
Jim Blandy <jimb@redhat.com>
parents:
2904
diff
changeset
|
1731 whole = ZV - BEGV; |
|
11108
ad6e21535db6
(redisplay): Make sure pause is set before used.
Karl Heuer <kwzh@gnu.org>
parents:
11085
diff
changeset
|
1732 start = marker_position (w->start) - BEGV; |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1733 /* I don't think this is guaranteed to be right. For the |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1734 moment, we'll pretend it is. */ |
|
3880
ef6a4d39634b
* xdisp.c (redisplay_window): Remember to compute end relative to
Jim Blandy <jimb@redhat.com>
parents:
3788
diff
changeset
|
1735 end = (Z - XINT (w->window_end_pos)) - BEGV; |
|
2874
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1736 |
|
80805283464a
* xdisp.c (redisplay_window): Make the scrollbar reflect the
Jim Blandy <jimb@redhat.com>
parents:
2848
diff
changeset
|
1737 if (end < start) end = start; |
|
2929
f3c44426bed2
Fix the fix to scrollbar computaaFix the fix to the fix for scrollbar computation.
Jim Blandy <jimb@redhat.com>
parents:
2904
diff
changeset
|
1738 if (whole < (end - start)) whole = end - start; |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1739 } |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1740 else |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1741 start = end = whole = 0; |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1742 |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
1743 /* Indicate what this scroll bar ought to be displaying now. */ |
|
3788
41a297faf4ac
* xdisp.c (redisplay_window): No need to subtract one from start
Jim Blandy <jimb@redhat.com>
parents:
3750
diff
changeset
|
1744 (*set_vertical_scroll_bar_hook) (w, end - start, whole, start); |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1745 |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
1746 /* Note that we actually used the scroll bar attached to this window, |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1747 so it shouldn't be deleted at the end of redisplay. */ |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
1748 (*redeem_scroll_bar_hook) (w); |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1749 } |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1750 |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1751 BUF_PT (current_buffer) = opoint; |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1752 if (update_mode_line) |
|
11888
23ec1c193810
(redisplay_window): Use set_buffer_internal_1.
Karl Heuer <kwzh@gnu.org>
parents:
11874
diff
changeset
|
1753 set_buffer_internal_1 (old); |
|
10764
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1754 else |
|
a3e635f3501e
(redisplay_window): If we update the mode line,
Richard M. Stallman <rms@gnu.org>
parents:
10688
diff
changeset
|
1755 set_buffer_temp (old); |
|
8417
3f2854a14982
(redisplay_window): Avoid using SET_PT to change point temporarily.
Richard M. Stallman <rms@gnu.org>
parents:
8386
diff
changeset
|
1756 BUF_PT (current_buffer) = lpoint; |
| 277 | 1757 } |
| 1758 | |
| 1759 /* Do full redisplay on one window, starting at position `pos'. */ | |
| 1760 | |
| 1761 static void | |
| 1762 try_window (window, pos) | |
| 1763 Lisp_Object window; | |
| 1764 register int pos; | |
| 1765 { | |
| 1766 register struct window *w = XWINDOW (window); | |
| 1767 register int height = window_internal_height (w); | |
| 1768 register int vpos = XFASTINT (w->top); | |
| 1769 register int last_text_vpos = vpos; | |
| 1770 int tab_offset = pos_tab_offset (w, pos); | |
| 769 | 1771 FRAME_PTR f = XFRAME (w->frame); |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1772 int width = window_internal_width (w) - 1; |
| 277 | 1773 struct position val; |
| 1774 | |
| 1775 Fset_marker (w->start, make_number (pos), Qnil); | |
| 1776 cursor_vpos = -1; | |
| 1777 overlay_arrow_seen = 0; | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1778 zv_strings_seen = 0; |
| 277 | 1779 val.hpos = XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0; |
| 1780 | |
| 1781 while (--height >= 0) | |
| 1782 { | |
| 1783 val = *display_text_line (w, pos, vpos, val.hpos, tab_offset); | |
| 1784 tab_offset += width; | |
|
10641
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1785 /* For the first line displayed, display_text_line |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1786 subtracts the prompt width from the tab offset. |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1787 But it does not affect the value of our variable tab_offset. |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1788 So we do the subtraction again, |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1789 for the sake of continuation lines of that first line. */ |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1790 if (MINI_WINDOW_P (w) && vpos == XFASTINT (w->top)) |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1791 tab_offset -= minibuf_prompt_width; |
|
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
1792 |
| 277 | 1793 if (val.vpos) tab_offset = 0; |
| 1794 vpos++; | |
| 1795 if (pos != val.bufpos) | |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1796 { |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1797 int invis = 0; |
|
6065
ab1aef4b0e07
(try_window): Add #ifdef USE_TEXT_PROPERTIES around call to Fget_text_property.
Karl Heuer <kwzh@gnu.org>
parents:
5942
diff
changeset
|
1798 #ifdef USE_TEXT_PROPERTIES |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1799 Lisp_Object invis_prop; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1800 invis_prop = Fget_char_property (val.bufpos-1, Qinvisible, window); |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1801 invis = TEXT_PROP_MEANS_INVISIBLE (invis_prop); |
|
6065
ab1aef4b0e07
(try_window): Add #ifdef USE_TEXT_PROPERTIES around call to Fget_text_property.
Karl Heuer <kwzh@gnu.org>
parents:
5942
diff
changeset
|
1802 #endif |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1803 |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1804 last_text_vpos |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1805 /* Next line, unless prev line ended in end of buffer with no cr */ |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1806 = vpos - (val.vpos |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1807 && (FETCH_CHAR (val.bufpos - 1) != '\n' || invis)); |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
1808 } |
| 277 | 1809 pos = val.bufpos; |
| 1810 } | |
| 1811 | |
| 1812 /* If last line is continued in middle of character, | |
| 769 | 1813 include the split character in the text considered on the frame */ |
| 277 | 1814 if (val.hpos < (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0)) |
| 1815 pos++; | |
| 1816 | |
| 769 | 1817 /* If bottom just moved off end of frame, change mode line percentage. */ |
| 277 | 1818 if (XFASTINT (w->window_end_pos) == 0 |
| 1819 && Z != pos) | |
| 1820 w->update_mode_line = Qt; | |
| 1821 | |
| 769 | 1822 /* Say where last char on frame will be, once redisplay is finished. */ |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1823 XSETFASTINT (w->window_end_pos, Z - pos); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1824 XSETFASTINT (w->window_end_vpos, last_text_vpos - XFASTINT (w->top)); |
| 277 | 1825 /* But that is not valid info until redisplay finishes. */ |
| 1826 w->window_end_valid = Qnil; | |
| 1827 } | |
| 1828 | |
| 1829 /* Try to redisplay when buffer is modified locally, | |
| 1830 computing insert/delete line to preserve text outside | |
| 1831 the bounds of the changes. | |
| 1832 Return 1 if successful, 0 if if cannot tell what to do, | |
| 1833 or -1 to tell caller to find a new window start, | |
| 1834 or -2 to tell caller to do normal redisplay with same window start. */ | |
| 1835 | |
| 1836 static int | |
| 1837 try_window_id (window) | |
| 1838 Lisp_Object window; | |
| 1839 { | |
| 1840 int pos; | |
| 1841 register struct window *w = XWINDOW (window); | |
| 1842 register int height = window_internal_height (w); | |
| 769 | 1843 FRAME_PTR f = XFRAME (w->frame); |
| 277 | 1844 int top = XFASTINT (w->top); |
| 1845 int start = marker_position (w->start); | |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
1846 int width = window_internal_width (w) - 1; |
| 277 | 1847 int hscroll = XINT (w->hscroll); |
| 1848 int lmargin = hscroll > 0 ? 1 - hscroll : 0; | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1849 int did_motion; |
| 277 | 1850 register int vpos; |
| 1851 register int i, tem; | |
| 1852 int last_text_vpos = 0; | |
| 1853 int stop_vpos; | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
1854 int selective = (INTEGERP (current_buffer->selective_display) |
|
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
1855 ? XINT (current_buffer->selective_display) |
|
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
1856 : !NILP (current_buffer->selective_display) ? -1 : 0); |
| 277 | 1857 |
| 1858 struct position val, bp, ep, xp, pp; | |
| 1859 int scroll_amount = 0; | |
| 1860 int delta; | |
| 1861 int tab_offset, epto; | |
| 1862 | |
| 1863 if (GPT - BEG < beg_unchanged) | |
| 1864 beg_unchanged = GPT - BEG; | |
| 1865 if (Z - GPT < end_unchanged) | |
| 1866 end_unchanged = Z - GPT; | |
| 1867 | |
|
5739
0709eb474647
(try_window_id): Don't pass value beyond ZV to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
5676
diff
changeset
|
1868 if (beg_unchanged + BEG < start) |
| 277 | 1869 return 0; /* Give up if changes go above top of window */ |
| 1870 | |
| 1871 /* Find position before which nothing is changed. */ | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1872 bp = *compute_motion (start, 0, lmargin, 0, |
|
11111
e3022a32d11d
(try_window_id): Stop scan at bottom of window, not one line later.
Karl Heuer <kwzh@gnu.org>
parents:
11108
diff
changeset
|
1873 min (ZV, beg_unchanged + BEG), height, 0, |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1874 width, hscroll, pos_tab_offset (w, start), w); |
| 277 | 1875 if (bp.vpos >= height) |
| 368 | 1876 { |
|
11111
e3022a32d11d
(try_window_id): Stop scan at bottom of window, not one line later.
Karl Heuer <kwzh@gnu.org>
parents:
11108
diff
changeset
|
1877 if (PT < bp.bufpos) |
| 368 | 1878 { |
| 769 | 1879 /* All changes are below the frame, and point is on the frame. |
| 1880 We don't need to change the frame at all. | |
| 368 | 1881 But we need to update window_end_pos to account for |
| 1882 any change in buffer size. */ | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1883 bp = *compute_motion (start, 0, lmargin, 0, |
| 371 | 1884 Z, height, 0, |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1885 width, hscroll, pos_tab_offset (w, start), w); |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1886 XSETFASTINT (w->window_end_vpos, height); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
1887 XSETFASTINT (w->window_end_pos, Z - bp.bufpos); |
|
11108
ad6e21535db6
(redisplay): Make sure pause is set before used.
Karl Heuer <kwzh@gnu.org>
parents:
11085
diff
changeset
|
1888 goto findpoint; |
| 368 | 1889 } |
| 1890 return 0; | |
| 1891 } | |
| 277 | 1892 |
| 1893 vpos = bp.vpos; | |
| 1894 | |
| 769 | 1895 /* Find beginning of that frame line. Must display from there. */ |
| 11810 | 1896 bp = *vmotion (bp.bufpos, 0, w); |
| 277 | 1897 |
| 1898 pos = bp.bufpos; | |
| 1899 val.hpos = lmargin; | |
| 1900 if (pos < start) | |
| 1901 return -1; | |
| 1902 | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1903 did_motion = 0; |
| 277 | 1904 /* If about to start displaying at the beginning of a continuation line, |
| 769 | 1905 really start with previous frame line, in case it was not |
| 277 | 1906 continued when last redisplayed */ |
| 528 | 1907 if ((bp.contin && bp.bufpos - 1 == beg_unchanged && vpos > 0) |
| 1908 || | |
| 1909 /* Likewise if we have to worry about selective display. */ | |
|
5942
c51e1ff87656
(try_window_id, display_text_line): Treat blank lines specially in
Karl Heuer <kwzh@gnu.org>
parents:
5936
diff
changeset
|
1910 (selective > 0 && bp.bufpos - 1 == beg_unchanged && vpos > 0)) |
| 277 | 1911 { |
| 11810 | 1912 bp = *vmotion (bp.bufpos, -1, w); |
| 277 | 1913 --vpos; |
| 1914 pos = bp.bufpos; | |
| 1915 } | |
| 1916 | |
| 1917 if (bp.contin && bp.hpos != lmargin) | |
| 1918 { | |
| 1919 val.hpos = bp.prevhpos - width + lmargin; | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1920 did_motion = 1; |
| 277 | 1921 pos--; |
| 1922 } | |
| 1923 | |
| 1924 bp.vpos = vpos; | |
| 1925 | |
| 1926 /* Find first visible newline after which no more is changed. */ | |
| 1927 tem = find_next_newline (Z - max (end_unchanged, Z - ZV), 1); | |
|
5942
c51e1ff87656
(try_window_id, display_text_line): Treat blank lines specially in
Karl Heuer <kwzh@gnu.org>
parents:
5936
diff
changeset
|
1928 if (selective > 0) |
|
c51e1ff87656
(try_window_id, display_text_line): Treat blank lines specially in
Karl Heuer <kwzh@gnu.org>
parents:
5936
diff
changeset
|
1929 while (tem < ZV - 1 && (indented_beyond_p (tem, selective))) |
| 277 | 1930 tem = find_next_newline (tem, 1); |
| 1931 | |
| 1932 /* Compute the cursor position after that newline. */ | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1933 ep = *compute_motion (pos, vpos, val.hpos, did_motion, tem, |
| 277 | 1934 height, - (1 << (SHORTBITS - 1)), |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1935 width, hscroll, pos_tab_offset (w, bp.bufpos), w); |
| 277 | 1936 |
| 769 | 1937 /* If changes reach past the text available on the frame, |
| 1938 just display rest of frame. */ | |
| 277 | 1939 if (ep.bufpos > Z - XFASTINT (w->window_end_pos)) |
| 1940 stop_vpos = height; | |
| 1941 else | |
| 1942 stop_vpos = ep.vpos; | |
| 1943 | |
| 1944 /* If no newline before ep, the line ep is on includes some changes | |
| 1945 that must be displayed. Make sure we don't stop before it. */ | |
| 1946 /* Also, if changes reach all the way until ep.bufpos, | |
| 1947 it is possible that something was deleted after the | |
| 1948 newline before it, so the following line must be redrawn. */ | |
| 1949 if (stop_vpos == ep.vpos | |
| 1950 && (ep.bufpos == BEGV | |
| 1951 || FETCH_CHAR (ep.bufpos - 1) != '\n' | |
| 1952 || ep.bufpos == Z - end_unchanged)) | |
| 1953 stop_vpos = ep.vpos + 1; | |
| 1954 | |
| 1955 cursor_vpos = -1; | |
| 1956 overlay_arrow_seen = 0; | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1957 zv_strings_seen = 0; |
| 277 | 1958 |
| 1959 /* If changes do not reach to bottom of window, | |
| 1960 figure out how much to scroll the rest of the window */ | |
| 1961 if (stop_vpos < height) | |
| 1962 { | |
| 1963 /* Now determine how far up or down the rest of the window has moved */ | |
| 1964 epto = pos_tab_offset (w, ep.bufpos); | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1965 xp = *compute_motion (ep.bufpos, ep.vpos, ep.hpos, 1, |
| 277 | 1966 Z - XFASTINT (w->window_end_pos), |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1967 10000, 0, width, hscroll, epto, w); |
| 277 | 1968 scroll_amount = xp.vpos - XFASTINT (w->window_end_vpos); |
| 1969 | |
| 769 | 1970 /* Is everything on frame below the changes whitespace? |
| 277 | 1971 If so, no scrolling is really necessary. */ |
| 1972 for (i = ep.bufpos; i < xp.bufpos; i++) | |
| 1973 { | |
| 1974 tem = FETCH_CHAR (i); | |
| 1975 if (tem != ' ' && tem != '\n' && tem != '\t') | |
| 1976 break; | |
| 1977 } | |
| 1978 if (i == xp.bufpos) | |
| 1979 return -2; | |
| 1980 | |
|
9330
28fcacb58a38
(try_window_id): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9325
diff
changeset
|
1981 XSETFASTINT (w->window_end_vpos, |
|
28fcacb58a38
(try_window_id): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9325
diff
changeset
|
1982 XFASTINT (w->window_end_vpos) + scroll_amount); |
| 277 | 1983 |
| 769 | 1984 /* Before doing any scrolling, verify that point will be on frame. */ |
| 6705 | 1985 if (PT > ep.bufpos && !(PT <= xp.bufpos && xp.bufpos < height)) |
| 277 | 1986 { |
| 6705 | 1987 if (PT <= xp.bufpos) |
| 277 | 1988 { |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1989 pp = *compute_motion (ep.bufpos, ep.vpos, ep.hpos, 1, |
| 6705 | 1990 PT, height, - (1 << (SHORTBITS - 1)), |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1991 width, hscroll, epto, w); |
| 277 | 1992 } |
| 1993 else | |
| 1994 { | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
1995 pp = *compute_motion (xp.bufpos, xp.vpos, xp.hpos, 1, |
| 6705 | 1996 PT, height, - (1 << (SHORTBITS - 1)), |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1997 width, hscroll, |
|
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
1998 pos_tab_offset (w, xp.bufpos), w); |
| 277 | 1999 } |
| 6705 | 2000 if (pp.bufpos < PT || pp.vpos == height) |
| 277 | 2001 return 0; |
| 2002 cursor_vpos = pp.vpos + top; | |
| 11810 | 2003 cursor_hpos = XFASTINT (w->left) + minmax (0, pp.hpos, width); |
| 277 | 2004 } |
| 2005 | |
| 2006 if (stop_vpos - scroll_amount >= height | |
| 2007 || ep.bufpos == xp.bufpos) | |
| 2008 { | |
| 2009 if (scroll_amount < 0) | |
| 2010 stop_vpos -= scroll_amount; | |
| 2011 scroll_amount = 0; | |
| 2012 /* In this path, we have altered window_end_vpos | |
| 2013 and not left it negative. | |
| 2014 We must make sure that, in case display is preempted | |
| 769 | 2015 before the frame changes to reflect what we do here, |
| 277 | 2016 further updates will not come to try_window_id |
| 769 | 2017 and assume the frame and window_end_vpos match. */ |
| 277 | 2018 blank_end_of_window = 1; |
| 2019 } | |
| 2020 else if (!scroll_amount) | |
|
6650
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2021 { |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2022 /* Even if we don't need to scroll, we must adjust the |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2023 charstarts of subsequent lines (that we won't redisplay) |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2024 according to the amount of text inserted or deleted. */ |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2025 int oldpos = FRAME_CURRENT_GLYPHS (f)->charstarts[ep.vpos + top][0]; |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2026 int adjust = ep.bufpos - oldpos; |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2027 adjust_window_charstarts (w, ep.vpos + top - 1, adjust); |
|
a406a09cb770
(redisplay): do_verify_charstarts controls whether to call verify_charstarts.
Richard M. Stallman <rms@gnu.org>
parents:
6643
diff
changeset
|
2028 } |
| 277 | 2029 else if (bp.bufpos == Z - end_unchanged) |
| 2030 { | |
| 2031 /* If reprinting everything is nearly as fast as scrolling, | |
| 2032 don't bother scrolling. Can happen if lines are short. */ | |
| 769 | 2033 if (scroll_cost (f, bp.vpos + top - scroll_amount, |
| 277 | 2034 top + height - max (0, scroll_amount), |
| 2035 scroll_amount) | |
| 2036 > xp.bufpos - bp.bufpos - 20) | |
| 2037 /* Return "try normal display with same window-start." | |
| 2038 Too bad we can't prevent further scroll-thinking. */ | |
| 2039 return -2; | |
| 2040 /* If pure deletion, scroll up as many lines as possible. | |
| 2041 In common case of killing a line, this can save the | |
| 2042 following line from being overwritten by scrolling | |
| 2043 and therefore having to be redrawn. */ | |
| 769 | 2044 tem = scroll_frame_lines (f, bp.vpos + top - scroll_amount, |
|
6628
c359dfd21b00
(try_window_id): Pass new arg to scroll_frame_lines.
Richard M. Stallman <rms@gnu.org>
parents:
6622
diff
changeset
|
2045 top + height - max (0, scroll_amount), |
|
c359dfd21b00
(try_window_id): Pass new arg to scroll_frame_lines.
Richard M. Stallman <rms@gnu.org>
parents:
6622
diff
changeset
|
2046 scroll_amount, bp.bufpos); |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2047 if (!tem) |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2048 stop_vpos = height; |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2049 else |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2050 { |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2051 /* scroll_frame_lines did not properly adjust subsequent |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2052 lines' charstarts in the case where the text of the |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2053 screen line at bp.vpos has changed. |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2054 (This can happen in a deletion that ends in mid-line.) |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2055 To adjust properly, we need to make things constent at |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2056 the position ep. |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2057 So do a second adjust to make that happen. |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2058 Note that stop_vpos >= ep.vpos, so it is sufficient |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2059 to update the charstarts for lines at ep.vpos and below. */ |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2060 int oldstart |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2061 = FRAME_CURRENT_GLYPHS (f)->charstarts[ep.vpos + top][0]; |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2062 adjust_window_charstarts (w, ep.vpos + top - 1, |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2063 ep.bufpos - oldstart); |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2064 } |
| 277 | 2065 } |
| 2066 else if (scroll_amount) | |
| 2067 { | |
| 2068 /* If reprinting everything is nearly as fast as scrolling, | |
| 2069 don't bother scrolling. Can happen if lines are short. */ | |
| 2070 /* Note that if scroll_amount > 0, xp.bufpos - bp.bufpos is an | |
| 2071 overestimate of cost of reprinting, since xp.bufpos | |
| 2072 would end up below the bottom of the window. */ | |
| 769 | 2073 if (scroll_cost (f, ep.vpos + top - scroll_amount, |
| 277 | 2074 top + height - max (0, scroll_amount), |
| 2075 scroll_amount) | |
| 2076 > xp.bufpos - ep.bufpos - 20) | |
| 2077 /* Return "try normal display with same window-start." | |
| 2078 Too bad we can't prevent further scroll-thinking. */ | |
| 2079 return -2; | |
| 769 | 2080 tem = scroll_frame_lines (f, ep.vpos + top - scroll_amount, |
| 277 | 2081 top + height - max (0, scroll_amount), |
|
6628
c359dfd21b00
(try_window_id): Pass new arg to scroll_frame_lines.
Richard M. Stallman <rms@gnu.org>
parents:
6622
diff
changeset
|
2082 scroll_amount, ep.bufpos); |
| 277 | 2083 if (!tem) stop_vpos = height; |
| 2084 } | |
| 2085 } | |
| 2086 | |
| 2087 /* In any case, do not display past bottom of window */ | |
| 2088 if (stop_vpos >= height) | |
| 2089 { | |
| 2090 stop_vpos = height; | |
| 2091 scroll_amount = 0; | |
| 2092 } | |
| 2093 | |
| 2094 /* Handle case where pos is before w->start -- | |
| 2095 can happen if part of line had been clipped and is not clipped now */ | |
| 2096 if (vpos == 0 && pos < marker_position (w->start)) | |
| 2097 Fset_marker (w->start, make_number (pos), Qnil); | |
| 2098 | |
| 2099 /* Redisplay the lines where the text was changed */ | |
| 2100 last_text_vpos = vpos; | |
| 2101 tab_offset = pos_tab_offset (w, pos); | |
| 2102 /* If we are starting display in mid-character, correct tab_offset | |
| 2103 to account for passing the line that that character really starts in. */ | |
| 2104 if (val.hpos < lmargin) | |
| 2105 tab_offset += width; | |
| 2106 while (vpos < stop_vpos) | |
| 2107 { | |
| 2108 val = *display_text_line (w, pos, top + vpos++, val.hpos, tab_offset); | |
| 2109 tab_offset += width; | |
| 2110 if (val.vpos) tab_offset = 0; | |
| 2111 if (pos != val.bufpos) | |
| 2112 last_text_vpos | |
| 2113 /* Next line, unless prev line ended in end of buffer with no cr */ | |
| 2114 = vpos - (val.vpos && FETCH_CHAR (val.bufpos - 1) != '\n'); | |
| 2115 pos = val.bufpos; | |
| 2116 } | |
| 2117 | |
| 2118 /* There are two cases: | |
| 2119 1) we have displayed down to the bottom of the window | |
| 2120 2) we have scrolled lines below stop_vpos by scroll_amount */ | |
| 2121 | |
| 2122 if (vpos == height) | |
| 2123 { | |
| 2124 /* If last line is continued in middle of character, | |
| 769 | 2125 include the split character in the text considered on the frame */ |
| 277 | 2126 if (val.hpos < lmargin) |
| 2127 val.bufpos++; | |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
2128 XSETFASTINT (w->window_end_vpos, last_text_vpos); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
2129 XSETFASTINT (w->window_end_pos, Z - val.bufpos); |
| 277 | 2130 } |
| 2131 | |
| 2132 /* If scrolling made blank lines at window bottom, | |
| 2133 redisplay to fill those lines */ | |
| 2134 if (scroll_amount < 0) | |
| 2135 { | |
| 2136 /* Don't consider these lines for general-purpose scrolling. | |
| 2137 That will save time in the scrolling computation. */ | |
| 769 | 2138 FRAME_SCROLL_BOTTOM_VPOS (f) = xp.vpos; |
| 277 | 2139 vpos = xp.vpos; |
| 2140 pos = xp.bufpos; | |
| 2141 val.hpos = lmargin; | |
| 2142 if (pos == ZV) | |
| 2143 vpos = height + scroll_amount; | |
| 2144 else if (xp.contin && xp.hpos != lmargin) | |
| 2145 { | |
| 2146 val.hpos = xp.prevhpos - width + lmargin; | |
| 2147 pos--; | |
| 2148 } | |
| 2149 | |
| 2150 blank_end_of_window = 1; | |
| 2151 tab_offset = pos_tab_offset (w, pos); | |
| 2152 /* If we are starting display in mid-character, correct tab_offset | |
| 2153 to account for passing the line that that character starts in. */ | |
| 2154 if (val.hpos < lmargin) | |
| 2155 tab_offset += width; | |
| 2156 | |
| 2157 while (vpos < height) | |
| 2158 { | |
| 2159 val = *display_text_line (w, pos, top + vpos++, val.hpos, tab_offset); | |
| 2160 tab_offset += width; | |
| 2161 if (val.vpos) tab_offset = 0; | |
| 2162 pos = val.bufpos; | |
| 2163 } | |
| 2164 | |
| 2165 /* Here is a case where display_text_line sets cursor_vpos wrong. | |
| 2166 Make it be fixed up, below. */ | |
| 2167 if (xp.bufpos == ZV | |
| 6705 | 2168 && xp.bufpos == PT) |
| 277 | 2169 cursor_vpos = -1; |
| 2170 } | |
| 2171 | |
| 769 | 2172 /* If bottom just moved off end of frame, change mode line percentage. */ |
| 277 | 2173 if (XFASTINT (w->window_end_pos) == 0 |
| 2174 && Z != val.bufpos) | |
| 2175 w->update_mode_line = Qt; | |
| 2176 | |
| 2177 /* Attempt to adjust end-of-text positions to new bottom line */ | |
| 2178 if (scroll_amount) | |
| 2179 { | |
| 2180 delta = height - xp.vpos; | |
| 2181 if (delta < 0 | |
| 2182 || (delta > 0 && xp.bufpos <= ZV) | |
| 2183 || (delta == 0 && xp.hpos)) | |
| 2184 { | |
| 11810 | 2185 val = *vmotion (Z - XFASTINT (w->window_end_pos), delta, w); |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
2186 XSETFASTINT (w->window_end_pos, Z - val.bufpos); |
|
9330
28fcacb58a38
(try_window_id): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9325
diff
changeset
|
2187 XSETFASTINT (w->window_end_vpos, |
|
28fcacb58a38
(try_window_id): Don't use XFASTINT as an lvalue.
Karl Heuer <kwzh@gnu.org>
parents:
9325
diff
changeset
|
2188 XFASTINT (w->window_end_vpos) + val.vpos); |
| 277 | 2189 } |
| 2190 } | |
| 2191 | |
| 2192 w->window_end_valid = Qnil; | |
| 2193 | |
| 2194 /* If point was not in a line that was displayed, find it */ | |
| 2195 if (cursor_vpos < 0) | |
| 2196 { | |
|
11108
ad6e21535db6
(redisplay): Make sure pause is set before used.
Karl Heuer <kwzh@gnu.org>
parents:
11085
diff
changeset
|
2197 findpoint: |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2198 val = *compute_motion (start, 0, lmargin, 0, PT, 10000, 10000, |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
2199 width, hscroll, pos_tab_offset (w, start), w); |
| 769 | 2200 /* Admit failure if point is off frame now */ |
| 277 | 2201 if (val.vpos >= height) |
| 2202 { | |
| 2203 for (vpos = 0; vpos < height; vpos++) | |
| 769 | 2204 cancel_line (vpos + top, f); |
| 277 | 2205 return 0; |
| 2206 } | |
| 2207 cursor_vpos = val.vpos + top; | |
| 11810 | 2208 cursor_hpos = XFASTINT (w->left) + minmax (0, val.hpos, width); |
| 277 | 2209 } |
| 2210 | |
| 11810 | 2211 FRAME_CURSOR_X (f) = cursor_hpos; |
| 769 | 2212 FRAME_CURSOR_Y (f) = cursor_vpos; |
| 277 | 2213 |
| 2214 if (debug_end_pos) | |
| 2215 { | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2216 val = *compute_motion (start, 0, lmargin, 0, ZV, |
| 277 | 2217 height, - (1 << (SHORTBITS - 1)), |
|
6692
43a79400a664
Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents:
6684
diff
changeset
|
2218 width, hscroll, pos_tab_offset (w, start), w); |
| 277 | 2219 if (val.vpos != XFASTINT (w->window_end_vpos)) |
| 2220 abort (); | |
| 2221 if (XFASTINT (w->window_end_pos) | |
| 2222 != Z - val.bufpos) | |
| 2223 abort (); | |
| 2224 } | |
| 2225 | |
| 2226 return 1; | |
| 2227 } | |
| 2228 | |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2229 /* Mark a section of BUF as modified, but only for the sake of redisplay. |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2230 This is useful for recording changes to overlays. |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2231 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2232 We increment the buffer's modification timestamp and set the |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2233 redisplay caches (windows_or_buffers_changed, beg_unchanged, etc) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2234 as if the region of text between START and END had been modified; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2235 the redisplay code will check this against the windows' timestamps, |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2236 and redraw the appropriate area of the buffer. |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2237 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2238 However, if the buffer is unmodified, we bump the last-save |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2239 timestamp as well, so that incrementing the timestamp doesn't fool |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2240 Emacs into thinking that the buffer's text has been modified. |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2241 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2242 Tweaking the timestamps shouldn't hurt the first-modification |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2243 timestamps recorded in the undo records; those values aren't |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2244 written until just before a real text modification is made, so they |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2245 will never catch the timestamp value just before this function gets |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2246 called. */ |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2247 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2248 void |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2249 redisplay_region (buf, start, end) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2250 struct buffer *buf; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2251 int start, end; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2252 { |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2253 if (start == end) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2254 return; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2255 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2256 if (start > end) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2257 { |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2258 int temp = start; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2259 start = end; end = temp; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2260 } |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2261 |
|
7933
f997d5dc44d8
(redisplay_region): Treat selected window's buffer
Richard M. Stallman <rms@gnu.org>
parents:
7927
diff
changeset
|
2262 /* If this is a buffer not in the selected window, |
|
f997d5dc44d8
(redisplay_region): Treat selected window's buffer
Richard M. Stallman <rms@gnu.org>
parents:
7927
diff
changeset
|
2263 we must do other windows. */ |
|
f997d5dc44d8
(redisplay_region): Treat selected window's buffer
Richard M. Stallman <rms@gnu.org>
parents:
7927
diff
changeset
|
2264 if (buf != XBUFFER (XWINDOW (selected_window)->buffer)) |
|
f997d5dc44d8
(redisplay_region): Treat selected window's buffer
Richard M. Stallman <rms@gnu.org>
parents:
7927
diff
changeset
|
2265 windows_or_buffers_changed = 1; |
|
8075
b546fa7e9911
(redisplay_region): For special treatment, BUF most be
Richard M. Stallman <rms@gnu.org>
parents:
7951
diff
changeset
|
2266 /* If it's not current, we can't use beg_unchanged, end_unchanged for it. */ |
|
b546fa7e9911
(redisplay_region): For special treatment, BUF most be
Richard M. Stallman <rms@gnu.org>
parents:
7951
diff
changeset
|
2267 else if (buf != current_buffer) |
|
b546fa7e9911
(redisplay_region): For special treatment, BUF most be
Richard M. Stallman <rms@gnu.org>
parents:
7951
diff
changeset
|
2268 windows_or_buffers_changed = 1; |
|
7933
f997d5dc44d8
(redisplay_region): Treat selected window's buffer
Richard M. Stallman <rms@gnu.org>
parents:
7927
diff
changeset
|
2269 /* If multiple windows show this buffer, we must do other windows. */ |
|
f997d5dc44d8
(redisplay_region): Treat selected window's buffer
Richard M. Stallman <rms@gnu.org>
parents:
7927
diff
changeset
|
2270 else if (buffer_shared > 1) |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2271 windows_or_buffers_changed = 1; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2272 else |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2273 { |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2274 if (unchanged_modified == MODIFF) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2275 { |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2276 beg_unchanged = start - BEG; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2277 end_unchanged = Z - end; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2278 } |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2279 else |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2280 { |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2281 if (Z - end < end_unchanged) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2282 end_unchanged = Z - end; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2283 if (start - BEG < beg_unchanged) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2284 beg_unchanged = start - BEG; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2285 } |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2286 } |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2287 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2288 /* Increment the buffer's time stamp, but also increment the save |
|
10303
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
2289 and autosave timestamps, so as not to screw up that timekeeping. */ |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
2290 if (BUF_MODIFF (buf) == BUF_SAVE_MODIFF (buf)) |
|
e951e8dddc8b
Use SAVE_MODIFF and BUF_SAVE_MODIFF
Richard M. Stallman <rms@gnu.org>
parents:
9987
diff
changeset
|
2291 BUF_SAVE_MODIFF (buf)++; |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2292 if (BUF_MODIFF (buf) == buf->auto_save_modified) |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2293 buf->auto_save_modified++; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2294 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2295 BUF_MODIFF (buf) ++; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2296 } |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2297 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2298 |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2299 /* Copy LEN glyphs starting address FROM to the rope TO. |
| 301 | 2300 But don't actually copy the parts that would come in before S. |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2301 Value is TO, advanced past the copied data. |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2302 F is the frame we are displaying in. */ |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2303 |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2304 static GLYPH * |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2305 copy_part_of_rope (f, to, s, from, len, face) |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2306 FRAME_PTR f; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2307 register GLYPH *to; /* Copy to here. */ |
|
2065
32afcdd08efe
(copy_rope): Expect FROM to be a vector.
Richard M. Stallman <rms@gnu.org>
parents:
1992
diff
changeset
|
2308 register GLYPH *s; /* Starting point. */ |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2309 Lisp_Object *from; /* Data to copy. */ |
|
2065
32afcdd08efe
(copy_rope): Expect FROM to be a vector.
Richard M. Stallman <rms@gnu.org>
parents:
1992
diff
changeset
|
2310 int len; |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2311 int face; /* Face to apply to glyphs which don't specify one. */ |
|
2065
32afcdd08efe
(copy_rope): Expect FROM to be a vector.
Richard M. Stallman <rms@gnu.org>
parents:
1992
diff
changeset
|
2312 { |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2313 int n = len; |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2314 register Lisp_Object *fp = from; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2315 /* These cache the results of the last call to compute_glyph_face. */ |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2316 int last_code = -1; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2317 int last_merged = 0; |
| 277 | 2318 |
| 9572 | 2319 #ifdef HAVE_FACES |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2320 if (! FRAME_TERMCAP_P (f)) |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2321 while (n--) |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2322 { |
|
6740
255869831639
(copy_part_of_rope): Replace non-glyph with 0.
Karl Heuer <kwzh@gnu.org>
parents:
6721
diff
changeset
|
2323 int glyph = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2324 int facecode; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2325 |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2326 if (FAST_GLYPH_FACE (glyph) == 0) |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2327 /* If GLYPH has no face code, use FACE. */ |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2328 facecode = face; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2329 else if (FAST_GLYPH_FACE (glyph) == last_code) |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2330 /* If it's same as previous glyph, use same result. */ |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2331 facecode = last_merged; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2332 else |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2333 { |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2334 /* Merge this glyph's face and remember the result. */ |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2335 last_code = FAST_GLYPH_FACE (glyph); |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2336 last_merged = facecode = compute_glyph_face (f, last_code, face); |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2337 } |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2338 |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2339 if (to >= s) |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2340 *to = FAST_MAKE_GLYPH (FAST_GLYPH_CHAR (glyph), facecode); |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2341 ++to; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2342 ++fp; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2343 } |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2344 else |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2345 #endif |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2346 while (n--) |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2347 { |
|
6741
840862375e93
(copy_part_of_rope): Replace non-glyph with 0.
Karl Heuer <kwzh@gnu.org>
parents:
6740
diff
changeset
|
2348 if (to >= s) *to = (INTEGERP (*fp) ? XFASTINT (*fp) : 0); |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2349 ++to; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2350 ++fp; |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2351 } |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2352 return to; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2353 } |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2354 |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2355 /* Correct a glyph by replacing its specified user-level face code |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2356 with a displayable computed face code. */ |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2357 |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2358 static GLYPH |
|
6896
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2359 fix_glyph (f, glyph, cface) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2360 FRAME_PTR f; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2361 GLYPH glyph; |
|
6896
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2362 int cface; |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2363 { |
| 9572 | 2364 #ifdef HAVE_FACES |
|
6896
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2365 if (! FRAME_TERMCAP_P (f)) |
|
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2366 { |
|
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2367 if (FAST_GLYPH_FACE (glyph) != 0) |
|
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2368 cface = compute_glyph_face (f, FAST_GLYPH_FACE (glyph), cface); |
|
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2369 glyph = FAST_MAKE_GLYPH (FAST_GLYPH_CHAR (glyph), cface); |
|
9e949c4d0e4c
(fix_glyph) [HAVE_X_WINDOWS]: When glyph face is 0, use the computed face as
Karl Heuer <kwzh@gnu.org>
parents:
6872
diff
changeset
|
2370 } |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2371 #endif |
|
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2372 return glyph; |
| 277 | 2373 } |
| 2374 | |
|
9412
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2375 /* Display one line of window W, starting at position START in W's buffer. |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2376 |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2377 Display starting at horizontal position HPOS, expressed relative to |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2378 W's left edge. In situations where the text at START shouldn't |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2379 start at the left margin (i.e. when the window is hscrolled, or |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2380 we're continuing a line which left off in the midst of a |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2381 multi-column character), HPOS should be negative; we throw away |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2382 characters up 'til hpos = 0. So, HPOS must take hscrolling into |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2383 account. |
| 277 | 2384 |
| 2385 TABOFFSET is an offset for ostensible hpos, used in tab stop calculations. | |
| 2386 | |
|
9412
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2387 Display on position VPOS on the frame. It is origin 0, relative to |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2388 the top of the frame, not W. |
| 277 | 2389 |
| 2390 Returns a STRUCT POSITION giving character to start next line with | |
| 2391 and where to display it, including a zero or negative hpos. | |
| 2392 The vpos field is not really a vpos; it is 1 unless the line is continued */ | |
| 2393 | |
| 2394 struct position val_display_text_line; | |
| 2395 | |
| 2396 static struct position * | |
| 2397 display_text_line (w, start, vpos, hpos, taboffset) | |
| 2398 struct window *w; | |
| 2399 int start; | |
| 2400 int vpos; | |
| 2401 int hpos; | |
| 2402 int taboffset; | |
| 2403 { | |
| 2404 register int pos = start; | |
| 2405 register int c; | |
| 2406 register GLYPH *p1; | |
| 2407 register int pause; | |
| 2408 register unsigned char *p; | |
| 2409 GLYPH *endp; | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2410 register GLYPH *leftmargin; |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2411 register GLYPH *p1prev; |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2412 register GLYPH *p1start; |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2413 int prevpos; |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2414 int *charstart; |
| 769 | 2415 FRAME_PTR f = XFRAME (w->frame); |
| 277 | 2416 int tab_width = XINT (current_buffer->tab_width); |
| 485 | 2417 int ctl_arrow = !NILP (current_buffer->ctl_arrow); |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
2418 int width = window_internal_width (w) - 1; |
| 277 | 2419 struct position val; |
| 2420 int lastpos; | |
| 2421 int invis; | |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2422 int last_invis_skip = 0; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2423 Lisp_Object last_invis_prop; |
| 277 | 2424 int hscroll = XINT (w->hscroll); |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2425 int truncate = (hscroll |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2426 || (truncate_partial_width_windows |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2427 && XFASTINT (w->width) < FRAME_WIDTH (f)) |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2428 || !NILP (current_buffer->truncate_lines)); |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2429 |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2430 /* 1 if we should highlight the region. */ |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2431 int highlight_region |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2432 = !NILP (Vtransient_mark_mode) && !NILP (current_buffer->mark_active); |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2433 int region_beg, region_end; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2434 |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2435 int selective = (INTEGERP (current_buffer->selective_display) |
|
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2436 ? XINT (current_buffer->selective_display) |
|
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2437 : !NILP (current_buffer->selective_display) ? -1 : 0); |
| 769 | 2438 register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f); |
| 277 | 2439 register struct Lisp_Vector *dp = window_display_table (w); |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2440 |
|
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2441 Lisp_Object default_invis_vector[3]; |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2442 /* Number of characters of ellipsis to display after an invisible line |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2443 if it calls for an ellipsis. |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2444 Note that this value can be nonzero regardless of whether |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2445 selective display is enabled--you must check that separately. */ |
| 277 | 2446 int selective_rlen |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2447 = (dp && VECTORP (DISP_INVIS_VECTOR (dp)) |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2448 ? XVECTOR (DISP_INVIS_VECTOR (dp))->size |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2449 : !NILP (current_buffer->selective_display_ellipses) ? 3 : 0); |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2450 /* This is the sequence of Lisp objects to display |
|
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2451 when there are invisible lines. */ |
|
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2452 Lisp_Object *invis_vector_contents |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2453 = (dp && VECTORP (DISP_INVIS_VECTOR (dp)) |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2454 ? XVECTOR (DISP_INVIS_VECTOR (dp))->contents |
|
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2455 : default_invis_vector); |
|
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2456 |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2457 GLYPH truncator = (dp == 0 || !INTEGERP (DISP_TRUNC_GLYPH (dp)) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2458 ? '$' : XINT (DISP_TRUNC_GLYPH (dp))); |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2459 GLYPH continuer = (dp == 0 || !INTEGERP (DISP_CONTINUE_GLYPH (dp)) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2460 ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp))); |
| 277 | 2461 |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2462 /* The next buffer location at which the face should change, due |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2463 to overlays or text property changes. */ |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2464 int next_face_change; |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2465 |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2466 /* The next location where the `invisible' property changes, or an |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2467 overlay starts or ends. */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2468 int next_boundary; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2469 |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2470 /* The face we're currently using. */ |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2471 int current_face = 0; |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2472 int i; |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2473 |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
2474 XSETFASTINT (default_invis_vector[2], '.'); |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2475 default_invis_vector[0] = default_invis_vector[1] = default_invis_vector[2]; |
|
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2476 |
| 277 | 2477 hpos += XFASTINT (w->left); |
| 769 | 2478 get_display_line (f, vpos, XFASTINT (w->left)); |
|
2324
24cd3df6f184
(display_string, display_text_line): Allow tab_width up to 1000.
Richard M. Stallman <rms@gnu.org>
parents:
2303
diff
changeset
|
2479 if (tab_width <= 0 || tab_width > 1000) tab_width = 8; |
| 277 | 2480 |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2481 /* Show where to highlight the region. */ |
|
2965
5314fdcd87bc
(display_text_line): Highlight in any frame's sel window.
Richard M. Stallman <rms@gnu.org>
parents:
2929
diff
changeset
|
2482 if (highlight_region && XMARKER (current_buffer->mark)->buffer != 0 |
|
3265
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
2483 /* Maybe highlight only in selected window. */ |
|
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
2484 && (highlight_nonselected_windows |
|
3266
1173bc4814da
(display_text_line): Really check for just the selected window.
Richard M. Stallman <rms@gnu.org>
parents:
3265
diff
changeset
|
2485 || w == XWINDOW (selected_window))) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2486 { |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2487 region_beg = marker_position (current_buffer->mark); |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2488 if (PT < region_beg) |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2489 { |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2490 region_end = region_beg; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2491 region_beg = PT; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2492 } |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2493 else |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2494 region_end = PT; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2495 w->region_showing = Qt; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2496 } |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2497 else |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2498 region_beg = region_end = -1; |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2499 |
|
9412
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2500 if (MINI_WINDOW_P (w) |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2501 && start == BEG |
| 277 | 2502 && vpos == XFASTINT (w->top)) |
| 2503 { | |
|
7951
e609577aa2f3
minibuf_prompt is now a Lisp_Object.
Karl Heuer <kwzh@gnu.org>
parents:
7933
diff
changeset
|
2504 if (! NILP (minibuf_prompt)) |
|
6721
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2505 { |
|
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2506 minibuf_prompt_width |
|
7951
e609577aa2f3
minibuf_prompt is now a Lisp_Object.
Karl Heuer <kwzh@gnu.org>
parents:
7933
diff
changeset
|
2507 = (display_string (w, vpos, XSTRING (minibuf_prompt)->data, |
|
e609577aa2f3
minibuf_prompt is now a Lisp_Object.
Karl Heuer <kwzh@gnu.org>
parents:
7933
diff
changeset
|
2508 XSTRING (minibuf_prompt)->size, hpos, |
|
9756
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2509 /* Display a space if we truncate. */ |
|
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2510 ' ', |
|
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2511 1, -1, |
|
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2512 /* Truncate the prompt a little before the |
|
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2513 margin, so user input can at least start |
|
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2514 on the first line. */ |
|
bd5dc931e46e
(display_text_line): Truncate the minibuf_prompt if nec.
Richard M. Stallman <rms@gnu.org>
parents:
9682
diff
changeset
|
2515 w->width > 10 ? w->width - 4 : -1) |
|
6721
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2516 - hpos); |
|
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2517 hpos += minibuf_prompt_width; |
|
10641
88afc23d1474
(display_text_line): Deduct minibuf prompt from taboffset.
Richard M. Stallman <rms@gnu.org>
parents:
10567
diff
changeset
|
2518 taboffset -= minibuf_prompt_width; |
|
6721
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2519 } |
|
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2520 else |
|
26e4c96d8b63
(display_text_line): minibuffer_prompt_width is a distance, not an absolute
Karl Heuer <kwzh@gnu.org>
parents:
6705
diff
changeset
|
2521 minibuf_prompt_width = 0; |
| 277 | 2522 } |
| 2523 | |
|
9412
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2524 /* If we're hscrolled at all, use compute_motion to skip over any |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2525 text off the left edge of the window. compute_motion may know |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2526 tricks to do this faster than we can. */ |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2527 if (hpos < 0) |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2528 { |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2529 struct position *left_edge |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2530 = compute_motion (pos, vpos, hpos, 0, |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2531 ZV, vpos, 0, |
|
9412
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2532 width, hscroll, taboffset, w); |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2533 |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2534 /* Retrieve the buffer position and column provided by |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2535 compute_motion. We can't assume that the column will be |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2536 zero, because you may have multi-column characters crossing |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2537 the left margin. |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2538 |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2539 compute_motion may have moved us past the screen position we |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2540 requested, if we hit a multi-column character, or the end of |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2541 the line. If so, back up. */ |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2542 if (left_edge->vpos > vpos |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2543 || left_edge->hpos > 0) |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2544 { |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2545 pos = left_edge->bufpos - 1; |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2546 hpos = left_edge->prevhpos; |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2547 } |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2548 else |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2549 { |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2550 pos = left_edge->bufpos; |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2551 hpos = left_edge->hpos; |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2552 } |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2553 } |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2554 |
|
53898786366f
* xdisp.c (redisplay_window): Invalidate width_run_cache, if the
Jim Blandy <jimb@redhat.com>
parents:
9330
diff
changeset
|
2555 desired_glyphs->bufp[vpos] = start; |
| 277 | 2556 p1 = desired_glyphs->glyphs[vpos] + hpos; |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2557 p1start = p1; |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2558 charstart = desired_glyphs->charstarts[vpos] + hpos; |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2559 /* In case we don't ever write anything into it... */ |
|
7292
b5b5ca91f463
(display_text_line): Since HPOS is negative, avoid
Richard M. Stallman <rms@gnu.org>
parents:
7197
diff
changeset
|
2560 desired_glyphs->charstarts[vpos][XFASTINT (w->left)] = -1; |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2561 leftmargin = desired_glyphs->glyphs[vpos] + XFASTINT (w->left); |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2562 endp = leftmargin + width; |
| 277 | 2563 |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2564 /* Arrange the overlays nicely for our purposes. Usually, we call |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2565 display_text_line on only one line at a time, in which case this |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2566 can't really hurt too much, or we call it on lines which appear |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2567 one after another in the buffer, in which case all calls to |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2568 recenter_overlay_lists but the first will be pretty cheap. */ |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2569 recenter_overlay_lists (current_buffer, pos); |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2570 |
| 277 | 2571 /* Loop generating characters. |
| 2572 Stop at end of buffer, before newline, | |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2573 if reach or pass continuation column, |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2574 or at face change. */ |
| 277 | 2575 pause = pos; |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2576 next_face_change = pos; |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2577 next_boundary = pos; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2578 p1prev = p1; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2579 prevpos = pos; |
|
6643
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
2580 while (1) |
| 277 | 2581 { |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2582 if (pos >= pause) |
| 277 | 2583 { |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2584 while (pos == next_boundary) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2585 { |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2586 Lisp_Object position, limit, prop, ww; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2587 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2588 /* Display the overlay strings here, unless we're at ZV |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2589 and have already displayed the appropriate strings |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2590 on an earlier line. */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2591 if (pos < ZV || !zv_strings_seen++) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2592 { |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2593 int ovlen; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2594 char *ovstr; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2595 ovlen = overlay_strings (pos, w, &ovstr); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2596 for (; ovlen; ovlen--, ovstr++) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2597 { |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2598 if (p1 >= leftmargin && p1 < endp) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2599 *p1 = MAKE_GLYPH (f, *ovstr, current_face); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2600 p1++; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2601 } |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2602 } |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2603 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2604 /* Did we reach point? Record the cursor location. */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2605 if (pos == PT && cursor_vpos < 0) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2606 { |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2607 cursor_vpos = vpos; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2608 cursor_hpos = p1 - leftmargin; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2609 } |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2610 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2611 if (pos >= ZV) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2612 break; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2613 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2614 XSETFASTINT (position, pos); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2615 limit = Fnext_overlay_change (position); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2616 #ifdef USE_TEXT_PROPERTIES |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2617 /* This is just an estimate to give reasonable |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2618 performance; nothing should go wrong if it is too small. */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2619 if (XFASTINT (limit) > pos + 50) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2620 XSETFASTINT (limit, pos + 50); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2621 limit = Fnext_single_property_change (position, Qinvisible, |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2622 Fcurrent_buffer (), limit); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2623 #endif |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2624 next_boundary = XFASTINT (limit); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2625 /* if the `invisible' property is set, we can skip to |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2626 the next property change. */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2627 XSETWINDOW (ww, w); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2628 prop = Fget_char_property (position, Qinvisible, ww); |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2629 if (TEXT_PROP_MEANS_INVISIBLE (prop)) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2630 { |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2631 if (pos < PT && next_boundary >= PT) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2632 { |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2633 cursor_vpos = vpos; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2634 cursor_hpos = p1 - leftmargin; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2635 } |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2636 pos = next_boundary; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2637 last_invis_skip = pos; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2638 last_invis_prop = prop; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2639 } |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2640 } |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2641 |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2642 /* Did we reach point? Record the cursor location. */ |
| 6705 | 2643 if (pos == PT && cursor_vpos < 0) |
| 277 | 2644 { |
| 2645 cursor_vpos = vpos; | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2646 cursor_hpos = p1 - leftmargin; |
| 277 | 2647 } |
| 2648 | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2649 /* Did we hit the end of the visible region of the buffer? |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2650 Stop here. */ |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2651 if (pos >= ZV) |
|
12293
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2652 { |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2653 /* Update charstarts for the end of this line. */ |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2654 /* Do nothing if off the left edge or at the right edge. */ |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2655 if (p1 >= leftmargin && p1 + 1 != endp) |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2656 { |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2657 int *p2x = &charstart[(p1 < leftmargin |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2658 ? leftmargin : p1) |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2659 - p1start]; |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2660 *p2x++ = pos; |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2661 } |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2662 break; |
|
7aa9cdf40d37
(display_text_line): Fill in charstart for end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
12267
diff
changeset
|
2663 } |
|
4386
abd79e187610
(try_window): Handle invisible newline at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
3937
diff
changeset
|
2664 |
| 9572 | 2665 #ifdef HAVE_FACES |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2666 /* Did we hit a face change? Figure out what face we should |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2667 use now. We also hit this the first time through the |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2668 loop, to see what face we should start with. */ |
|
4386
abd79e187610
(try_window): Handle invisible newline at end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
3937
diff
changeset
|
2669 if (pos >= next_face_change && FRAME_X_P (f)) |
|
2848
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2670 current_face = compute_char_face (f, w, pos, |
|
3bcbd1795280
(mark_window_display_accurate): Set region_showing fields.
Richard M. Stallman <rms@gnu.org>
parents:
2766
diff
changeset
|
2671 region_beg, region_end, |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2672 &next_face_change, pos + 50, 0); |
|
2742
7800e6a86421
* xdisp.c (display_text_line): Make face-handling code conditional
Jim Blandy <jimb@redhat.com>
parents:
2729
diff
changeset
|
2673 #endif |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2674 |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2675 pause = ZV; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2676 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2677 if (pos < next_boundary && next_boundary < pause) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2678 pause = next_boundary; |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2679 if (pos < next_face_change && next_face_change < pause) |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2680 pause = next_face_change; |
|
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2681 |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2682 /* Wouldn't you hate to read the next line to someone over |
|
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2683 the phone? */ |
| 6705 | 2684 if (pos < PT && PT < pause) |
| 2685 pause = PT; | |
| 277 | 2686 if (pos < GPT && GPT < pause) |
| 2687 pause = GPT; | |
| 2688 | |
| 2689 p = &FETCH_CHAR (pos); | |
| 2690 } | |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2691 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2692 if (p1 >= endp) |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2693 break; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2694 |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2695 p1prev = p1; |
|
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2696 |
| 277 | 2697 c = *p++; |
|
10822
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2698 /* Let a display table override all standard display methods. */ |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2699 if (dp != 0 && VECTORP (DISP_CHAR_VECTOR (dp, c))) |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2700 { |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2701 p1 = copy_part_of_rope (f, p1, leftmargin, |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2702 XVECTOR (DISP_CHAR_VECTOR (dp, c))->contents, |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2703 XVECTOR (DISP_CHAR_VECTOR (dp, c))->size, |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2704 current_face); |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2705 } |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
2706 else if (c >= 040 && c < 0177) |
| 277 | 2707 { |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2708 if (p1 >= leftmargin) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2709 *p1 = MAKE_GLYPH (f, c, current_face); |
| 277 | 2710 p1++; |
| 2711 } | |
| 2712 else if (c == '\n') | |
| 2713 { | |
| 2714 invis = 0; | |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2715 if (last_invis_skip == pos |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2716 && TEXT_PROP_MEANS_INVISIBLE_WITH_ELLIPSIS (last_invis_prop)) |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
2717 invis = 1; |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2718 while (pos + 1 < ZV |
| 277 | 2719 && selective > 0 |
|
5942
c51e1ff87656
(try_window_id, display_text_line): Treat blank lines specially in
Karl Heuer <kwzh@gnu.org>
parents:
5936
diff
changeset
|
2720 && indented_beyond_p (pos + 1, selective)) |
| 277 | 2721 { |
| 2722 invis = 1; | |
| 2723 pos = find_next_newline (pos + 1, 1); | |
| 2724 if (FETCH_CHAR (pos - 1) == '\n') | |
| 2725 pos--; | |
| 2726 } | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2727 if (invis && selective_rlen > 0 && p1 >= leftmargin) |
| 277 | 2728 { |
| 2729 p1 += selective_rlen; | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2730 if (p1 - leftmargin > width) |
| 277 | 2731 p1 = endp; |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2732 copy_part_of_rope (f, p1prev, p1prev, invis_vector_contents, |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2733 (p1 - p1prev), current_face); |
| 277 | 2734 } |
| 9572 | 2735 #ifdef HAVE_FACES |
|
2884
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2736 /* Draw the face of the newline character as extending all the |
|
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2737 way to the end of the frame line. */ |
|
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2738 if (current_face) |
|
7772
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2739 { |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2740 if (p1 < leftmargin) |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2741 p1 = leftmargin; |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2742 while (p1 < endp) |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2743 *p1++ = FAST_MAKE_GLYPH (' ', current_face); |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2744 } |
|
2884
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2745 #endif |
|
11874
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2746 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2747 /* Update charstarts for the newline that ended this line. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2748 /* Do nothing here for a char that's entirely off the left edge |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2749 or if it starts at the right edge. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2750 if (p1 >= leftmargin && p1prev != endp) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2751 { |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2752 /* Store the newline's position into charstarts |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2753 for the column where the newline starts. |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2754 Store -1 for the rest of the glyphs it occupies. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2755 int *p2x = &charstart[(p1prev < leftmargin |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2756 ? leftmargin : p1prev) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2757 - p1start]; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2758 int *p2 = &charstart[(p1 < endp ? p1 : endp) - p1start]; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2759 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2760 *p2x++ = pos; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2761 while (p2x < p2) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2762 *p2x++ = -1; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2763 } |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2764 |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2765 break; |
| 277 | 2766 } |
| 2767 else if (c == '\t') | |
| 2768 { | |
| 2769 do | |
| 2770 { | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2771 if (p1 >= leftmargin && p1 < endp) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2772 *p1 = MAKE_GLYPH (f, ' ', current_face); |
| 277 | 2773 p1++; |
| 2774 } | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2775 while ((p1 - leftmargin + taboffset + hscroll - (hscroll > 0)) |
| 277 | 2776 % tab_width); |
| 2777 } | |
| 368 | 2778 else if (c == Ctl ('M') && selective == -1) |
| 277 | 2779 { |
| 2780 pos = find_next_newline (pos, 1); | |
| 2781 if (FETCH_CHAR (pos - 1) == '\n') | |
| 2782 pos--; | |
| 2783 if (selective_rlen > 0) | |
| 2784 { | |
| 2785 p1 += selective_rlen; | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2786 if (p1 - leftmargin > width) |
| 277 | 2787 p1 = endp; |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2788 copy_part_of_rope (f, p1prev, p1prev, invis_vector_contents, |
|
2766
aa7b6f6aa20a
* xdisp.c (copy_rope, copy_part_of_rope): Add face argument.
Jim Blandy <jimb@redhat.com>
parents:
2754
diff
changeset
|
2789 (p1 - p1prev), current_face); |
| 277 | 2790 } |
| 9572 | 2791 #ifdef HAVE_FACES |
|
2884
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2792 /* Draw the face of the newline character as extending all the |
|
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2793 way to the end of the frame line. */ |
|
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2794 if (current_face) |
|
7772
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2795 { |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2796 if (p1 < leftmargin) |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2797 p1 = leftmargin; |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2798 while (p1 < endp) |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2799 *p1++ = FAST_MAKE_GLYPH (' ', current_face); |
|
7821be0db092
(display_text_line): Make sure pointer is in range.
Karl Heuer <kwzh@gnu.org>
parents:
7757
diff
changeset
|
2800 } |
|
2884
e52ea063421a
* xdisp.c (display_text_line): If the newline (or C-m, in
Jim Blandy <jimb@redhat.com>
parents:
2874
diff
changeset
|
2801 #endif |
|
11874
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2802 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2803 /* Update charstarts for the ^M that ended this line. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2804 /* Do nothing here for a char that's entirely off the left edge |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2805 or if it starts at the right edge. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2806 if (p1 >= leftmargin && p1prev != endp) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2807 { |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2808 /* Store the newline's position into charstarts |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2809 for the column where the newline starts. |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2810 Store -1 for the rest of the glyphs it occupies. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2811 int *p2x = &charstart[(p1prev < leftmargin |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2812 ? leftmargin : p1prev) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2813 - p1start]; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2814 int *p2 = &charstart[(p1 < endp ? p1 : endp) - p1start]; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2815 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2816 *p2x++ = pos; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2817 while (p2x < p2) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2818 *p2x++ = -1; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2819 } |
|
2754
af06c054b48f
(display_text_line): Use break; to exit loop at eol.
Richard M. Stallman <rms@gnu.org>
parents:
2742
diff
changeset
|
2820 break; |
| 277 | 2821 } |
| 2822 else if (c < 0200 && ctl_arrow) | |
| 2823 { | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2824 if (p1 >= leftmargin) |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2825 *p1 = fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2826 ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2827 current_face); |
| 277 | 2828 p1++; |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2829 if (p1 >= leftmargin && p1 < endp) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2830 *p1 = MAKE_GLYPH (f, c ^ 0100, current_face); |
| 277 | 2831 p1++; |
| 2832 } | |
| 2833 else | |
| 2834 { | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2835 if (p1 >= leftmargin) |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
2836 *p1 = fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2837 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2838 current_face); |
| 277 | 2839 p1++; |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2840 if (p1 >= leftmargin && p1 < endp) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2841 *p1 = MAKE_GLYPH (f, (c >> 6) + '0', current_face); |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2842 p1++; |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2843 if (p1 >= leftmargin && p1 < endp) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2844 *p1 = MAKE_GLYPH (f, (7 & (c >> 3)) + '0', current_face); |
| 277 | 2845 p1++; |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2846 if (p1 >= leftmargin && p1 < endp) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
2847 *p1 = MAKE_GLYPH (f, (7 & c) + '0', current_face); |
| 277 | 2848 p1++; |
| 2849 } | |
|
2729
76afd3322533
Arrange to tell redisplay about changes in overlays.
Jim Blandy <jimb@redhat.com>
parents:
2526
diff
changeset
|
2850 |
|
11854
637c5283e74b
(zv_strings_seen): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
11810
diff
changeset
|
2851 prevpos = pos; |
| 277 | 2852 pos++; |
|
11874
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2853 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2854 /* Update charstarts for the character just output. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2855 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2856 /* Do nothing here for a char that's entirely off the left edge. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2857 if (p1 >= leftmargin) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2858 { |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2859 /* Store the char's position into charstarts |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2860 for the first glyph occupied by this char. |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2861 Store -1 for the rest of the glyphs it occupies. */ |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2862 if (p1 != p1prev) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2863 { |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2864 int *p2x = &charstart[(p1prev < leftmargin |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2865 ? leftmargin : p1prev) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2866 - p1start]; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2867 int *p2 = &charstart[(p1 < endp ? p1 : endp) - p1start]; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2868 |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2869 if (p2x < p2) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2870 *p2x++ = prevpos; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2871 while (p2x < p2) |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2872 *p2x++ = -1; |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2873 } |
|
b8de94b7c91f
(display_text_line): Enter a char in charstarts
Karl Heuer <kwzh@gnu.org>
parents:
11854
diff
changeset
|
2874 } |
| 277 | 2875 } |
| 2876 | |
| 2877 val.hpos = - XINT (w->hscroll); | |
| 2878 if (val.hpos) | |
| 2879 val.hpos++; | |
| 2880 | |
| 2881 val.vpos = 1; | |
| 2882 | |
| 2883 lastpos = pos; | |
| 2884 | |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2885 /* Store 0 in this charstart line for the positions where |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2886 there is no character. But do leave what was recorded |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2887 for the character that ended the line. */ |
|
6643
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
2888 /* Add 1 in the endtest to compensate for the fact that ENDP was |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
2889 made from WIDTH, which is 1 less than the window's actual |
|
07be9ae289ce
(display_text_line): Always store in charstart
Richard M. Stallman <rms@gnu.org>
parents:
6630
diff
changeset
|
2890 internal width. */ |
|
7292
b5b5ca91f463
(display_text_line): Since HPOS is negative, avoid
Richard M. Stallman <rms@gnu.org>
parents:
7197
diff
changeset
|
2891 i = p1 - p1start + 1; |
|
b5b5ca91f463
(display_text_line): Since HPOS is negative, avoid
Richard M. Stallman <rms@gnu.org>
parents:
7197
diff
changeset
|
2892 if (p1 < leftmargin) |
|
b5b5ca91f463
(display_text_line): Since HPOS is negative, avoid
Richard M. Stallman <rms@gnu.org>
parents:
7197
diff
changeset
|
2893 i += leftmargin - p1; |
|
b5b5ca91f463
(display_text_line): Since HPOS is negative, avoid
Richard M. Stallman <rms@gnu.org>
parents:
7197
diff
changeset
|
2894 for (; i < endp - p1start + 1; i++) |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2895 charstart[i] = 0; |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
2896 |
| 277 | 2897 /* Handle continuation in middle of a character */ |
| 2898 /* by backing up over it */ | |
| 2899 if (p1 > endp) | |
| 2900 { | |
|
3586
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2901 /* Don't back up if we never actually displayed any text. |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2902 This occurs when the minibuffer prompt takes up the whole line. */ |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2903 if (p1prev) |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2904 { |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2905 /* Start the next line with that same character */ |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2906 pos--; |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2907 /* but at negative hpos, to skip the columns output on this line. */ |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2908 val.hpos += p1prev - endp; |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2909 } |
|
7d077274d4bb
* xdisp.c (display_text_line): Handle case where line ends in a
Jim Blandy <jimb@redhat.com>
parents:
3516
diff
changeset
|
2910 |
| 277 | 2911 /* Keep in this line everything up to the continuation column. */ |
| 2912 p1 = endp; | |
| 2913 } | |
| 2914 | |
| 2915 /* Finish deciding which character to start the next line on, | |
| 2916 and what hpos to start it at. | |
| 2917 Also set `lastpos' to the last position which counts as "on this line" | |
| 2918 for cursor-positioning. */ | |
| 2919 | |
| 2920 if (pos < ZV) | |
| 2921 { | |
| 2922 if (FETCH_CHAR (pos) == '\n') | |
|
6568
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2923 { |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2924 /* If stopped due to a newline, start next line after it */ |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2925 pos++; |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2926 /* Check again for hidden lines, in case the newline occurred exactly |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2927 at the right margin. */ |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2928 while (pos < ZV && selective > 0 |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2929 && indented_beyond_p (pos, selective)) |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2930 pos = find_next_newline (pos, 1); |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2931 } |
| 277 | 2932 else |
| 2933 /* Stopped due to right margin of window */ | |
| 2934 { | |
| 2935 if (truncate) | |
| 2936 { | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2937 *p1++ = fix_glyph (f, truncator, 0); |
| 277 | 2938 /* Truncating => start next line after next newline, |
| 2939 and point is on this line if it is before the newline, | |
| 2940 and skip none of first char of next line */ | |
|
6568
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2941 do |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2942 pos = find_next_newline (pos, 1); |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2943 while (pos < ZV && selective > 0 |
|
c87ae1f14148
(display_text_line): Handle selective display at window edge.
Karl Heuer <kwzh@gnu.org>
parents:
6518
diff
changeset
|
2944 && indented_beyond_p (pos, selective)); |
| 277 | 2945 val.hpos = XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0; |
| 2946 | |
| 2947 lastpos = pos - (FETCH_CHAR (pos - 1) == '\n'); | |
| 2948 } | |
| 2949 else | |
| 2950 { | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
2951 *p1++ = fix_glyph (f, continuer, 0); |
| 277 | 2952 val.vpos = 0; |
| 2953 lastpos--; | |
| 2954 } | |
| 2955 } | |
| 2956 } | |
| 2957 | |
| 2958 /* If point is at eol or in invisible text at eol, | |
| 769 | 2959 record its frame location now. */ |
| 277 | 2960 |
| 6705 | 2961 if (start <= PT && PT <= lastpos && cursor_vpos < 0) |
| 277 | 2962 { |
| 2963 cursor_vpos = vpos; | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
2964 cursor_hpos = p1 - leftmargin; |
| 277 | 2965 } |
| 2966 | |
| 2967 if (cursor_vpos == vpos) | |
| 2968 { | |
| 2969 if (cursor_hpos < 0) cursor_hpos = 0; | |
| 2970 if (cursor_hpos > width) cursor_hpos = width; | |
| 2971 cursor_hpos += XFASTINT (w->left); | |
| 769 | 2972 if (w == XWINDOW (FRAME_SELECTED_WINDOW (f))) |
| 277 | 2973 { |
|
11649
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
2974 if (!(cursor_in_echo_area && FRAME_HAS_MINIBUF_P (f) |
|
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
2975 && EQ (FRAME_MINIBUF_WINDOW (f), minibuf_window))) |
|
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
2976 { |
|
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
2977 FRAME_CURSOR_Y (f) = cursor_vpos; |
|
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
2978 FRAME_CURSOR_X (f) = cursor_hpos; |
|
d3a8fb1db72f
(display_text_line): Don't move the cursor if it's supposed to
Karl Heuer <kwzh@gnu.org>
parents:
11641
diff
changeset
|
2979 } |
| 277 | 2980 |
| 2981 if (w == XWINDOW (selected_window)) | |
| 2982 { | |
| 2983 /* Line is not continued and did not start | |
| 2984 in middle of character */ | |
| 2985 if ((hpos - XFASTINT (w->left) | |
| 2986 == (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0)) | |
| 2987 && val.vpos) | |
| 2988 { | |
| 2989 this_line_bufpos = start; | |
| 2990 this_line_buffer = current_buffer; | |
| 2991 this_line_vpos = cursor_vpos; | |
| 2992 this_line_start_hpos = hpos; | |
| 2993 this_line_endpos = Z - lastpos; | |
| 2994 } | |
| 2995 else | |
| 2996 this_line_bufpos = 0; | |
| 2997 } | |
| 2998 } | |
| 2999 } | |
| 3000 | |
| 3001 /* If hscroll and line not empty, insert truncation-at-left marker */ | |
| 3002 if (hscroll && lastpos != start) | |
| 3003 { | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
3004 *leftmargin = fix_glyph (f, truncator, 0); |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
3005 if (p1 <= leftmargin) |
|
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
3006 p1 = leftmargin + 1; |
| 277 | 3007 } |
| 3008 | |
| 769 | 3009 if (XFASTINT (w->width) + XFASTINT (w->left) != FRAME_WIDTH (f)) |
| 277 | 3010 { |
| 3011 endp++; | |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
3012 if (p1 < leftmargin) p1 = leftmargin; |
| 277 | 3013 while (p1 < endp) *p1++ = SPACEGLYPH; |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3014 |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
3015 /* Don't draw vertical bars if we're using scroll bars. They're |
|
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
3016 covered up by the scroll bars, and it's distracting to see |
|
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
3017 them when the scroll bar windows are flickering around to be |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3018 reconfigured. */ |
|
1992
37c45885540a
* xdisp.c (redisplay): Protect calls to request_sigio and
Jim Blandy <jimb@redhat.com>
parents:
1873
diff
changeset
|
3019 *p1++ = (FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
|
8919
644f69fe736e
Add a new element to display tables controlling side-by-side
Jim Blandy <jimb@redhat.com>
parents:
8918
diff
changeset
|
3020 ? ' ' |
|
644f69fe736e
Add a new element to display tables controlling side-by-side
Jim Blandy <jimb@redhat.com>
parents:
8918
diff
changeset
|
3021 : (dp && INTEGERP (DISP_BORDER_GLYPH (dp)) |
|
644f69fe736e
Add a new element to display tables controlling side-by-side
Jim Blandy <jimb@redhat.com>
parents:
8918
diff
changeset
|
3022 ? DISP_BORDER_GLYPH (dp) |
|
644f69fe736e
Add a new element to display tables controlling side-by-side
Jim Blandy <jimb@redhat.com>
parents:
8918
diff
changeset
|
3023 : '|')); |
| 277 | 3024 } |
| 3025 desired_glyphs->used[vpos] = max (desired_glyphs->used[vpos], | |
| 3026 p1 - desired_glyphs->glyphs[vpos]); | |
| 3027 desired_glyphs->glyphs[vpos][desired_glyphs->used[vpos]] = 0; | |
| 3028 | |
| 3029 /* If the start of this line is the overlay arrow-position, | |
| 3030 then put the arrow string into the display-line. */ | |
| 3031 | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3032 if (MARKERP (Voverlay_arrow_position) |
| 277 | 3033 && current_buffer == XMARKER (Voverlay_arrow_position)->buffer |
| 3034 && start == marker_position (Voverlay_arrow_position) | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3035 && STRINGP (Voverlay_arrow_string) |
| 277 | 3036 && ! overlay_arrow_seen) |
| 3037 { | |
| 3038 unsigned char *p = XSTRING (Voverlay_arrow_string)->data; | |
| 3039 int i; | |
| 3040 int len = XSTRING (Voverlay_arrow_string)->size; | |
|
3726
33e82e88a210
* xdisp.c (display_text_line): Use temporary variable.
Jim Blandy <jimb@redhat.com>
parents:
3689
diff
changeset
|
3041 int arrow_end; |
| 277 | 3042 |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3043 if (len > width) |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3044 len = width; |
| 9572 | 3045 #ifdef HAVE_FACES |
|
8471
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3046 if (!NULL_INTERVAL_P (XSTRING (Voverlay_arrow_string)->intervals)) |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3047 { |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3048 /* If the arrow string has text props, obey them when displaying. */ |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3049 for (i = 0; i < len; i++) |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3050 { |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3051 int c = p[i]; |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3052 Lisp_Object face, ilisp; |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3053 int newface; |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3054 |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
3055 XSETFASTINT (ilisp, i); |
|
8471
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3056 face = Fget_text_property (ilisp, Qface, Voverlay_arrow_string); |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3057 newface = compute_glyph_face_1 (f, face, 0); |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3058 leftmargin[i] = FAST_MAKE_GLYPH (c, newface); |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3059 } |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3060 } |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3061 else |
| 9572 | 3062 #endif /* HAVE_FACES */ |
|
8471
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3063 { |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3064 for (i = 0; i < len; i++) |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3065 leftmargin[i] = p[i]; |
|
64c299dd51b8
(display_text_line): Use the face properties of the overlay arrow, if any.
Richard M. Stallman <rms@gnu.org>
parents:
8417
diff
changeset
|
3066 } |
|
3726
33e82e88a210
* xdisp.c (display_text_line): Use temporary variable.
Jim Blandy <jimb@redhat.com>
parents:
3689
diff
changeset
|
3067 |
|
33e82e88a210
* xdisp.c (display_text_line): Use temporary variable.
Jim Blandy <jimb@redhat.com>
parents:
3689
diff
changeset
|
3068 /* Bug in SunOS 4.1.1 compiler requires this intermediate variable. */ |
|
6684
b5dc04567426
(display_text_line): Rename startp to leftmargin.
Richard M. Stallman <rms@gnu.org>
parents:
6661
diff
changeset
|
3069 arrow_end = (leftmargin - desired_glyphs->glyphs[vpos]) + len; |
|
3726
33e82e88a210
* xdisp.c (display_text_line): Use temporary variable.
Jim Blandy <jimb@redhat.com>
parents:
3689
diff
changeset
|
3070 if (desired_glyphs->used[vpos] < arrow_end) |
|
33e82e88a210
* xdisp.c (display_text_line): Use temporary variable.
Jim Blandy <jimb@redhat.com>
parents:
3689
diff
changeset
|
3071 desired_glyphs->used[vpos] = arrow_end; |
| 277 | 3072 |
| 3073 overlay_arrow_seen = 1; | |
| 3074 } | |
| 3075 | |
| 3076 val.bufpos = pos; | |
| 3077 val_display_text_line = val; | |
| 3078 return &val_display_text_line; | |
| 3079 } | |
| 3080 | |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3081 /* Redisplay the menu bar in the frame for window W. */ |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3082 |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3083 static void |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3084 display_menu_bar (w) |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3085 struct window *w; |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3086 { |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3087 Lisp_Object items, tail; |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3088 register int vpos = 0; |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3089 register FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3090 int maxendcol = FRAME_WIDTH (f); |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3091 int hpos = 0; |
|
6134
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3092 int i; |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3093 |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
3094 #ifndef USE_X_TOOLKIT |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3095 if (FRAME_MENU_BAR_LINES (f) <= 0) |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3096 return; |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3097 |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3098 get_display_line (f, vpos, 0); |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3099 |
|
6134
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3100 items = FRAME_MENU_BAR_ITEMS (f); |
|
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3101 for (i = 0; i < XVECTOR (items)->size; i += 3) |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3102 { |
|
6134
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3103 Lisp_Object pos, string; |
|
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3104 string = XVECTOR (items)->contents[i + 1]; |
|
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3105 if (NILP (string)) |
|
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3106 break; |
|
c656768172d2
(update_menu_bar): Change call to menu_bar_items.
Richard M. Stallman <rms@gnu.org>
parents:
6091
diff
changeset
|
3107 |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
3108 XSETFASTINT (XVECTOR (items)->contents[i + 2], hpos); |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3109 |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3110 if (hpos < maxendcol) |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3111 hpos = display_string (XWINDOW (FRAME_ROOT_WINDOW (f)), vpos, |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3112 XSTRING (string)->data, |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3113 XSTRING (string)->size, |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3114 hpos, 0, 0, hpos, maxendcol); |
|
11065
da9137aa151f
(display_menu_bar): Just one space between menu items.
Richard M. Stallman <rms@gnu.org>
parents:
11011
diff
changeset
|
3115 /* Put a space between items. */ |
|
2189
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3116 if (hpos < maxendcol) |
|
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3117 { |
|
11065
da9137aa151f
(display_menu_bar): Just one space between menu items.
Richard M. Stallman <rms@gnu.org>
parents:
11011
diff
changeset
|
3118 int hpos1 = hpos + 1; |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3119 hpos = display_string (w, vpos, "", 0, hpos, 0, 0, |
|
2189
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3120 min (hpos1, maxendcol), maxendcol); |
|
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3121 } |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3122 } |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3123 |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3124 FRAME_DESIRED_GLYPHS (f)->bufp[vpos] = 0; |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3125 FRAME_DESIRED_GLYPHS (f)->highlight[vpos] = mode_line_inverse_video; |
|
2189
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3126 |
|
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3127 /* Fill out the line with spaces. */ |
|
cb92d253a599
(display_menu_bar): Assume FRAME_MENU_BAR_ITEMS already set.
Richard M. Stallman <rms@gnu.org>
parents:
2150
diff
changeset
|
3128 if (maxendcol > hpos) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3129 hpos = display_string (w, vpos, "", 0, hpos, 0, 0, maxendcol, maxendcol); |
|
4423
53f7c5b30816
* xdisp.c (display_menu_bar): Redisplay all lines occupied by the
Jim Blandy <jimb@redhat.com>
parents:
4386
diff
changeset
|
3130 |
|
53f7c5b30816
* xdisp.c (display_menu_bar): Redisplay all lines occupied by the
Jim Blandy <jimb@redhat.com>
parents:
4386
diff
changeset
|
3131 /* Clear the rest of the lines allocated to the menu bar. */ |
|
53f7c5b30816
* xdisp.c (display_menu_bar): Redisplay all lines occupied by the
Jim Blandy <jimb@redhat.com>
parents:
4386
diff
changeset
|
3132 vpos++; |
|
53f7c5b30816
* xdisp.c (display_menu_bar): Redisplay all lines occupied by the
Jim Blandy <jimb@redhat.com>
parents:
4386
diff
changeset
|
3133 while (vpos < FRAME_MENU_BAR_LINES (f)) |
|
53f7c5b30816
* xdisp.c (display_menu_bar): Redisplay all lines occupied by the
Jim Blandy <jimb@redhat.com>
parents:
4386
diff
changeset
|
3134 get_display_line (f, vpos++, 0); |
|
5658
4e3a6baa4750
(display_menu_bar): Add USE_X_TOOLKIT conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5340
diff
changeset
|
3135 #endif /* not USE_X_TOOLKIT */ |
|
2150
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3136 } |
|
cb8205e30dda
(display_menu_bar): New function.
Richard M. Stallman <rms@gnu.org>
parents:
2065
diff
changeset
|
3137 |
| 277 | 3138 /* Display the mode line for window w */ |
| 3139 | |
| 3140 static void | |
| 3141 display_mode_line (w) | |
| 3142 struct window *w; | |
| 3143 { | |
| 3144 register int vpos = XFASTINT (w->height) + XFASTINT (w->top) - 1; | |
| 3145 register int left = XFASTINT (w->left); | |
| 3146 register int right = XFASTINT (w->width) + left; | |
| 769 | 3147 register FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
| 277 | 3148 |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3149 line_number_displayed = 0; |
|
10441
f1fc7b6e5fa4
(redisplay, redisplay_window, display_mode_line, decode_mode_spec): Use window
Karl Heuer <kwzh@gnu.org>
parents:
10416
diff
changeset
|
3150 w->column_number_displayed = Qnil; |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3151 |
| 769 | 3152 get_display_line (f, vpos, left); |
|
11354
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3153 |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3154 /* Temporarily make frame F's kboard the current kboard |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3155 so that kboard-local variables in the mode_line_format |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3156 will get the right values. */ |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3157 push_frame_kboard (f); |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3158 |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3159 display_mode_element (w, vpos, left, 0, right, right, |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3160 current_buffer->mode_line_format); |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3161 |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3162 pop_frame_kboard (); |
|
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3163 |
| 769 | 3164 FRAME_DESIRED_GLYPHS (f)->bufp[vpos] = 0; |
| 277 | 3165 |
| 3166 /* Make the mode line inverse video if the entire line | |
| 3167 is made of mode lines. | |
| 3168 I.e. if this window is full width, | |
| 3169 or if it is the child of a full width window | |
| 3170 (which implies that that window is split side-by-side | |
| 3171 and the rest of this line is mode lines of the sibling windows). */ | |
| 769 | 3172 if (XFASTINT (w->width) == FRAME_WIDTH (f) |
| 3173 || XFASTINT (XWINDOW (w->parent)->width) == FRAME_WIDTH (f)) | |
| 3174 FRAME_DESIRED_GLYPHS (f)->highlight[vpos] = mode_line_inverse_video; | |
| 9572 | 3175 #ifdef HAVE_FACES |
|
11354
17f7be3e2443
(display_mode_line): Use push_frame_kboard, pop_frame_kboard.
Richard M. Stallman <rms@gnu.org>
parents:
11291
diff
changeset
|
3176 else if (! FRAME_TERMCAP_P (f) && mode_line_inverse_video) |
|
6278
ab5b9470fd85
(display_mode_line): Highlight partial-width mode lines
Richard M. Stallman <rms@gnu.org>
parents:
6134
diff
changeset
|
3177 { |
|
ab5b9470fd85
(display_mode_line): Highlight partial-width mode lines
Richard M. Stallman <rms@gnu.org>
parents:
6134
diff
changeset
|
3178 /* For a partial width window, explicitly set face of each glyph. */ |
|
ab5b9470fd85
(display_mode_line): Highlight partial-width mode lines
Richard M. Stallman <rms@gnu.org>
parents:
6134
diff
changeset
|
3179 int i; |
|
ab5b9470fd85
(display_mode_line): Highlight partial-width mode lines
Richard M. Stallman <rms@gnu.org>
parents:
6134
diff
changeset
|
3180 GLYPH *ptr = FRAME_DESIRED_GLYPHS (f)->glyphs[vpos]; |
|
ab5b9470fd85
(display_mode_line): Highlight partial-width mode lines
Richard M. Stallman <rms@gnu.org>
parents:
6134
diff
changeset
|
3181 for (i = left; i < right; ++i) |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
3182 ptr[i] = FAST_MAKE_GLYPH (FAST_GLYPH_CHAR (ptr[i]), 1); |
|
6278
ab5b9470fd85
(display_mode_line): Highlight partial-width mode lines
Richard M. Stallman <rms@gnu.org>
parents:
6134
diff
changeset
|
3183 } |
|
6415
35917d3d0952
(fix_glyph, display_text_line, copy_part_of_rope, display_mode_line): Handle
Karl Heuer <kwzh@gnu.org>
parents:
6372
diff
changeset
|
3184 #endif |
| 277 | 3185 } |
| 3186 | |
| 3187 /* Contribute ELT to the mode line for window W. | |
| 3188 How it translates into text depends on its data type. | |
| 3189 | |
| 3190 VPOS is the position of the mode line being displayed. | |
| 3191 | |
| 769 | 3192 HPOS is the position (absolute on frame) where this element's text |
| 277 | 3193 should start. The output is truncated automatically at the right |
| 3194 edge of window W. | |
| 3195 | |
| 3196 DEPTH is the depth in recursion. It is used to prevent | |
| 3197 infinite recursion here. | |
| 3198 | |
| 3199 MINENDCOL is the hpos before which the element may not end. | |
| 3200 The element is padded at the right with spaces if nec | |
| 3201 to reach this column. | |
| 3202 | |
| 3203 MAXENDCOL is the hpos past which this element may not extend. | |
| 3204 If MINENDCOL is > MAXENDCOL, MINENDCOL takes priority. | |
| 3205 (This is necessary to make nested padding and truncation work.) | |
| 3206 | |
| 3207 Returns the hpos of the end of the text generated by ELT. | |
| 3208 The next element will receive that value as its HPOS arg, | |
| 3209 so as to concatenate the elements. */ | |
| 3210 | |
| 3211 static int | |
| 3212 display_mode_element (w, vpos, hpos, depth, minendcol, maxendcol, elt) | |
| 3213 struct window *w; | |
| 3214 register int vpos, hpos; | |
| 3215 int depth; | |
| 3216 int minendcol; | |
| 3217 register int maxendcol; | |
| 3218 register Lisp_Object elt; | |
| 3219 { | |
| 3220 tail_recurse: | |
| 3221 if (depth > 10) | |
| 3222 goto invalid; | |
| 3223 | |
| 3224 depth++; | |
| 3225 | |
|
10457
2ab3bd0288a9
Change all occurences of SWITCH_ENUM_BUG to use SWITCH_ENUM_CAST instead.
Karl Heuer <kwzh@gnu.org>
parents:
10442
diff
changeset
|
3226 switch (SWITCH_ENUM_CAST (XTYPE (elt))) |
| 277 | 3227 { |
| 3228 case Lisp_String: | |
| 3229 { | |
| 3230 /* A string: output it and check for %-constructs within it. */ | |
| 3231 register unsigned char c; | |
| 3232 register unsigned char *this = XSTRING (elt)->data; | |
| 3233 | |
| 3234 while (hpos < maxendcol && *this) | |
| 3235 { | |
| 3236 unsigned char *last = this; | |
| 3237 while ((c = *this++) != '\0' && c != '%') | |
| 3238 ; | |
| 3239 if (this - 1 != last) | |
| 3240 { | |
| 3241 register int lim = --this - last + hpos; | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3242 if (frame_title_ptr) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3243 hpos = store_frame_title (last, hpos, min (lim, maxendcol)); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3244 else |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3245 hpos = display_string (w, vpos, last, -1, hpos, 0, 1, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3246 hpos, min (lim, maxendcol)); |
| 277 | 3247 } |
| 3248 else /* c == '%' */ | |
| 3249 { | |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3250 register int minendcol; |
| 277 | 3251 register int spec_width = 0; |
| 3252 | |
| 3253 /* We can't allow -ve args due to the "%-" construct */ | |
| 3254 /* Argument specifies minwidth but not maxwidth | |
| 3255 (maxwidth can be specified by | |
| 3256 (<negative-number> . <stuff>) mode-line elements) */ | |
| 3257 | |
| 3258 while ((c = *this++) >= '0' && c <= '9') | |
| 3259 { | |
| 3260 spec_width = spec_width * 10 + (c - '0'); | |
| 3261 } | |
| 3262 | |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3263 minendcol = hpos + spec_width; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3264 if (minendcol > maxendcol) |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3265 { |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3266 spec_width = maxendcol - hpos; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3267 minendcol = maxendcol; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3268 } |
| 277 | 3269 |
| 3270 if (c == 'M') | |
| 3271 hpos = display_mode_element (w, vpos, hpos, depth, | |
| 3272 spec_width, maxendcol, | |
| 3273 Vglobal_mode_string); | |
| 3274 else if (c != 0) | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3275 { |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3276 char *spec = decode_mode_spec (w, c, spec_width, |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3277 maxendcol - hpos); |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3278 if (frame_title_ptr) |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3279 hpos = store_frame_title (spec, minendcol, maxendcol); |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3280 else |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3281 hpos = display_string (w, vpos, spec, -1, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3282 hpos, 0, 1, |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3283 minendcol, maxendcol); |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3284 } |
| 277 | 3285 } |
| 3286 } | |
| 3287 } | |
| 3288 break; | |
| 3289 | |
| 3290 case Lisp_Symbol: | |
| 3291 /* A symbol: process the value of the symbol recursively | |
| 3292 as if it appeared here directly. Avoid error if symbol void. | |
| 3293 Special case: if value of symbol is a string, output the string | |
| 3294 literally. */ | |
| 3295 { | |
| 3296 register Lisp_Object tem; | |
| 3297 tem = Fboundp (elt); | |
| 485 | 3298 if (!NILP (tem)) |
| 277 | 3299 { |
| 3300 tem = Fsymbol_value (elt); | |
| 3301 /* If value is a string, output that string literally: | |
| 3302 don't check for % within it. */ | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3303 if (STRINGP (tem)) |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3304 { |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3305 if (frame_title_ptr) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3306 hpos = store_frame_title (XSTRING (tem)->data, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3307 minendcol, maxendcol); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3308 else |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3309 hpos = display_string (w, vpos, XSTRING (tem)->data, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3310 XSTRING (tem)->size, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3311 hpos, 0, 1, minendcol, maxendcol); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3312 } |
| 277 | 3313 /* Give up right away for nil or t. */ |
| 3314 else if (!EQ (tem, elt)) | |
| 3315 { elt = tem; goto tail_recurse; } | |
| 3316 } | |
| 3317 } | |
| 3318 break; | |
| 3319 | |
| 3320 case Lisp_Cons: | |
| 3321 { | |
| 3322 register Lisp_Object car, tem; | |
| 3323 | |
| 3324 /* A cons cell: three distinct cases. | |
| 3325 If first element is a string or a cons, process all the elements | |
| 3326 and effectively concatenate them. | |
| 3327 If first element is a negative number, truncate displaying cdr to | |
| 3328 at most that many characters. If positive, pad (with spaces) | |
| 3329 to at least that many characters. | |
| 3330 If first element is a symbol, process the cadr or caddr recursively | |
| 3331 according to whether the symbol's value is non-nil or nil. */ | |
| 3332 car = XCONS (elt)->car; | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3333 if (SYMBOLP (car)) |
| 277 | 3334 { |
| 3335 tem = Fboundp (car); | |
| 3336 elt = XCONS (elt)->cdr; | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3337 if (!CONSP (elt)) |
| 277 | 3338 goto invalid; |
| 3339 /* elt is now the cdr, and we know it is a cons cell. | |
| 3340 Use its car if CAR has a non-nil value. */ | |
| 485 | 3341 if (!NILP (tem)) |
| 277 | 3342 { |
| 3343 tem = Fsymbol_value (car); | |
| 485 | 3344 if (!NILP (tem)) |
| 277 | 3345 { elt = XCONS (elt)->car; goto tail_recurse; } |
| 3346 } | |
| 3347 /* Symbol's value is nil (or symbol is unbound) | |
| 3348 Get the cddr of the original list | |
| 3349 and if possible find the caddr and use that. */ | |
| 3350 elt = XCONS (elt)->cdr; | |
| 485 | 3351 if (NILP (elt)) |
| 277 | 3352 break; |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3353 else if (!CONSP (elt)) |
| 277 | 3354 goto invalid; |
| 3355 elt = XCONS (elt)->car; | |
| 3356 goto tail_recurse; | |
| 3357 } | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3358 else if (INTEGERP (car)) |
| 277 | 3359 { |
| 3360 register int lim = XINT (car); | |
| 3361 elt = XCONS (elt)->cdr; | |
| 3362 if (lim < 0) | |
| 3363 /* Negative int means reduce maximum width. | |
| 3364 DO NOT change MINENDCOL here! | |
| 3365 (20 -10 . foo) should truncate foo to 10 col | |
| 3366 and then pad to 20. */ | |
| 3367 maxendcol = min (maxendcol, hpos - lim); | |
| 3368 else if (lim > 0) | |
| 3369 { | |
| 3370 /* Padding specified. Don't let it be more than | |
| 3371 current maximum. */ | |
| 3372 lim += hpos; | |
| 3373 if (lim > maxendcol) | |
| 3374 lim = maxendcol; | |
| 3375 /* If that's more padding than already wanted, queue it. | |
| 3376 But don't reduce padding already specified even if | |
| 3377 that is beyond the current truncation point. */ | |
| 3378 if (lim > minendcol) | |
| 3379 minendcol = lim; | |
| 3380 } | |
| 3381 goto tail_recurse; | |
| 3382 } | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3383 else if (STRINGP (car) || CONSP (car)) |
| 277 | 3384 { |
| 3385 register int limit = 50; | |
| 3386 /* LIMIT is to protect against circular lists. */ | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3387 while (CONSP (elt) && --limit > 0 |
| 277 | 3388 && hpos < maxendcol) |
| 3389 { | |
| 3390 hpos = display_mode_element (w, vpos, hpos, depth, | |
| 3391 hpos, maxendcol, | |
| 3392 XCONS (elt)->car); | |
| 3393 elt = XCONS (elt)->cdr; | |
| 3394 } | |
| 3395 } | |
| 3396 } | |
| 3397 break; | |
| 3398 | |
| 3399 default: | |
| 3400 invalid: | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3401 if (frame_title_ptr) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3402 hpos = store_frame_title ("*invalid*", minendcol, maxendcol); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3403 else |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3404 hpos = display_string (w, vpos, "*invalid*", -1, hpos, 0, 1, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3405 minendcol, maxendcol); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3406 return hpos; |
| 277 | 3407 } |
| 3408 | |
| 3409 if (minendcol > hpos) | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3410 if (frame_title_ptr) |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3411 hpos = store_frame_title ("", minendcol, maxendcol); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3412 else |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3413 hpos = display_string (w, vpos, "", 0, hpos, 0, 1, minendcol, maxendcol); |
| 277 | 3414 return hpos; |
| 3415 } | |
| 3416 | |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3417 /* Write a null-terminated, right justified decimal representation of |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3418 the positive integer D to BUF using a minimal field width WIDTH. */ |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3419 |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3420 static void |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3421 pint2str (buf, width, d) |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3422 register char *buf; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3423 register int width; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3424 register int d; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3425 { |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3426 register char *p = buf; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3427 |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3428 if (d <= 0) |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3429 *p++ = '0'; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3430 else |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3431 while (d > 0) |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3432 { |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3433 *p++ = d % 10 + '0'; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3434 d /= 10; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3435 } |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3436 for (width -= (int) (p - buf); width > 0; --width) *p++ = ' '; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3437 *p-- = '\0'; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3438 while (p > buf) |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3439 { |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3440 d = *buf; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3441 *buf++ = *p; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3442 *p-- = d; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3443 } |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3444 } |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3445 |
| 277 | 3446 /* Return a string for the output of a mode line %-spec for window W, |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3447 generated by character C. SPEC_WIDTH is the field width when |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3448 padding to the left (%c, %l). The value returned from this |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3449 function will later be truncated to width MAXWIDTH. */ |
| 277 | 3450 |
|
1017
d42877206c0a
* xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents:
973
diff
changeset
|
3451 static char lots_of_dashes[] = "--------------------------------------------------------------------------------------------------------------------------------------------"; |
|
d42877206c0a
* xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents:
973
diff
changeset
|
3452 |
| 277 | 3453 static char * |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3454 decode_mode_spec (w, c, spec_width, maxwidth) |
| 277 | 3455 struct window *w; |
| 3456 register char c; | |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3457 register int spec_width; |
| 277 | 3458 register int maxwidth; |
| 3459 { | |
|
6518
07ecb7a5c916
(x_consider_frame_title, decode_mode_spec): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6415
diff
changeset
|
3460 Lisp_Object obj; |
| 769 | 3461 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
| 3462 char *decode_mode_spec_buf = (char *) FRAME_TEMP_GLYPHS (f)->total_contents; | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3463 struct buffer *b = XBUFFER (w->buffer); |
| 277 | 3464 |
|
6518
07ecb7a5c916
(x_consider_frame_title, decode_mode_spec): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6415
diff
changeset
|
3465 obj = Qnil; |
| 769 | 3466 if (maxwidth > FRAME_WIDTH (f)) |
| 3467 maxwidth = FRAME_WIDTH (f); | |
| 277 | 3468 |
| 3469 switch (c) | |
| 3470 { | |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3471 case '*': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3472 if (!NILP (b->read_only)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3473 return "%"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3474 if (BUF_MODIFF (b) > BUF_SAVE_MODIFF (b)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3475 return "*"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3476 return "-"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3477 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3478 case '+': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3479 /* This differs from %* only for a modified read-only buffer. */ |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3480 if (BUF_MODIFF (b) > BUF_SAVE_MODIFF (b)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3481 return "*"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3482 if (!NILP (b->read_only)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3483 return "%"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3484 return "-"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3485 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3486 case '&': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3487 /* This differs from %* in ignoring read-only-ness. */ |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3488 if (BUF_MODIFF (b) > BUF_SAVE_MODIFF (b)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3489 return "*"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3490 return "-"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3491 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3492 case '%': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3493 return "%"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3494 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3495 case '[': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3496 { |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3497 int i; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3498 char *p; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3499 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3500 if (command_loop_level > 5) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3501 return "[[[... "; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3502 p = decode_mode_spec_buf; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3503 for (i = 0; i < command_loop_level; i++) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3504 *p++ = '['; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3505 *p = 0; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3506 return decode_mode_spec_buf; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3507 } |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3508 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3509 case ']': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3510 { |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3511 int i; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3512 char *p; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3513 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3514 if (command_loop_level > 5) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3515 return " ...]]]"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3516 p = decode_mode_spec_buf; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3517 for (i = 0; i < command_loop_level; i++) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3518 *p++ = ']'; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3519 *p = 0; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3520 return decode_mode_spec_buf; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3521 } |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3522 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3523 case '-': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3524 { |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3525 register char *p; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3526 register int i; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3527 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3528 if (maxwidth < sizeof (lots_of_dashes)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3529 return lots_of_dashes; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3530 else |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3531 { |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3532 for (p = decode_mode_spec_buf, i = maxwidth; i > 0; i--) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3533 *p++ = '-'; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3534 *p = '\0'; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3535 } |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3536 return decode_mode_spec_buf; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3537 } |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3538 |
| 277 | 3539 case 'b': |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3540 obj = b->name; |
| 277 | 3541 #if 0 |
| 3542 if (maxwidth >= 3 && XSTRING (obj)->size > maxwidth) | |
| 3543 { | |
| 3544 bcopy (XSTRING (obj)->data, decode_mode_spec_buf, maxwidth - 1); | |
| 3545 decode_mode_spec_buf[maxwidth - 1] = '\\'; | |
| 3546 decode_mode_spec_buf[maxwidth] = '\0'; | |
| 3547 return decode_mode_spec_buf; | |
| 3548 } | |
| 3549 #endif | |
| 3550 break; | |
| 3551 | |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3552 case 'c': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3553 { |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3554 int col = current_column (); |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3555 XSETFASTINT (w->column_number_displayed, col); |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3556 pint2str (decode_mode_spec_buf, spec_width, col); |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3557 return decode_mode_spec_buf; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3558 } |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3559 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3560 case 'F': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3561 /* %F displays the frame name. */ |
|
12348
7d39ee7e0ca3
(decode_mode_spec) [!MULTI_FRAME]: Handle %F properly.
Richard M. Stallman <rms@gnu.org>
parents:
12293
diff
changeset
|
3562 #ifdef MULTI_FRAME |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3563 return (char *) XSTRING (selected_frame->name)->data; |
|
12348
7d39ee7e0ca3
(decode_mode_spec) [!MULTI_FRAME]: Handle %F properly.
Richard M. Stallman <rms@gnu.org>
parents:
12293
diff
changeset
|
3564 #else |
|
7d39ee7e0ca3
(decode_mode_spec) [!MULTI_FRAME]: Handle %F properly.
Richard M. Stallman <rms@gnu.org>
parents:
12293
diff
changeset
|
3565 return "Emacs"; |
|
7d39ee7e0ca3
(decode_mode_spec) [!MULTI_FRAME]: Handle %F properly.
Richard M. Stallman <rms@gnu.org>
parents:
12293
diff
changeset
|
3566 #endif |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3567 |
| 277 | 3568 case 'f': |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3569 obj = b->filename; |
| 277 | 3570 #if 0 |
| 485 | 3571 if (NILP (obj)) |
| 277 | 3572 return "[none]"; |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3573 else if (STRINGP (obj) && XSTRING (obj)->size > maxwidth) |
| 277 | 3574 { |
| 3575 bcopy ("...", decode_mode_spec_buf, 3); | |
| 3576 bcopy (XSTRING (obj)->data + XSTRING (obj)->size - maxwidth + 3, | |
| 3577 decode_mode_spec_buf + 3, maxwidth - 3); | |
| 3578 return decode_mode_spec_buf; | |
| 3579 } | |
| 3580 #endif | |
| 3581 break; | |
| 3582 | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3583 case 'l': |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3584 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3585 int startpos = marker_position (w->start); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3586 int line, linepos, topline; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3587 int nlines, junk; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3588 Lisp_Object tem; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3589 int height = XFASTINT (w->height); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3590 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3591 /* If we decided that this buffer isn't suitable for line numbers, |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3592 don't forget that too fast. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3593 if (EQ (w->base_line_pos, w->buffer)) |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3594 goto no_value; |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3595 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3596 /* If the buffer is very big, don't waste time. */ |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3597 if (BUF_ZV (b) - BUF_BEGV (b) > line_number_display_limit) |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3598 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3599 w->base_line_pos = Qnil; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3600 w->base_line_number = Qnil; |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3601 goto no_value; |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3602 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3603 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3604 if (!NILP (w->base_line_number) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3605 && !NILP (w->base_line_pos) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3606 && XFASTINT (w->base_line_pos) <= marker_position (w->start)) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3607 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3608 line = XFASTINT (w->base_line_number); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3609 linepos = XFASTINT (w->base_line_pos); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3610 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3611 else |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3612 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3613 line = 1; |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3614 linepos = BUF_BEGV (b); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3615 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3616 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3617 /* Count lines from base line to window start position. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3618 nlines = display_count_lines (linepos, startpos, startpos, &junk); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3619 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3620 topline = nlines + line; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3621 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3622 /* Determine a new base line, if the old one is too close |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3623 or too far away, or if we did not have one. |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3624 "Too close" means it's plausible a scroll-down would |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3625 go back past it. */ |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3626 if (startpos == BUF_BEGV (b)) |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3627 { |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
3628 XSETFASTINT (w->base_line_number, topline); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
3629 XSETFASTINT (w->base_line_pos, BUF_BEGV (b)); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3630 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3631 else if (nlines < height + 25 || nlines > height * 3 + 50 |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3632 || linepos == BUF_BEGV (b)) |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3633 { |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3634 int limit = BUF_BEGV (b); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3635 int position; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3636 int distance = (height * 2 + 30) * 200; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3637 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3638 if (startpos - distance > limit) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3639 limit = startpos - distance; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3640 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3641 nlines = display_count_lines (startpos, limit, |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3642 -(height * 2 + 30), |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3643 &position); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3644 /* If we couldn't find the lines we wanted within |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3645 200 chars per line, |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3646 give up on line numbers for this window. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3647 if (position == startpos - distance) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3648 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3649 w->base_line_pos = w->buffer; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3650 w->base_line_number = Qnil; |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3651 goto no_value; |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3652 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3653 |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
3654 XSETFASTINT (w->base_line_number, topline - nlines); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
3655 XSETFASTINT (w->base_line_pos, position); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3656 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3657 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3658 /* Now count lines from the start pos to point. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3659 nlines = display_count_lines (startpos, PT, PT, &junk); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3660 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3661 /* Record that we did display the line number. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3662 line_number_displayed = 1; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3663 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3664 /* Make the string to show. */ |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3665 pint2str (decode_mode_spec_buf, spec_width, topline + nlines); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3666 return decode_mode_spec_buf; |
|
12598
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3667 no_value: |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3668 { |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3669 char* p = decode_mode_spec_buf; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3670 for (spec_width -= 2; spec_width > 0; --spec_width) *p++ = ' '; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3671 strcpy (p, "??"); |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3672 return decode_mode_spec_buf; |
|
43ebbbe0299f
(decode_mode_spec): New arg spec_width.
Richard M. Stallman <rms@gnu.org>
parents:
12493
diff
changeset
|
3673 } |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3674 } |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3675 break; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3676 |
| 277 | 3677 case 'm': |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3678 obj = b->mode_name; |
| 277 | 3679 break; |
| 3680 | |
| 3681 case 'n': | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3682 if (BUF_BEGV (b) > BUF_BEG (b) || BUF_ZV (b) < BUF_Z (b)) |
| 277 | 3683 return " Narrow"; |
| 3684 break; | |
| 3685 | |
| 3686 case 'p': | |
| 3687 { | |
| 3688 int pos = marker_position (w->start); | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3689 int total = BUF_ZV (b) - BUF_BEGV (b); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3690 |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3691 if (XFASTINT (w->window_end_pos) <= BUF_Z (b) - BUF_ZV (b)) |
| 277 | 3692 { |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3693 if (pos <= BUF_BEGV (b)) |
| 277 | 3694 return "All"; |
| 3695 else | |
| 3696 return "Bottom"; | |
| 3697 } | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3698 else if (pos <= BUF_BEGV (b)) |
| 277 | 3699 return "Top"; |
| 3700 else | |
| 3701 { | |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3702 total = ((pos - BUF_BEGV (b)) * 100 + total - 1) / total; |
| 277 | 3703 /* We can't normally display a 3-digit number, |
| 3704 so get us a 2-digit number that is close. */ | |
| 3705 if (total == 100) | |
| 3706 total = 99; | |
| 3707 sprintf (decode_mode_spec_buf, "%2d%%", total); | |
| 3708 return decode_mode_spec_buf; | |
| 3709 } | |
| 3710 } | |
| 3711 | |
|
5903
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3712 /* Display percentage of size above the bottom of the screen. */ |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3713 case 'P': |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3714 { |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3715 int toppos = marker_position (w->start); |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3716 int botpos = BUF_Z (b) - XFASTINT (w->window_end_pos); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3717 int total = BUF_ZV (b) - BUF_BEGV (b); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3718 |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3719 if (botpos >= BUF_ZV (b)) |
|
5903
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3720 { |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3721 if (toppos <= BUF_BEGV (b)) |
|
5903
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3722 return "All"; |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3723 else |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3724 return "Bottom"; |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3725 } |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3726 else |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3727 { |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3728 total = ((botpos - BUF_BEGV (b)) * 100 + total - 1) / total; |
|
5903
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3729 /* We can't normally display a 3-digit number, |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3730 so get us a 2-digit number that is close. */ |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3731 if (total == 100) |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3732 total = 99; |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3733 if (toppos <= BUF_BEGV (b)) |
|
5903
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3734 sprintf (decode_mode_spec_buf, "Top%2d%%", total); |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3735 else |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3736 sprintf (decode_mode_spec_buf, "%2d%%", total); |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3737 return decode_mode_spec_buf; |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3738 } |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3739 } |
|
0aea60a8c2d5
(decode_mode_spec): Implement `P'.
Richard M. Stallman <rms@gnu.org>
parents:
5883
diff
changeset
|
3740 |
|
11291
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3741 case 's': |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3742 /* status of process */ |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3743 obj = Fget_buffer_process (w->buffer); |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3744 if (NILP (obj)) |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3745 return "no process"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3746 #ifdef subprocesses |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3747 obj = Fsymbol_name (Fprocess_status (obj)); |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3748 #endif |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3749 break; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3750 |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3751 case 't': /* indicate TEXT or BINARY */ |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3752 #ifdef MODE_LINE_BINARY_TEXT |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3753 return MODE_LINE_BINARY_TEXT (b); |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3754 #else |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3755 return "T"; |
|
856fe1d1f30d
(redisplay): Don't call update_frame for non-selected termcap frame.
Richard M. Stallman <rms@gnu.org>
parents:
11284
diff
changeset
|
3756 #endif |
| 277 | 3757 } |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
3758 |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3759 if (STRINGP (obj)) |
| 277 | 3760 return (char *) XSTRING (obj)->data; |
| 3761 else | |
| 3762 return ""; | |
| 3763 } | |
|
8622
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3764 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3765 /* Search for COUNT instances of a line boundary, which means either a |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3766 newline or (if selective display enabled) a carriage return. |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3767 Start at START. If COUNT is negative, search backwards. |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3768 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3769 If we find COUNT instances, set *SHORTAGE to zero, and return the |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3770 position after the COUNTth match. Note that for reverse motion |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3771 this is not the same as the usual convention for Emacs motion commands. |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3772 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3773 If we don't find COUNT instances before reaching the end of the |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3774 buffer (or the beginning, if scanning backwards), set *SHORTAGE to |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3775 the number of line boundaries left unfound, and return the end of the |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3776 buffer we bumped up against. */ |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3777 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3778 static int |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3779 display_scan_buffer (start, count, shortage) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3780 int *shortage, start; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3781 register int count; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3782 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3783 int limit = ((count > 0) ? ZV - 1 : BEGV); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3784 int direction = ((count > 0) ? 1 : -1); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3785 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3786 register unsigned char *cursor; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3787 unsigned char *base; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3788 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3789 register int ceiling; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3790 register unsigned char *ceiling_addr; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3791 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3792 /* If we are not in selective display mode, |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3793 check only for newlines. */ |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3794 if (! (!NILP (current_buffer->selective_display) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3795 && !INTEGERP (current_buffer->selective_display))) |
|
9451
bdad001a9b91
(display_scan_buffer): Pass the correct number of arguments to
Jim Blandy <jimb@redhat.com>
parents:
9420
diff
changeset
|
3796 return scan_buffer ('\n', start, 0, count, shortage, 0); |
|
8622
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3797 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3798 /* The code that follows is like scan_buffer |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3799 but checks for either newline or carriage return. */ |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3800 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3801 if (shortage != 0) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3802 *shortage = 0; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3803 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3804 if (count > 0) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3805 while (start != limit + 1) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3806 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3807 ceiling = BUFFER_CEILING_OF (start); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3808 ceiling = min (limit, ceiling); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3809 ceiling_addr = &FETCH_CHAR (ceiling) + 1; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3810 base = (cursor = &FETCH_CHAR (start)); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3811 while (1) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3812 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3813 while (*cursor != '\n' && *cursor != 015 && ++cursor != ceiling_addr) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3814 ; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3815 if (cursor != ceiling_addr) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3816 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3817 if (--count == 0) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3818 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3819 immediate_quit = 0; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3820 return (start + cursor - base + 1); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3821 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3822 else |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3823 if (++cursor == ceiling_addr) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3824 break; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3825 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3826 else |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3827 break; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3828 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3829 start += cursor - base; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3830 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3831 else |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3832 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3833 start--; /* first character we scan */ |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3834 while (start > limit - 1) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3835 { /* we WILL scan under start */ |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3836 ceiling = BUFFER_FLOOR_OF (start); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3837 ceiling = max (limit, ceiling); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3838 ceiling_addr = &FETCH_CHAR (ceiling) - 1; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3839 base = (cursor = &FETCH_CHAR (start)); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3840 cursor++; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3841 while (1) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3842 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3843 while (--cursor != ceiling_addr |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3844 && *cursor != '\n' && *cursor != 015) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3845 ; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3846 if (cursor != ceiling_addr) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3847 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3848 if (++count == 0) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3849 { |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3850 immediate_quit = 0; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3851 return (start + cursor - base + 1); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3852 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3853 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3854 else |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3855 break; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3856 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3857 start += cursor - base; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3858 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3859 } |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3860 |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3861 if (shortage != 0) |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3862 *shortage = count * direction; |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3863 return (start + ((direction == 1 ? 0 : 1))); |
|
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3864 } |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3865 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3866 /* Count up to N lines starting from FROM. |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3867 But don't go beyond LIMIT. |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3868 Return the number of lines thus found (always positive). |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3869 Store the position after what was found into *POS_PTR. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3870 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3871 static int |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3872 display_count_lines (from, limit, n, pos_ptr) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3873 int from, limit, n; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3874 int *pos_ptr; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3875 { |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3876 int oldbegv = BEGV; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3877 int oldzv = ZV; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3878 int shortage = 0; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3879 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3880 if (limit < from) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3881 BEGV = limit; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3882 else |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3883 ZV = limit; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3884 |
|
8622
4ce43042e7ad
(display_scan_buffer): New function.
Richard M. Stallman <rms@gnu.org>
parents:
8594
diff
changeset
|
3885 *pos_ptr = display_scan_buffer (from, n, &shortage); |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3886 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3887 ZV = oldzv; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3888 BEGV = oldbegv; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3889 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3890 if (n < 0) |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3891 /* When scanning backwards, scan_buffer stops *after* the last newline |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3892 it finds, but does count it. Compensate for that. */ |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3893 return - n - shortage - (*pos_ptr != limit); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3894 return n - shortage; |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
3895 } |
| 277 | 3896 |
| 3897 /* Display STRING on one line of window W, starting at HPOS. | |
| 3898 Display at position VPOS. Caller should have done get_display_line. | |
|
1017
d42877206c0a
* xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents:
973
diff
changeset
|
3899 If VPOS == -1, display it as the current frame's title. |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3900 LENGTH is the length of STRING, or -1 meaning STRING is null-terminated. |
| 277 | 3901 |
| 3902 TRUNCATE is GLYPH to display at end if truncated. Zero for none. | |
| 3903 | |
| 3904 MINCOL is the first column ok to end at. (Pad with spaces to this col.) | |
| 3905 MAXCOL is the last column ok to end at. Truncate here. | |
| 3906 -1 for MINCOL or MAXCOL means no explicit minimum or maximum. | |
| 769 | 3907 Both count from the left edge of the frame, as does HPOS. |
| 277 | 3908 The right edge of W is an implicit maximum. |
| 3909 If TRUNCATE is nonzero, the implicit maximum is one column before the edge. | |
| 3910 | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3911 OBEY_WINDOW_WIDTH says to put spaces or vertical bars |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3912 at the place where the current window ends in this line |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3913 and not display anything beyond there. Otherwise, only MAXCOL |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3914 controls where to stop output. |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3915 |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3916 Returns ending hpos. */ |
| 277 | 3917 |
| 3918 static int | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3919 display_string (w, vpos, string, length, hpos, truncate, |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3920 obey_window_width, mincol, maxcol) |
| 277 | 3921 struct window *w; |
| 3922 unsigned char *string; | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3923 int length; |
| 277 | 3924 int vpos, hpos; |
| 3925 GLYPH truncate; | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3926 int obey_window_width; |
| 277 | 3927 int mincol, maxcol; |
| 3928 { | |
| 3929 register int c; | |
| 3930 register GLYPH *p1; | |
| 3931 int hscroll = XINT (w->hscroll); | |
|
1600
775c2ab9800f
* xdisp.c (display_string): Use w's buffer's value of
Jim Blandy <jimb@redhat.com>
parents:
1527
diff
changeset
|
3932 int tab_width = XINT (XBUFFER (w->buffer)->tab_width); |
| 277 | 3933 register GLYPH *start; |
| 3934 register GLYPH *end; | |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3935 FRAME_PTR f = XFRAME (WINDOW_FRAME (w)); |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3936 struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f); |
| 277 | 3937 GLYPH *p1start = desired_glyphs->glyphs[vpos] + hpos; |
| 3938 int window_width = XFASTINT (w->width); | |
| 3939 | |
| 3940 /* Use the standard display table, not the window's display table. | |
| 3941 We don't want the mode line in rot13. */ | |
| 3942 register struct Lisp_Vector *dp = 0; | |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
3943 int i; |
| 277 | 3944 |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
3945 if (VECTORP (Vstandard_display_table) |
| 277 | 3946 && XVECTOR (Vstandard_display_table)->size == DISP_TABLE_SIZE) |
| 3947 dp = XVECTOR (Vstandard_display_table); | |
| 3948 | |
|
2324
24cd3df6f184
(display_string, display_text_line): Allow tab_width up to 1000.
Richard M. Stallman <rms@gnu.org>
parents:
2303
diff
changeset
|
3949 if (tab_width <= 0 || tab_width > 1000) tab_width = 8; |
| 277 | 3950 |
| 3951 p1 = p1start; | |
| 3952 start = desired_glyphs->glyphs[vpos] + XFASTINT (w->left); | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3953 |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3954 if (obey_window_width) |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3955 { |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3956 end = start + window_width - (truncate != 0); |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3957 |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3958 if ((window_width + XFASTINT (w->left)) != FRAME_WIDTH (f)) |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3959 { |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3960 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3961 { |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3962 int i; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3963 |
|
8943
a9e40d478857
(display_string): Change VERTICAL_SCROLL_BAR_WIDTH to FRAME_SCROLL_BAR_COLS.
Karl Heuer <kwzh@gnu.org>
parents:
8919
diff
changeset
|
3964 for (i = 0; i < FRAME_SCROLL_BAR_COLS (f); i++) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3965 *end-- = ' '; |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3966 } |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3967 else |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3968 *end-- = '|'; |
|
1785
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3969 } |
|
19755499df90
* window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents:
1718
diff
changeset
|
3970 } |
| 277 | 3971 |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3972 if (! obey_window_width |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3973 || (maxcol >= 0 && end - desired_glyphs->glyphs[vpos] > maxcol)) |
| 277 | 3974 end = desired_glyphs->glyphs[vpos] + maxcol; |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
3975 |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
3976 /* Store 0 in charstart for these columns. */ |
|
6704
a00c6f4747be
(display_string): Allow for negative hpos when clearing array.
Karl Heuer <kwzh@gnu.org>
parents:
6692
diff
changeset
|
3977 for (i = (hpos >= 0 ? hpos : 0); i < end - p1start + hpos; i++) |
|
6612
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
3978 desired_glyphs->charstarts[vpos][i] = 0; |
|
1462bf31ef3c
(redisplay): Call frame_up_to_date_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6568
diff
changeset
|
3979 |
| 277 | 3980 if (maxcol >= 0 && mincol > maxcol) |
| 3981 mincol = maxcol; | |
| 3982 | |
| 3983 while (p1 < end) | |
| 3984 { | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3985 if (length == 0) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3986 break; |
| 277 | 3987 c = *string++; |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3988 /* Specified length. */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3989 if (length >= 0) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3990 length--; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3991 /* Unspecified length (null-terminated string). */ |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3992 else if (c == 0) |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3993 break; |
|
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
3994 |
|
10822
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
3995 if (dp != 0 && VECTORP (DISP_CHAR_VECTOR (dp, c))) |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
3996 { |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
3997 p1 = copy_part_of_rope (f, p1, start, |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
3998 XVECTOR (DISP_CHAR_VECTOR (dp, c))->contents, |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
3999 XVECTOR (DISP_CHAR_VECTOR (dp, c))->size, |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
4000 0); |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
4001 } |
|
1ec15b8745a2
(display_string, display_text_line):
Richard M. Stallman <rms@gnu.org>
parents:
10769
diff
changeset
|
4002 else if (c >= 040 && c < 0177) |
| 277 | 4003 { |
| 4004 if (p1 >= start) | |
| 4005 *p1 = c; | |
| 4006 p1++; | |
| 4007 } | |
| 4008 else if (c == '\t') | |
| 4009 { | |
| 4010 do | |
| 4011 { | |
| 4012 if (p1 >= start && p1 < end) | |
| 4013 *p1 = SPACEGLYPH; | |
| 4014 p1++; | |
| 4015 } | |
| 4016 while ((p1 - start + hscroll - (hscroll > 0)) % tab_width); | |
| 4017 } | |
|
1527
00109911b040
* xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents:
1446
diff
changeset
|
4018 else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow)) |
| 277 | 4019 { |
| 4020 if (p1 >= start) | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
4021 *p1 = fix_glyph (f, (dp && INTEGERP (DISP_CTRL_GLYPH (dp)) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
4022 ? XINT (DISP_CTRL_GLYPH (dp)) : '^'), |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
4023 0); |
| 277 | 4024 p1++; |
| 368 | 4025 if (p1 >= start && p1 < end) |
| 277 | 4026 *p1 = c ^ 0100; |
| 4027 p1++; | |
| 4028 } | |
| 4029 else | |
| 4030 { | |
| 4031 if (p1 >= start) | |
|
9104
610e18fd64a9
(redisplay, mark_window_display_accurate, try_window_id, display_text_line,
Karl Heuer <kwzh@gnu.org>
parents:
9088
diff
changeset
|
4032 *p1 = fix_glyph (f, (dp && INTEGERP (DISP_ESCAPE_GLYPH (dp)) |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
4033 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\'), |
|
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
4034 0); |
| 277 | 4035 p1++; |
| 368 | 4036 if (p1 >= start && p1 < end) |
| 277 | 4037 *p1 = (c >> 6) + '0'; |
| 4038 p1++; | |
| 368 | 4039 if (p1 >= start && p1 < end) |
| 277 | 4040 *p1 = (7 & (c >> 3)) + '0'; |
| 4041 p1++; | |
| 368 | 4042 if (p1 >= start && p1 < end) |
| 277 | 4043 *p1 = (7 & c) + '0'; |
| 4044 p1++; | |
| 4045 } | |
| 4046 } | |
| 4047 | |
|
5230
8c30e49ddc04
(message): Use message2, not message1.
Richard M. Stallman <rms@gnu.org>
parents:
5082
diff
changeset
|
4048 if (c && length > 0) |
| 277 | 4049 { |
| 4050 p1 = end; | |
|
5800
295e342614a4
(fix_glyph): New function.
Richard M. Stallman <rms@gnu.org>
parents:
5739
diff
changeset
|
4051 if (truncate) *p1++ = fix_glyph (f, truncate, 0); |
| 277 | 4052 } |
| 4053 else if (mincol >= 0) | |
| 4054 { | |
| 4055 end = desired_glyphs->glyphs[vpos] + mincol; | |
| 4056 while (p1 < end) | |
| 4057 *p1++ = SPACEGLYPH; | |
| 4058 } | |
| 4059 | |
| 4060 { | |
| 4061 register int len = p1 - desired_glyphs->glyphs[vpos]; | |
| 4062 | |
| 4063 if (len > desired_glyphs->used[vpos]) | |
| 4064 desired_glyphs->used[vpos] = len; | |
| 4065 desired_glyphs->glyphs[vpos][desired_glyphs->used[vpos]] = 0; | |
| 4066 | |
| 4067 return len; | |
| 4068 } | |
| 4069 } | |
| 4070 | |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4071 /* This is like a combination of memq and assq. |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4072 Return 1 if PROPVAL appears as an element of LIST |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4073 or as the car of an element of LIST. |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4074 If PROPVAL is a list, compare each element against LIST |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4075 in that way, and return 1 if any element of PROPVAL is found in LIST. |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4076 Otherwise return 0. |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4077 This function cannot quit. */ |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4078 |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4079 int |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4080 invisible_p (propval, list) |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4081 register Lisp_Object propval; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4082 Lisp_Object list; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4083 { |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4084 register Lisp_Object tail, proptail; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4085 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr) |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4086 { |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4087 register Lisp_Object tem; |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4088 tem = XCONS (tail)->car; |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4089 if (EQ (propval, tem)) |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4090 return 1; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4091 if (CONSP (tem) && EQ (propval, XCONS (tem)->car)) |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4092 return 1; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4093 } |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4094 if (CONSP (propval)) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4095 for (proptail = propval; CONSP (proptail); |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4096 proptail = XCONS (proptail)->cdr) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4097 { |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4098 Lisp_Object propelt; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4099 propelt = XCONS (proptail)->car; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4100 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4101 { |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4102 register Lisp_Object tem; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4103 tem = XCONS (tail)->car; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4104 if (EQ (propelt, tem)) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4105 return 1; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4106 if (CONSP (tem) && EQ (propelt, XCONS (tem)->car)) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4107 return 1; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4108 } |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4109 } |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4110 return 0; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4111 } |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4112 |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4113 /* Return 1 if PROPVAL appears as the car of an element of LIST |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4114 and the cdr of that element is non-nil. |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4115 If PROPVAL is a list, check each element of PROPVAL in that way, |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4116 and the first time some element is found, |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4117 return 1 if the cdr of that element is non-nil. |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4118 Otherwise return 0. |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4119 This function cannot quit. */ |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4120 |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4121 int |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4122 invisible_ellipsis_p (propval, list) |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4123 register Lisp_Object propval; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4124 Lisp_Object list; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4125 { |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4126 register Lisp_Object tail, proptail; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4127 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr) |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4128 { |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4129 register Lisp_Object tem; |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4130 tem = XCONS (tail)->car; |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4131 if (CONSP (tem) && EQ (propval, XCONS (tem)->car)) |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4132 return ! NILP (XCONS (tem)->cdr); |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4133 } |
|
11066
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4134 if (CONSP (propval)) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4135 for (proptail = propval; CONSP (proptail); |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4136 proptail = XCONS (proptail)->cdr) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4137 { |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4138 Lisp_Object propelt; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4139 propelt = XCONS (proptail)->car; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4140 for (tail = list; CONSP (tail); tail = XCONS (tail)->cdr) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4141 { |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4142 register Lisp_Object tem; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4143 tem = XCONS (tail)->car; |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4144 if (CONSP (tem) && EQ (propelt, XCONS (tem)->car)) |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4145 return ! NILP (XCONS (tem)->cdr); |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4146 } |
|
2a3d961889b4
(invisible_p, invisible_ellipsis_p): Handle list
Richard M. Stallman <rms@gnu.org>
parents:
11065
diff
changeset
|
4147 } |
|
10965
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4148 return 0; |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4149 } |
|
1ade2d8b0ae9
(display_text_line): When setting selective_rlen,
Richard M. Stallman <rms@gnu.org>
parents:
10911
diff
changeset
|
4150 |
| 277 | 4151 void |
| 4152 syms_of_xdisp () | |
| 4153 { | |
|
7096
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
4154 staticpro (&Qmenu_bar_update_hook); |
|
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
4155 Qmenu_bar_update_hook = intern ("menu-bar-update-hook"); |
|
a3bf30f1a408
(syms_of_xdisp): Set up Qmenu_bar_update_hook.
Richard M. Stallman <rms@gnu.org>
parents:
6896
diff
changeset
|
4156 |
|
12263
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
4157 staticpro (&Qoverriding_terminal_local_map); |
| 12267 | 4158 Qoverriding_terminal_local_map = intern ("overriding-terminal-local-map"); |
|
12263
6ceecf7d1ec3
(Qoverriding_terminal_local_map): New variable.
Karl Heuer <kwzh@gnu.org>
parents:
12171
diff
changeset
|
4159 |
|
12171
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
4160 staticpro (&Qoverriding_local_map); |
|
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
4161 Qoverriding_local_map = intern ("overriding-local-map"); |
|
1d5d8a256d88
(update_menu_bar): Use set_buffer_internal_1 to switch bufs.
Karl Heuer <kwzh@gnu.org>
parents:
12141
diff
changeset
|
4162 |
| 277 | 4163 staticpro (&last_arrow_position); |
| 4164 staticpro (&last_arrow_string); | |
| 4165 last_arrow_position = Qnil; | |
| 4166 last_arrow_string = Qnil; | |
| 4167 | |
| 4168 DEFVAR_LISP ("global-mode-string", &Vglobal_mode_string, | |
|
782
a6d00bdb2b60
*** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents:
781
diff
changeset
|
4169 "String (or mode line construct) included (normally) in `mode-line-format'."); |
| 277 | 4170 Vglobal_mode_string = Qnil; |
| 4171 | |
| 4172 DEFVAR_LISP ("overlay-arrow-position", &Voverlay_arrow_position, | |
| 4173 "Marker for where to display an arrow on top of the buffer text.\n\ | |
| 4174 This must be the beginning of a line in order to work.\n\ | |
| 4175 See also `overlay-arrow-string'."); | |
| 4176 Voverlay_arrow_position = Qnil; | |
| 4177 | |
| 4178 DEFVAR_LISP ("overlay-arrow-string", &Voverlay_arrow_string, | |
| 4179 "String to display as an arrow. See also `overlay-arrow-position'."); | |
| 4180 Voverlay_arrow_string = Qnil; | |
| 4181 | |
| 4182 DEFVAR_INT ("scroll-step", &scroll_step, | |
| 4183 "*The number of lines to try scrolling a window by when point moves out.\n\ | |
| 769 | 4184 If that fails to bring point back on frame, point is centered instead.\n\ |
| 4185 If this is zero, point is always centered after it moves off frame."); | |
| 277 | 4186 |
| 4187 DEFVAR_INT ("debug-end-pos", &debug_end_pos, "Don't ask"); | |
| 4188 | |
| 4189 DEFVAR_BOOL ("truncate-partial-width-windows", | |
| 4190 &truncate_partial_width_windows, | |
| 769 | 4191 "*Non-nil means truncate lines in all windows less than full frame wide."); |
| 277 | 4192 truncate_partial_width_windows = 1; |
| 4193 | |
| 4194 DEFVAR_BOOL ("mode-line-inverse-video", &mode_line_inverse_video, | |
| 4195 "*Non-nil means use inverse video for the mode line."); | |
| 4196 mode_line_inverse_video = 1; | |
|
2303
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
4197 |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
4198 DEFVAR_INT ("line-number-display-limit", &line_number_display_limit, |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
4199 "*Maximum buffer size for which line number should be displayed."); |
|
00e3cc81c1be
(decode_mode_spec): Handle `%l'.
Richard M. Stallman <rms@gnu.org>
parents:
2252
diff
changeset
|
4200 line_number_display_limit = 1000000; |
|
3265
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
4201 |
|
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
4202 DEFVAR_BOOL ("highlight-nonselected-windows", &highlight_nonselected_windows, |
|
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
4203 "*Non-nil means highlight region even in nonselected windows."); |
|
80f57ae8d44e
(syms_of_xdisp): Make highlight-nonselected-windows Lisp var.
Richard M. Stallman <rms@gnu.org>
parents:
3165
diff
changeset
|
4204 highlight_nonselected_windows = 1; |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4205 |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4206 DEFVAR_BOOL ("multiple-frames", &multiple_frames, |
|
11767
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
4207 "Non-nil if more than one frame is visible on this display.\n\ |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
4208 Minibuffer-only frames don't count, but iconified frames do.\n\ |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
4209 This variable is not guaranteed to be accurate except while parsing\n\ |
|
4166c8ea623d
(x_consider_frame_title): When setting multiple_frames,
Karl Heuer <kwzh@gnu.org>
parents:
11761
diff
changeset
|
4210 frame-title-format."); |
|
8772
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4211 |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4212 DEFVAR_LISP ("frame-title-format", &Vframe_title_format, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4213 "Template for displaying the titlebar of visible frames.\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4214 \(Assuming the window manager supports this feature.)\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4215 This variable has the same structure as `mode-line-format' (which see),\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4216 and is used only on frames for which no explicit name has been set\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4217 \(see `modify-frame-parameters')."); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4218 DEFVAR_LISP ("icon-title-format", &Vicon_title_format, |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4219 "Template for displaying the titlebar of an iconified frame.\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4220 \(Assuming the window manager supports this feature.)\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4221 This variable has the same structure as `mode-line-format' (which see),\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4222 and is used only on frames for which no explicit name has been set\n\ |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4223 \(see `modify-frame-parameters')."); |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4224 Vicon_title_format |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4225 = Vframe_title_format |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4226 = Fcons (intern ("multiple-frames"), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4227 Fcons (build_string ("%b"), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4228 Fcons (Fcons (build_string (""), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4229 Fcons (intern ("invocation-name"), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4230 Fcons (build_string ("@"), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4231 Fcons (intern ("system-name"), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4232 Qnil)))), |
|
c0a21329d9a7
(multiple_frames, Vframe_title_format, Vicon_title_format): New variables.
Karl Heuer <kwzh@gnu.org>
parents:
8684
diff
changeset
|
4233 Qnil))); |
| 10393 | 4234 |
| 4235 DEFVAR_LISP ("message-log-max", &Vmessage_log_max, | |
| 4236 "Maximum number of lines to keep in the message log buffer.\n\ | |
| 4237 If nil, disable message logging. If t, log messages but don't truncate\n\ | |
| 4238 the buffer when it becomes large."); | |
| 4239 XSETFASTINT (Vmessage_log_max, 50); | |
|
10667
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4240 |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4241 DEFVAR_LISP ("window-size-change-functions", &Vwindow_size_change_functions, |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4242 "Functions called before redisplay, if window sizes have changed.\n\ |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4243 The value should be a list of functions that take one argument.\n\ |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4244 Just before redisplay, for each frame, if any of its windows have changed\n\ |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4245 size since the last redisplay, or have been split or deleted,\n\ |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4246 all the functions in the list are called, with the frame as argument."); |
|
bacef13bc2ca
(Vwindow_size_change_functions): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
10641
diff
changeset
|
4247 Vwindow_size_change_functions = Qnil; |
| 277 | 4248 } |
| 4249 | |
| 4250 /* initialize the window system */ | |
| 4251 init_xdisp () | |
| 4252 { | |
| 4253 Lisp_Object root_window; | |
| 4254 #ifndef COMPILER_REGISTER_BUG | |
| 4255 register | |
| 4256 #endif /* COMPILER_REGISTER_BUG */ | |
| 4257 struct window *mini_w; | |
| 4258 | |
| 4259 this_line_bufpos = 0; | |
| 4260 | |
| 4261 mini_w = XWINDOW (minibuf_window); | |
|
1017
d42877206c0a
* xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents:
973
diff
changeset
|
4262 root_window = FRAME_ROOT_WINDOW (XFRAME (WINDOW_FRAME (mini_w))); |
| 277 | 4263 |
| 4264 echo_area_glyphs = 0; | |
| 4265 previous_echo_glyphs = 0; | |
| 4266 | |
| 4267 if (!noninteractive) | |
| 4268 { | |
| 769 | 4269 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (root_window))); |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
4270 XSETFASTINT (XWINDOW (root_window)->top, 0); |
| 769 | 4271 set_window_height (root_window, FRAME_HEIGHT (f) - 1, 0); |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
4272 XSETFASTINT (mini_w->top, FRAME_HEIGHT (f) - 1); |
| 277 | 4273 set_window_height (minibuf_window, 1, 0); |
| 4274 | |
|
9325
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
4275 XSETFASTINT (XWINDOW (root_window)->width, FRAME_WIDTH (f)); |
|
6f07f6dfe1ee
(redisplay, mark_window_display_accurate, redisplay_window, try_window,
Karl Heuer <kwzh@gnu.org>
parents:
9283
diff
changeset
|
4276 XSETFASTINT (mini_w->width, FRAME_WIDTH (f)); |
| 277 | 4277 } |
| 4278 } |
