annotate src/xdisp.c @ 1785:19755499df90

* window.c (window_internal_width): New function, which accounts for scrollbars if present. * lisp.h (window_internal_height, window_internal_width): Add extern declarations for these. * dispnew.c (direct_output_for_insert, direct_output_forward_char, buffer_posn_from_coords): Use window_internal_width instead of writing out its definition. * indent.c (compute_motion): Doc fix; mention scrollbars and window_internal_width. (pos_tab_offset, Fvertical_motion): Use window_internal_width instead of writing it out. * window.c (Fpos_visible_in_window_p, Fwindow_width, Fscroll_left, Fscroll_right): Same. * xdisp.c (redisplay, try_window, try_window_id, display_text_line): Same. * xdisp.c (display_string): Add new variable `f', to be W's frame. Use it to set desired_glyphs, and to get the frame's width to decide whether or not to draw vertical bars. * xdisp.c (display_text_line): If we're using vertical scrollbars, don't draw the vertical bars separating side-by-side windows. (display_string): Same thing. Draw spaces to fill in the part of the mode line that is under the scrollbar in partial-width windows. * xdisp.c (display_text_line): Use the usable internal width of the window, as calculated above, as the limit on the length of the overlay arrow's image, rather than using the window's width field, less one. * xdisp.c (redisplay): Call condemn_scrollbars_hook and judge_scrollbars_hook whenever they are set, not just when the frame has vertical scrollbars. * termhooks.h (mouse_position_hook): Doc fix. (set_vertical_scrollbar_hook): This doesn't return anything any more, and doesn't take a struct scrollbar * argument any more. (condemn_scrollbars_hook, redeem_scrollbar_hook, judge_scrollbars_hook): Doc fixes. * term.c (mouse_position_hook): Doc fix. (set_vertical_scrollbar_hook): This doesn't return anything any more. Doc fixes. * keyboard.c (kbd_buffer_get_event): Receive the scrollbar's window from *mouse_position_hook and pass it to make_lispy_movement, instead of working with a pointer to a struct scrollbar. (make_lispy_event): We don't need a window_from_scrollbar function anymore; we are given the window directly in *EVENT. Unify the code which generates text-area mouse clicks and scrollbar clicks; use the same code to distinguish clicks from drags on the scrollbar as in the text area. Distinguish clicks from drags by storing a copy of the lispy position list returned as part of the event. (button_down_location): Make this a lisp vector, rather than an array of random structures. (struct mouse_position): Remove this; it's been replaced by a lisp list. (make_lispy_movement): Accept the scrollbar's window as a parameter, rather than the scrollbar itself. If FRAME is zero, assume that the other arguments are garbage. (syms_of_keyboard): No need to staticpro each window of button_down_location now; just initialize and staticpro it. * window.c (window_from_scrollbar): Function deleted; no longer needed. * xdisp.c (redisplay_window): Just pass the window to set_vertical_scrollbar hook; don't pass the scrollbar object too. * xterm.c (XTmouse_position): Don't return a pointer to the scrollbar for scrollbar motion; instead, return the scrollbar's window. * xdisp.c (echo_area_display): Move the assignment of f and the check for visibility out of the "#ifdef MULTI_FRAME" clause; they should work under any circumstances. * xdisp.c (redisplay_window): If we're not going to redisplay this window because it's a minibuffer whose contents have already been updated, go ahead and jump to the scrollbar refreshing code anyway; they still need to be updated. Initialize opoint, so it's known to be valid when we jump. Calculate the scrollbar settings properly for minibuffers, no matter what they are displaying at the time. * xdisp.c (redisplay_windows): Don't restore the current buffer and its point before refreshing the scrollbars; we need the buffer accurate.
author Jim Blandy <jimb@redhat.com>
date Thu, 14 Jan 1993 15:18:53 +0000
parents f80c1f73f5b9
children c5038f47c602
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Display generation from window structure and buffer text.
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1992, 1993 Free Software Foundation, Inc.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
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
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include "config.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22 #include <stdio.h>
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 /*#include <ctype.h>*/
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #undef NULL
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include "lisp.h"
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
26 #include "frame.h"
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "window.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "termchar.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "dispextern.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 #include "buffer.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #include "indent.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "commands.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
33 #include "macros.h"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #include "disptab.h"
1718
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
35 #include "termhooks.h"
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 extern int interrupt_input;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 extern int command_loop_level;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 /* Nonzero means print newline before next minibuffer message. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 int noninteractive_need_newline;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #define min(a, b) ((a) < (b) ? (a) : (b))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45 #define max(a, b) ((a) > (b) ? (a) : (b))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 /* The buffer position of the first character appearing
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
48 entirely or partially on the current frame line.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
49 Or zero, which disables the optimization for the current frame line. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 static int this_line_bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 /* Number of characters past the end of this line,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 including the terminating newline */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 static int this_line_endpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
56 /* The vertical position of this frame line. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57 static int this_line_vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
59 /* Hpos value for start of display on this frame line.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60 Usually zero, but negative if first character really began
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 on previous line */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 static int this_line_start_hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64 /* Buffer that this_line variables are describing. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 static struct buffer *this_line_buffer;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67 /* Set by try_window_id to the vpos of first of any lines
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
68 scrolled on to the bottom of the frame. These lines should
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 not be included in any general scroll computation. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 static int scroll_bottom_vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 /* Value of echo_area_glyphs when it was last acted on.
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
73 If this is nonzero, there is a message on the frame
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 in the minibuffer and it should be erased as soon
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75 as it is no longer requested to appear. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 char *previous_echo_glyphs;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
78 /* Nonzero means truncate lines in all windows less wide than the frame */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 int truncate_partial_width_windows;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 Lisp_Object Vglobal_mode_string;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 /* Marker for where to display an arrow on top of the buffer text. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 Lisp_Object Voverlay_arrow_position;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 /* String to display for the arrow. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 Lisp_Object Voverlay_arrow_string;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 /* 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
90 static Lisp_Object last_arrow_position, last_arrow_string;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 /* Nonzero if overlay arrow has been displayed once in this window. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 static int overlay_arrow_seen;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
95 /* If cursor motion alone moves point off frame,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 Try scrolling this many lines up or down if that will bring it back. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 int scroll_step;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 /* Nonzero if try_window_id has made blank lines at window bottom
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 since the last redisplay that paused */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 static int blank_end_of_window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 /* Number of windows showing the buffer of the selected window.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 keyboard.c refers to this. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 int buffer_shared;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
107 /* display_text_line sets these to the frame position (origin 0) of point,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 whether the window is selected or not.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 Set one to -1 first to determine whether point was found afterwards. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 static int cursor_vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 static int cursor_hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 int debug_end_pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 /* Nonzero means display mode line highlighted */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 int mode_line_inverse_video;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 static void echo_area_display ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 void mark_window_display_accurate ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 static void redisplay_windows ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 static void redisplay_window ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 static void try_window ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 static int try_window_id ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 static struct position *display_text_line ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 static void display_mode_line ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 static int display_mode_element ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 static char *fmodetrunc ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 static char *decode_mode_spec ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 static int display_string ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 /* Prompt to display in front of the minibuffer contents */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 char *minibuf_prompt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 /* Width in columns of current minibuffer prompt. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 int minibuf_prompt_width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 /* Message to display instead of minibuffer contents
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 This is what the functions error and message make,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 and command echoing uses it as well.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
141 It overrides the minibuf_prompt as well as the buffer. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142 char *echo_area_glyphs;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 /* true iff we should redraw the mode lines on the next redisplay */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 int update_mode_lines;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 /* Smallest number of characters before the gap
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 at any time since last redisplay that finished.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 Valid for current buffer when try_window_id can be called. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 int beg_unchanged;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 /* Smallest number of characters after the gap
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 at any time since last redisplay that finished.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 Valid for current buffer when try_window_id can be called. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 int end_unchanged;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 /* MODIFF as of last redisplay that finished;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 if it matches MODIFF, beg_unchanged and end_unchanged
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 contain no useful information */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 int unchanged_modified;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 /* Nonzero if head_clip or tail_clip of current buffer has changed
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 since last redisplay that finished */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 int clip_changed;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 /* Nonzero if window sizes or contents have changed
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 since last redisplay that finished */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 int windows_or_buffers_changed;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
1527
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
171 /* Specify m, a string, as a message in the minibuf. If m is 0, clear out
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
172 any existing message, and let the minibuffer text show through. */
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
173 void
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
174 message1 (m)
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
175 char *m;
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
176 {
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
177 if (noninteractive)
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
178 {
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
179 if (noninteractive_need_newline)
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
180 putc ('\n', stderr);
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
181 noninteractive_need_newline = 0;
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
182 fprintf (stderr, "%s\n", m);
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
183 fflush (stderr);
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
184 }
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
185 /* A null message buffer means that the frame hasn't really been
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
186 initialized yet. Error messages get reported properly by
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
187 cmd_error, so this must be just an informative message; toss it. */
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
188 else if (INTERACTIVE && FRAME_MESSAGE_BUF (selected_frame))
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
189 {
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
190 #ifdef MULTI_FRAME
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
191 Lisp_Object minibuf_frame;
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
192
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
193 choose_minibuf_frame ();
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
194 minibuf_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
1656
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
195 FRAME_SAMPLE_VISIBILITY (XFRAME (minibuf_frame));
1527
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
196 if (FRAME_VISIBLE_P (selected_frame)
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
197 && ! FRAME_VISIBLE_P (XFRAME (minibuf_frame)))
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
198 Fmake_frame_visible (WINDOW_FRAME (XWINDOW (minibuf_window)));
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
199 #endif
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
200
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
201 if (m)
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
202 echo_area_glyphs = m;
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
203 else
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
204 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
205
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
206 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
207 echo_area_display ();
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
208 update_frame (XFRAME (XWINDOW (minibuf_window)->frame), 1, 1);
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
209 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
210 }
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
211 }
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
212
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
213 /* Nonzero if FRAME_MESSAGE_BUF (selected_frame) is being used by print;
331
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
214 zero if being used by message. */
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
215 int message_buf_print;
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
216
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
217 /* 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
218 any existing message, and let the minibuffer text show through. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 /* VARARGS 1 */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221 message (m, a1, a2, a3)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 char *m;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 if (noninteractive)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 {
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
226 if (m)
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
227 {
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
228 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
229 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
230 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
231 fprintf (stderr, m, a1, a2, a3);
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
232 fprintf (stderr, "\n");
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
233 fflush (stderr);
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
234 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 }
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
236 /* A null message buffer means that the frame hasn't really been
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
237 initialized yet. Error messages get reported properly by
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
238 cmd_error, so this must be just an informative message; toss it. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
239 else if (INTERACTIVE && FRAME_MESSAGE_BUF (selected_frame))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 {
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
241 if (m)
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
242 {
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
243 {
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 #ifdef NO_ARG_ARRAY
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
245 int a[3];
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
246 a[0] = a1;
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
247 a[1] = a2;
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
248 a[2] = a3;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
250 doprnt (FRAME_MESSAGE_BUF (selected_frame),
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
251 FRAME_WIDTH (selected_frame), m, 0, 3, a);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 #else
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
253 doprnt (FRAME_MESSAGE_BUF (selected_frame),
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
254 FRAME_WIDTH (selected_frame), m, 0, 3, &a1);
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
255 #endif /* NO_ARG_ARRAY */
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
256 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257
1527
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
258 message1 (FRAME_MESSAGE_BUF (selected_frame));
1446
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
259 }
37b3c2981b40 * xdisp.c (message): If M is zero, clear echo_area_glyphs and
Jim Blandy <jimb@redhat.com>
parents: 1124
diff changeset
260 else
1527
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
261 message1 (0);
331
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
262
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
263 /* Print should start at the beginning of the message
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
264 buffer next time. */
c1f8ba0ea512 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 301
diff changeset
265 message_buf_print = 0;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
267 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
268
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 static void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 echo_area_display ()
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 register int vpos;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
273 FRAME_PTR f;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
275 #ifdef MULTI_FRAME
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
276 choose_minibuf_frame ();
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
277 #endif
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
278
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
279 f = XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window)));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
281 if (! FRAME_VISIBLE_P (f))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 return;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
284 if (frame_garbaged)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 Fredraw_display ();
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
287 frame_garbaged = 0;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 if (echo_area_glyphs || minibuf_level == 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 vpos = XFASTINT (XWINDOW (minibuf_window)->top);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
293 get_display_line (f, vpos, 0);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294 display_string (XWINDOW (minibuf_window), vpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 echo_area_glyphs ? echo_area_glyphs : "",
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
296 0, 0, 0, FRAME_WIDTH (f));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 /* If desired cursor location is on this line, put it at end of text */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
299 if (FRAME_CURSOR_Y (f) == vpos)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
300 FRAME_CURSOR_X (f) = FRAME_DESIRED_GLYPHS (f)->used[vpos];
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
301
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
302 /* Fill the rest of the minibuffer window with blank lines. */
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
303 {
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
304 int i;
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
305
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
306 for (i = vpos + 1; i < vpos + XWINDOW (minibuf_window)->height; i++)
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
307 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
308 get_display_line (f, i, 0);
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
309 display_string (XWINDOW (minibuf_window), vpos,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
310 "", 0, 0, 0, FRAME_WIDTH (f));
727
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
311 }
540b047ece4d *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 588
diff changeset
312 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
314 else if (!EQ (minibuf_window, selected_window))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
315 windows_or_buffers_changed++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
316
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
317 if (EQ (minibuf_window, selected_window))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 this_line_bufpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 previous_echo_glyphs = echo_area_glyphs;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
323 /* Do a frame update, taking possible shortcuts into account.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
324 This is the main external entry point for redisplay.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 If the last redisplay displayed an echo area message and that
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 message is no longer requested, we clear the echo area
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 or bring back the minibuffer if that is in use.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 Everyone would like to have a hook here to call eval,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 but that cannot be done safely without a lot of changes elsewhere.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 This can be called from signal handlers; with alarms set up;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 or with synchronous processes running.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 See the function `echo' in keyboard.c.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 See Fcall_process; if you called it from here, it could be
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 entered recursively. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339 redisplay ()
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 register struct window *w = XWINDOW (selected_window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 register int pause;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 int must_finish = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344 int all_windows;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 register int tlbufpos, tlendpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 struct position pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 extern int input_pending;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 if (noninteractive)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 return;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351
1656
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
352 /* 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
353 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
354 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
355 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
356 {
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
357 Lisp_Object tail;
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
358 FRAME_PTR f;
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
359
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
360 FOR_EACH_FRAME (tail, f)
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
361 FRAME_SAMPLE_VISIBILITY (f);
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
362 }
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
363
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
364 /* Notice any pending interrupt request to change frame size. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 do_pending_window_change ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
367 if (frame_garbaged)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 Fredraw_display ();
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
370 frame_garbaged = 0;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
373 /* Normally the message* functions will have already displayed and
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
374 updated the echo area, but the frame may have been trashed, or
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
375 the update may have been preempted, so display the echo area
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
376 again here. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 if (echo_area_glyphs || previous_echo_glyphs)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 echo_area_display ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 must_finish = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 if (clip_changed || windows_or_buffers_changed)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 update_mode_lines++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 /* Detect case that we need to write a star in the mode line. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 if (XFASTINT (w->last_modified) < MODIFF
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 && XFASTINT (w->last_modified) <= current_buffer->save_modified)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390 w->update_mode_line = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 if (buffer_shared > 1)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 update_mode_lines++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
395 FRAME_SCROLL_BOTTOM_VPOS (XFRAME (w->frame)) = -1;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 all_windows = update_mode_lines || buffer_shared > 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 /* If specs for an arrow have changed, do thorough redisplay
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 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
401 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
402 || ! EQ (Voverlay_arrow_string, last_arrow_string))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 all_windows = 1, clip_changed = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 tlbufpos = this_line_bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 tlendpos = this_line_endpos;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
407 if (!all_windows && tlbufpos > 0 && NILP (w->update_mode_line)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
408 && FRAME_VISIBLE_P (XFRAME (w->frame))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 /* Make sure recorded data applies to current buffer, etc */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 && this_line_buffer == current_buffer
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 && current_buffer == XBUFFER (w->buffer)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
412 && NILP (w->force_start)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 /* Point must be on the line that we have info recorded about */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414 && point >= tlbufpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 && point <= Z - tlendpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 /* All text outside that line, including its final newline,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 must be unchanged */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418 && (XFASTINT (w->last_modified) >= MODIFF
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 || (beg_unchanged >= tlbufpos - 1
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 && GPT >= tlbufpos
528
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
421 /* If selective display, can't optimize
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
422 if the changes start at the beginning of the line. */
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
423 && ((XTYPE (current_buffer->selective_display) == Lisp_Int
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
424 && XINT (current_buffer->selective_display) > 0
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
425 ? (beg_unchanged >= tlbufpos
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
426 && GPT > tlbufpos)
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
427 : 1))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 && end_unchanged >= tlendpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 && Z - GPT >= tlendpos)))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 if (tlbufpos > BEGV && FETCH_CHAR (tlbufpos - 1) != '\n'
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 && (tlbufpos == ZV
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 || FETCH_CHAR (tlbufpos) == '\n'))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 /* Former continuation line has disappeared by becoming empty */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 goto cancel;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 else if (XFASTINT (w->last_modified) < MODIFF
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 || MINI_WINDOW_P (w))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 cursor_vpos = -1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 overlay_arrow_seen = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 display_text_line (w, tlbufpos, this_line_vpos, this_line_start_hpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 pos_tab_offset (w, tlbufpos));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 /* If line contains point, is not continued,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 and ends at same distance from eob as before, we win */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 if (cursor_vpos >= 0 && this_line_bufpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 && this_line_endpos == tlendpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
448 if (XFASTINT (w->width) != FRAME_WIDTH (XFRAME (WINDOW_FRAME (w))))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 preserve_other_columns (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 goto update;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 goto cancel;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 else if (point == XFASTINT (w->last_point))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 if (!must_finish)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 do_pending_window_change ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460 return;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 goto update;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 pos = *compute_motion (tlbufpos, 0,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468 point, 2, - (1 << (SHORTBITS - 1)),
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
469 window_internal_width (w) - 1,
574
58047bf5d46c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 528
diff changeset
470 XINT (w->hscroll),
58047bf5d46c *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 528
diff changeset
471 pos_tab_offset (w, tlbufpos));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 if (pos.vpos < 1)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
474 FRAME_CURSOR_X (selected_frame)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 = XFASTINT (w->left) + max (pos.hpos, 0);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
476 FRAME_CURSOR_Y (selected_frame) = this_line_vpos;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 goto update;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 goto cancel;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 cancel:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 /* Text changed drastically or point moved off of line */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
484 cancel_line (this_line_vpos, selected_frame);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 this_line_bufpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 all_windows |= buffer_shared > 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 if (all_windows)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 Lisp_Object tail;
1656
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
493 FRAME_PTR f;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 /* Recompute # windows showing selected buffer.
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
496 This will be incremented each time such a window is displayed. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 buffer_shared = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498
1656
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
499 FOR_EACH_FRAME (tail, f)
1718
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
500 {
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
501 /* Mark all the scrollbars to be removed; we'll redeem the ones
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
502 we want when we redisplay their windows. */
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
503 if (condemn_scrollbars_hook)
1718
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
504 (*condemn_scrollbars_hook) (f);
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
505
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
506 if (FRAME_VISIBLE_P (f))
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
507 redisplay_windows (FRAME_ROOT_WINDOW (f));
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
508
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
509 /* Any scrollbars which redisplay_windows should have nuked
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
510 should now go away. */
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
511 if (judge_scrollbars_hook)
1718
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
512 (*judge_scrollbars_hook) (f);
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
513 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 }
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
515 else if (FRAME_VISIBLE_P (selected_frame))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 redisplay_window (selected_window, 1);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
518 if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 preserve_other_columns (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 update:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 /* Prevent various kinds of signals during display update.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 stdio is not robust about handling signals,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 which can cause an apparent I/O error. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 if (interrupt_input)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 unrequest_sigio ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 stop_polling ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
530 #ifdef MULTI_FRAME
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 if (all_windows)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 Lisp_Object tail;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 pause = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
537 for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
539 FRAME_PTR f;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
541 if (XTYPE (XCONS (tail)->car) != Lisp_Frame)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 continue;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
544 f = XFRAME (XCONS (tail)->car);
1718
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
545 if (FRAME_VISIBLE_P (f))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
547 pause |= update_frame (f, 0, 0);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 if (!pause)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
549 mark_window_display_accurate (f->root_window, 1);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 else
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
554 #endif /* MULTI_FRAME */
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
555 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
556 if (FRAME_VISIBLE_P (selected_frame))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
557 pause = update_frame (selected_frame, 0, 0);
1656
a532c5a23984 * xdisp.c (redisplay): Call FRAME_SAMPLE_VISIBILITY to set the
Jim Blandy <jimb@redhat.com>
parents: 1600
diff changeset
558
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
559 /* We may have called echo_area_display at the top of this
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
560 function. If the echo area is on another frame, that may
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
561 have put text on a frame other than the selected one, so the
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
562 above call to update_frame would not have caught it. Catch
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
563 it here. */
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
564 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
565 FRAME_PTR mini_frame =
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
566 XFRAME (WINDOW_FRAME (XWINDOW (minibuf_window)));
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
567
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
568 if (mini_frame != selected_frame)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
569 pause |= update_frame (mini_frame, 0, 0);
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
570 }
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
571 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
573 /* If frame does not match, prevent doing single-line-update next time.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 Also, don't forget to check every line to update the arrow. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
575 if (pause)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
576 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 this_line_bufpos = 0;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
578 if (!NILP (last_arrow_position))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 last_arrow_position = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 last_arrow_string = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 }
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
583 /* If we pause after scrolling, some lines in current_frame
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 may be null, so preserve_other_columns won't be able to
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 preserve all the vertical-bar separators. So, avoid using it
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 in that case. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
587 if (XFASTINT (w->width) != FRAME_WIDTH (selected_frame))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 update_mode_lines = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
591 /* Now text on frame agrees with windows, so
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 put info into the windows for partial redisplay to follow */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 if (!pause)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 register struct buffer *b = XBUFFER (w->buffer);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 blank_end_of_window = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 clip_changed = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 unchanged_modified = BUF_MODIFF (b);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 beg_unchanged = BUF_GPT (b) - BUF_BEG (b);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602 end_unchanged = BUF_Z (b) - BUF_GPT (b);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 XFASTINT (w->last_point) = BUF_PT (b);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
605 XFASTINT (w->last_point_x) = FRAME_CURSOR_X (selected_frame);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
606 XFASTINT (w->last_point_y) = FRAME_CURSOR_Y (selected_frame);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
608 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
609 mark_window_display_accurate (FRAME_ROOT_WINDOW (selected_frame), 1);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
610 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 w->update_mode_line = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613 XFASTINT (w->last_modified) = BUF_MODIFF (b);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 w->window_end_valid = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 last_arrow_position = Voverlay_arrow_position;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
616 last_arrow_string = Voverlay_arrow_string;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 update_mode_lines = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 windows_or_buffers_changed = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 /* Start SIGIO interrupts coming again.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623 Having them off during the code above
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 makes it less likely one will discard output,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 but not impossible, since there might be stuff
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 in the system buffer here.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 But it is much hairier to try to do anything about that. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 if (interrupt_input)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 request_sigio ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 start_polling ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
633 /* Change frame size now if a change is pending. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 do_pending_window_change ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
637 /* Redisplay, but leave alone any recent echo area message
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 unless another message has been requested in its place.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 This is useful in situations where you need to redisplay but no
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641 user action has occurred, making it inappropriate for the message
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 area to be cleared. See tracking_off and
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 wait_reading_process_input for examples of these situations. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645 redisplay_preserve_echo_area ()
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
646 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
647 if (echo_area_glyphs == 0 && previous_echo_glyphs != 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
649 echo_area_glyphs = previous_echo_glyphs;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
650 redisplay ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
651 echo_area_glyphs = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
654 redisplay ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
655 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 mark_window_display_accurate (window, flag)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659 Lisp_Object window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 int flag;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 register struct window *w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
664 for (;!NILP (window); window = w->next)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 {
1527
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
666 if (XTYPE (window) != Lisp_Window) abort ();
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 w = XWINDOW (window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
669 if (!NILP (w->buffer))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
670 XFASTINT (w->last_modified)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 = !flag ? 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 : XBUFFER (w->buffer) == current_buffer
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673 ? MODIFF : BUF_MODIFF (XBUFFER (w->buffer));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 w->window_end_valid = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 w->update_mode_line = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
677 if (!NILP (w->vchild))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
678 mark_window_display_accurate (w->vchild, flag);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
679 if (!NILP (w->hchild))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
680 mark_window_display_accurate (w->hchild, flag);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 if (flag)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
684 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685 last_arrow_position = Voverlay_arrow_position;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 last_arrow_string = Voverlay_arrow_string;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
689 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
690 /* t is unequal to any useful value of Voverlay_arrow_... */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
691 last_arrow_position = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 last_arrow_string = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
694 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 int do_id = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698 static void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 redisplay_windows (window)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 Lisp_Object window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
702 for (; !NILP (window); window = XWINDOW (window)->next)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 redisplay_window (window, 0);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706 static void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707 redisplay_window (window, just_this_one)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708 Lisp_Object window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
709 int just_this_one;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
710 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
711 register struct window *w = XWINDOW (window);
1718
f80c1f73f5b9 * xdisp.c: #include "termhooks.h".
Jim Blandy <jimb@redhat.com>
parents: 1656
diff changeset
712 FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 int height;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 register int lpoint = point;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 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
716 register int width = window_internal_width (w) - 1;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717 register int startp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 register int hscroll = XINT (w->hscroll);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 struct position pos;
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
720 int opoint = point;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 int tem;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
722 int window_needs_modeline;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
724 if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 /* If this is a combination window, do its children; that's all. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
728 if (!NILP (w->vchild))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 redisplay_windows (w->vchild);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 return;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
733 if (!NILP (w->hchild))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735 redisplay_windows (w->hchild);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 return;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 }
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
738 if (NILP (w->buffer))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
739 abort ();
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
740
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
741 height = window_internal_height (w);
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
742
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
743 if (MINI_WINDOW_P (w))
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
744 {
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
745 if (w == XWINDOW (minibuf_window))
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
746 {
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
747 if (echo_area_glyphs)
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
748 /* We've already displayed the echo area glyphs, if any. */
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
749 goto finish_scrollbars;
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
750 }
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
751 else
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
752 {
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
753 /* This is a minibuffer, but it's not the currently active one, so
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
754 clear it. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
755 int vpos = XFASTINT (XWINDOW (FRAME_MINIBUF_WINDOW (f))->top);
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
756 int i;
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
757
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
758 for (i = 0; i < height; i++)
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
759 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
760 get_display_line (f, vpos + i, 0);
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
761 display_string (w, vpos + i, "", 0, 0, 0, width);
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
762 }
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
763
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
764 goto finish_scrollbars;
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
765 }
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
766 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
768 if (update_mode_lines)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
769 w->update_mode_line = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
771 /* Otherwise set up data on this window; select its buffer and point value */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 current_buffer = XBUFFER (w->buffer);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
774 opoint = point;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
775
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
776 /* Count number of windows showing the selected buffer. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
777
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 if (!just_this_one
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 && current_buffer == XBUFFER (XWINDOW (selected_window)->buffer))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 buffer_shared++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782 /* POINT refers normally to the selected window.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 For any other window, set up appropriate value. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
785 if (!EQ (window, selected_window))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
787 SET_PT (marker_position (w->pointm));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788 if (point < BEGV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
790 SET_PT (BEGV);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 Fset_marker (w->pointm, make_number (point), Qnil);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 else if (point > (ZV - 1))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 {
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
795 SET_PT (ZV);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
796 Fset_marker (w->pointm, make_number (point), Qnil);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
797 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 /* If window-start is screwed up, choose a new one. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801 if (XMARKER (w->start)->buffer != current_buffer)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 goto recenter;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
804 startp = marker_position (w->start);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
805
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
806 /* Handle case where place to start displaying has been specified,
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
807 unless the specified location is outside the visible range. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
808 if (!NILP (w->force_start))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 w->update_mode_line = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 w->force_start = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 XFASTINT (w->last_modified) = 0;
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
813 if (startp < BEGV) startp = BEGV;
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
814 if (startp > ZV) startp = ZV;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 try_window (window, startp);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 if (cursor_vpos < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 /* If point does not appear, move point so it does appear */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819 pos = *compute_motion (startp, 0,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 ((EQ (window, minibuf_window) && startp == 1)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821 ? minibuf_prompt_width : 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 +
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 (hscroll ? 1 - hscroll : 0),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 ZV, height / 2,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 - (1 << (SHORTBITS - 1)),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 width, hscroll, pos_tab_offset (w, startp));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 SET_PT (pos.bufpos);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
828 if (w != XWINDOW (FRAME_SELECTED_WINDOW (f)))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 Fset_marker (w->pointm, make_number (point), Qnil);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
830 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 lpoint = point;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
833 FRAME_CURSOR_X (f) = max (0, pos.hpos) + XFASTINT (w->left);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
834 FRAME_CURSOR_Y (f) = pos.vpos + XFASTINT (w->top);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 goto done;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 /* Handle case where text has not changed, only point,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
841 and it has not moved off the frame */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 /* This code is not used for minibuffer for the sake of
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 the case of redisplaying to replace an echo area message;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
845 since in that case the minibuffer contents per se are usually unchanged.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 This code is of no real use in the minibuffer since
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 the handling of this_line_bufpos, etc.,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848 in redisplay handles the same cases. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 if (XFASTINT (w->last_modified) >= MODIFF
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 && point >= startp && !clip_changed
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
852 && (just_this_one || XFASTINT (w->width) == FRAME_WIDTH (f))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 && !EQ (window, minibuf_window))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 pos = *compute_motion (startp, 0, (hscroll ? 1 - hscroll : 0),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856 point, height + 1, 10000, width, hscroll,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 pos_tab_offset (w, startp));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 if (pos.vpos < height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
861 /* Ok, point is still on frame */
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
862 if (w == XWINDOW (FRAME_SELECTED_WINDOW (f)))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 /* These variables are supposed to be origin 1 */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
865 FRAME_CURSOR_X (f) = max (0, pos.hpos) + XFASTINT (w->left);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
866 FRAME_CURSOR_Y (f) = pos.vpos + XFASTINT (w->top);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
868 /* This doesn't do the trick, because if a window to the right of
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869 this one must be redisplayed, this does nothing because there
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
870 is nothing in DesiredFrame yet, and then the other window is
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 redisplayed, making likes that are empty in this window's columns.
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
872 if (XFASTINT (w->width) != FRAME_WIDTH (f))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 preserve_my_columns (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 goto done;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877 /* Don't bother trying redisplay with same start;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 we already know it will lose */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
880 /* If current starting point was originally the beginning of a line
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 but no longer is, find a new starting point. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
882 else if (!NILP (w->start_at_line_beg)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 && !(startp == BEGV
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 || FETCH_CHAR (startp - 1) == '\n'))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 goto recenter;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 else if (just_this_one && !MINI_WINDOW_P (w)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 && point >= startp
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 && XFASTINT (w->last_modified)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 && ! EQ (w->window_end_valid, Qnil)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 && do_id && !clip_changed
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 && !blank_end_of_window
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
894 && XFASTINT (w->width) == FRAME_WIDTH (f)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 && EQ (last_arrow_position, Voverlay_arrow_position)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896 && EQ (last_arrow_string, Voverlay_arrow_string)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
897 && (tem = try_window_id (FRAME_SELECTED_WINDOW (f)))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 && tem != -2)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
900 /* tem > 0 means success. tem == -1 means choose new start.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 tem == -2 means try again with same start,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 and nothing but whitespace follows the changed stuff.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 tem == 0 means try again with same start. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 if (tem > 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 goto done;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 else if (startp >= BEGV && startp <= ZV
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 /* Avoid starting display at end of buffer! */
433
1c6c6382f1d7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 371
diff changeset
909 && (startp < ZV || startp == BEGV
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 || (XFASTINT (w->last_modified) >= MODIFF)))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 /* Try to redisplay starting at same place as before */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
913 /* If point has not moved off frame, accept the results */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914 try_window (window, startp);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 if (cursor_vpos >= 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916 goto done;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
917 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
918 cancel_my_columns (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
919 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
920
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
921 XFASTINT (w->last_modified) = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
922 w->update_mode_line = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
923
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
924 /* Try to scroll by specified few lines */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
925
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 if (scroll_step && !clip_changed)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
928 if (point > startp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
929 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 pos = *vmotion (Z - XFASTINT (w->window_end_pos),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
931 scroll_step, width, hscroll, window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 if (pos.vpos >= height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 goto scroll_fail;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 pos = *vmotion (startp, point < startp ? - scroll_step : scroll_step,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937 width, hscroll, window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
938
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 if (point >= pos.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941 try_window (window, pos.bufpos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 if (cursor_vpos >= 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943 goto done;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 cancel_my_columns (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 scroll_fail: ;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
949
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 /* Finally, just choose place to start which centers point */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 recenter:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 pos = *vmotion (point, - height / 2, width, hscroll, window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 try_window (window, pos.bufpos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 startp = marker_position (w->start);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957 w->start_at_line_beg =
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 (startp == BEGV || FETCH_CHAR (startp - 1) == '\n') ? Qt : Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 done:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 /* If window not full width, must redo its mode line
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 if the window to its side is being redone */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
963 if ((!NILP (w->update_mode_line)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
964 || (!just_this_one && width < FRAME_WIDTH (f) - 1))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 && height != XFASTINT (w->height))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966 display_mode_line (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
968 finish_scrollbars:
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
969 if (FRAME_HAS_VERTICAL_SCROLLBARS (f))
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
970 {
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
971 int start, end, whole;
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
972
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
973 /* Calculate the start and end positions for the current window.
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
974 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
975 if (! MINI_WINDOW_P (w)
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
976 || (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
977 {
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
978 start = startp;
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
979 /* 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
980 moment, we'll pretend it is. */
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
981 end = Z - XINT (w->window_end_pos);
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
982 whole = Z - BEG;
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
983 }
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
984 else
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
985 start = end = whole = 0;
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
986
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
987 /* Indicate what this scrollbar ought to be displaying now. */
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
988 (*set_vertical_scrollbar_hook) (w, end - start, whole, start - 1);
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
989
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
990 /* Note that we actually used the scrollbar attached to this window,
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
991 so it shouldn't be deleted at the end of redisplay. */
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
992 (*redeem_scrollbar_hook) (w);
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
993 }
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
994
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
995 SET_PT (opoint);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 current_buffer = old;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
997 SET_PT (lpoint);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 /* Do full redisplay on one window, starting at position `pos'. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 static void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 try_window (window, pos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 Lisp_Object window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 register int pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 register struct window *w = XWINDOW (window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1008 register int height = window_internal_height (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 register int vpos = XFASTINT (w->top);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 register int last_text_vpos = vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 int tab_offset = pos_tab_offset (w, pos);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1012 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
1013 int width = window_internal_width (w) - 1;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 struct position val;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 Fset_marker (w->start, make_number (pos), Qnil);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 cursor_vpos = -1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 overlay_arrow_seen = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 val.hpos = XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 while (--height >= 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 val = *display_text_line (w, pos, vpos, val.hpos, tab_offset);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 tab_offset += width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 if (val.vpos) tab_offset = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 vpos++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 if (pos != val.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 last_text_vpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 /* Next line, unless prev line ended in end of buffer with no cr */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 = vpos - (val.vpos && FETCH_CHAR (val.bufpos - 1) != '\n');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 pos = val.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 /* If last line is continued in middle of character,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1035 include the split character in the text considered on the frame */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 if (val.hpos < (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 pos++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1039 /* If bottom just moved off end of frame, change mode line percentage. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 if (XFASTINT (w->window_end_pos) == 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 && Z != pos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 w->update_mode_line = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1044 /* Say where last char on frame will be, once redisplay is finished. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 XFASTINT (w->window_end_pos) = Z - pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1046 XFASTINT (w->window_end_vpos) = last_text_vpos - XFASTINT (w->top);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047 /* But that is not valid info until redisplay finishes. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1048 w->window_end_valid = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1050
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 /* Try to redisplay when buffer is modified locally,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 computing insert/delete line to preserve text outside
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 the bounds of the changes.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 Return 1 if successful, 0 if if cannot tell what to do,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1055 or -1 to tell caller to find a new window start,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1056 or -2 to tell caller to do normal redisplay with same window start. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1057
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058 static int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1059 try_window_id (window)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 Lisp_Object window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 int pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 register struct window *w = XWINDOW (window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 register int height = window_internal_height (w);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1065 FRAME_PTR f = XFRAME (w->frame);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1066 int top = XFASTINT (w->top);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1067 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
1068 int width = window_internal_width (w) - 1;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1069 int hscroll = XINT (w->hscroll);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1070 int lmargin = hscroll > 0 ? 1 - hscroll : 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 register int vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072 register int i, tem;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073 int last_text_vpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 int stop_vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 struct position val, bp, ep, xp, pp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 int scroll_amount = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 int delta;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 int tab_offset, epto;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 if (GPT - BEG < beg_unchanged)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1082 beg_unchanged = GPT - BEG;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 if (Z - GPT < end_unchanged)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 end_unchanged = Z - GPT;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1085
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 if (beg_unchanged + 1 < start)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 return 0; /* Give up if changes go above top of window */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 /* Find position before which nothing is changed. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 bp = *compute_motion (start, 0, lmargin,
371
54ac13a6f74e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1091 beg_unchanged + 1, height + 1, 0, width, hscroll,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 pos_tab_offset (w, start));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 if (bp.vpos >= height)
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1094 {
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1095 if (point < bp.bufpos && !bp.contin)
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1096 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1097 /* All changes are below the frame, and point is on the frame.
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1098 We don't need to change the frame at all.
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1099 But we need to update window_end_pos to account for
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1100 any change in buffer size. */
371
54ac13a6f74e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1101 bp = *compute_motion (start, 0, lmargin,
54ac13a6f74e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1102 Z, height, 0,
54ac13a6f74e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 368
diff changeset
1103 width, hscroll, pos_tab_offset (w, start));
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1104 XFASTINT (w->window_end_vpos) = height;
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1105 XFASTINT (w->window_end_pos) = Z - bp.bufpos;
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1106 return 1;
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1107 }
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1108 return 0;
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1109 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 vpos = bp.vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1113 /* Find beginning of that frame line. Must display from there. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 bp = *vmotion (bp.bufpos, 0, width, hscroll, window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 pos = bp.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 val.hpos = lmargin;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1118 if (pos < start)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 return -1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 /* If about to start displaying at the beginning of a continuation line,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1122 really start with previous frame line, in case it was not
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 continued when last redisplayed */
528
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1124 if ((bp.contin && bp.bufpos - 1 == beg_unchanged && vpos > 0)
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1125 ||
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1126 /* Likewise if we have to worry about selective display. */
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1127 (XTYPE (current_buffer->selective_display) == Lisp_Int
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1128 && XINT (current_buffer->selective_display) > 0
5af35411366a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 485
diff changeset
1129 && bp.bufpos - 1 == beg_unchanged && vpos > 0))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 bp = *vmotion (bp.bufpos, -1, width, hscroll, window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1132 --vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 pos = bp.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1134 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1135
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 if (bp.contin && bp.hpos != lmargin)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138 val.hpos = bp.prevhpos - width + lmargin;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 pos--;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 bp.vpos = vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 /* Find first visible newline after which no more is changed. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 tem = find_next_newline (Z - max (end_unchanged, Z - ZV), 1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 if (XTYPE (current_buffer->selective_display) == Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1147 && XINT (current_buffer->selective_display) > 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 while (tem < ZV - 1
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149 && (position_indentation (tem)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 >= XINT (current_buffer->selective_display)))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 tem = find_next_newline (tem, 1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1152
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 /* Compute the cursor position after that newline. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154 ep = *compute_motion (pos, vpos, val.hpos, tem,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1155 height, - (1 << (SHORTBITS - 1)),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 width, hscroll, pos_tab_offset (w, bp.bufpos));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1158 /* If changes reach past the text available on the frame,
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1159 just display rest of frame. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 if (ep.bufpos > Z - XFASTINT (w->window_end_pos))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 stop_vpos = height;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 stop_vpos = ep.vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1164
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 /* If no newline before ep, the line ep is on includes some changes
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 that must be displayed. Make sure we don't stop before it. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 /* Also, if changes reach all the way until ep.bufpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1168 it is possible that something was deleted after the
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 newline before it, so the following line must be redrawn. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 if (stop_vpos == ep.vpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171 && (ep.bufpos == BEGV
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1172 || FETCH_CHAR (ep.bufpos - 1) != '\n'
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 || ep.bufpos == Z - end_unchanged))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 stop_vpos = ep.vpos + 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 cursor_vpos = -1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 overlay_arrow_seen = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 /* If changes do not reach to bottom of window,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 figure out how much to scroll the rest of the window */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 if (stop_vpos < height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 /* Now determine how far up or down the rest of the window has moved */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 epto = pos_tab_offset (w, ep.bufpos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 xp = *compute_motion (ep.bufpos, ep.vpos, ep.hpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 Z - XFASTINT (w->window_end_pos),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 10000, 0, width, hscroll, epto);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 scroll_amount = xp.vpos - XFASTINT (w->window_end_vpos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1190 /* Is everything on frame below the changes whitespace?
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 If so, no scrolling is really necessary. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 for (i = ep.bufpos; i < xp.bufpos; i++)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 tem = FETCH_CHAR (i);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1195 if (tem != ' ' && tem != '\n' && tem != '\t')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 if (i == xp.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 return -2;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 XFASTINT (w->window_end_vpos) += scroll_amount;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1203 /* Before doing any scrolling, verify that point will be on frame. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 if (point > ep.bufpos && !(point <= xp.bufpos && xp.bufpos < height))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206 if (point <= xp.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1208 pp = *compute_motion (ep.bufpos, ep.vpos, ep.hpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1209 point, height, - (1 << (SHORTBITS - 1)),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1210 width, hscroll, epto);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 pp = *compute_motion (xp.bufpos, xp.vpos, xp.hpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 point, height, - (1 << (SHORTBITS - 1)),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 width, hscroll, pos_tab_offset (w, xp.bufpos));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218 if (pp.bufpos < point || pp.vpos == height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1219 return 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220 cursor_vpos = pp.vpos + top;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 cursor_hpos = pp.hpos + XFASTINT (w->left);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224 if (stop_vpos - scroll_amount >= height
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 || ep.bufpos == xp.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227 if (scroll_amount < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 stop_vpos -= scroll_amount;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 scroll_amount = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 /* In this path, we have altered window_end_vpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 and not left it negative.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 We must make sure that, in case display is preempted
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1233 before the frame changes to reflect what we do here,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 further updates will not come to try_window_id
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1235 and assume the frame and window_end_vpos match. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236 blank_end_of_window = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 else if (!scroll_amount)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 {}
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 else if (bp.bufpos == Z - end_unchanged)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 /* If reprinting everything is nearly as fast as scrolling,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 don't bother scrolling. Can happen if lines are short. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1244 if (scroll_cost (f, bp.vpos + top - scroll_amount,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 top + height - max (0, scroll_amount),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 scroll_amount)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 > xp.bufpos - bp.bufpos - 20)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 /* Return "try normal display with same window-start."
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 Too bad we can't prevent further scroll-thinking. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1250 return -2;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 /* If pure deletion, scroll up as many lines as possible.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 In common case of killing a line, this can save the
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 following line from being overwritten by scrolling
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1254 and therefore having to be redrawn. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1255 tem = scroll_frame_lines (f, bp.vpos + top - scroll_amount,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 top + height - max (0, scroll_amount),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 scroll_amount);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 if (!tem) stop_vpos = height;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 else if (scroll_amount)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1262 /* If reprinting everything is nearly as fast as scrolling,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 don't bother scrolling. Can happen if lines are short. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1264 /* Note that if scroll_amount > 0, xp.bufpos - bp.bufpos is an
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 overestimate of cost of reprinting, since xp.bufpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 would end up below the bottom of the window. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1267 if (scroll_cost (f, ep.vpos + top - scroll_amount,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 top + height - max (0, scroll_amount),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 scroll_amount)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 > xp.bufpos - ep.bufpos - 20)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 /* Return "try normal display with same window-start."
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 Too bad we can't prevent further scroll-thinking. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 return -2;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1274 tem = scroll_frame_lines (f, ep.vpos + top - scroll_amount,
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 top + height - max (0, scroll_amount),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 scroll_amount);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277 if (!tem) stop_vpos = height;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 /* In any case, do not display past bottom of window */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 if (stop_vpos >= height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 stop_vpos = height;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1285 scroll_amount = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 /* Handle case where pos is before w->start --
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 can happen if part of line had been clipped and is not clipped now */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 if (vpos == 0 && pos < marker_position (w->start))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 Fset_marker (w->start, make_number (pos), Qnil);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 /* Redisplay the lines where the text was changed */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1294 last_text_vpos = vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 tab_offset = pos_tab_offset (w, pos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 /* If we are starting display in mid-character, correct tab_offset
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1297 to account for passing the line that that character really starts in. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 if (val.hpos < lmargin)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 tab_offset += width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 while (vpos < stop_vpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 val = *display_text_line (w, pos, top + vpos++, val.hpos, tab_offset);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1303 tab_offset += width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1304 if (val.vpos) tab_offset = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305 if (pos != val.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 last_text_vpos
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 /* Next line, unless prev line ended in end of buffer with no cr */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 = vpos - (val.vpos && FETCH_CHAR (val.bufpos - 1) != '\n');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309 pos = val.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 /* There are two cases:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313 1) we have displayed down to the bottom of the window
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 2) we have scrolled lines below stop_vpos by scroll_amount */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1315
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 if (vpos == height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 /* If last line is continued in middle of character,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1319 include the split character in the text considered on the frame */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 if (val.hpos < lmargin)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 val.bufpos++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 XFASTINT (w->window_end_vpos) = last_text_vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 XFASTINT (w->window_end_pos) = Z - val.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1325
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1326 /* If scrolling made blank lines at window bottom,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327 redisplay to fill those lines */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 if (scroll_amount < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 /* Don't consider these lines for general-purpose scrolling.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 That will save time in the scrolling computation. */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1332 FRAME_SCROLL_BOTTOM_VPOS (f) = xp.vpos;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 vpos = xp.vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 pos = xp.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 val.hpos = lmargin;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 if (pos == ZV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 vpos = height + scroll_amount;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 else if (xp.contin && xp.hpos != lmargin)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 val.hpos = xp.prevhpos - width + lmargin;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 pos--;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1343
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 blank_end_of_window = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 tab_offset = pos_tab_offset (w, pos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346 /* If we are starting display in mid-character, correct tab_offset
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 to account for passing the line that that character starts in. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 if (val.hpos < lmargin)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 tab_offset += width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351 while (vpos < height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 val = *display_text_line (w, pos, top + vpos++, val.hpos, tab_offset);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 tab_offset += width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 if (val.vpos) tab_offset = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 pos = val.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 /* Here is a case where display_text_line sets cursor_vpos wrong.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 Make it be fixed up, below. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 if (xp.bufpos == ZV
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 && xp.bufpos == point)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 cursor_vpos = -1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1366 /* If bottom just moved off end of frame, change mode line percentage. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 if (XFASTINT (w->window_end_pos) == 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 && Z != val.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 w->update_mode_line = Qt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 /* Attempt to adjust end-of-text positions to new bottom line */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 if (scroll_amount)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 delta = height - xp.vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375 if (delta < 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 || (delta > 0 && xp.bufpos <= ZV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 || (delta == 0 && xp.hpos))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379 val = *vmotion (Z - XFASTINT (w->window_end_pos),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 delta, width, hscroll, window);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 XFASTINT (w->window_end_pos) = Z - val.bufpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 XFASTINT (w->window_end_vpos) += val.vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 w->window_end_valid = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 /* If point was not in a line that was displayed, find it */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 if (cursor_vpos < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 val = *compute_motion (start, 0, lmargin, point, 10000, 10000,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 width, hscroll, pos_tab_offset (w, start));
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1393 /* Admit failure if point is off frame now */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 if (val.vpos >= height)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 for (vpos = 0; vpos < height; vpos++)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1397 cancel_line (vpos + top, f);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 return 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 cursor_vpos = val.vpos + top;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401 cursor_hpos = val.hpos + XFASTINT (w->left);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1404 FRAME_CURSOR_X (f) = max (0, cursor_hpos);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1405 FRAME_CURSOR_Y (f) = cursor_vpos;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 if (debug_end_pos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 val = *compute_motion (start, 0, lmargin, ZV,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 height, - (1 << (SHORTBITS - 1)),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411 width, hscroll, pos_tab_offset (w, start));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412 if (val.vpos != XFASTINT (w->window_end_vpos))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 abort ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414 if (XFASTINT (w->window_end_pos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 != Z - val.bufpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 abort ();
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 return 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421
301
2fb0312f83c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 277
diff changeset
1422 /* Copy glyphs from the rope FROM to T.
2fb0312f83c9 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 277
diff changeset
1423 But don't actually copy the parts that would come in before S.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 Value is T, advanced past the copied data.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 Characters in FROM are grouped into units of `sizeof GLYPH' chars;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 any extra chars at the end of FROM are ignored. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 GLYPH *
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430 copy_rope (t, s, from)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 register GLYPH *t; /* Copy to here. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 register GLYPH *s; /* Starting point. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 Lisp_Object from; /* Data to copy; known to be a string. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 register int n = XSTRING (from)->size / sizeof (GLYPH);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 register GLYPH *f = (GLYPH *) XSTRING (from)->data;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 while (n--)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 if (t >= s) *t = *f;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 ++t;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 ++f;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 return t;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 /* Display one line of window w, starting at position START in W's buffer.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 Display starting at horizontal position HPOS, which is normally zero
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 or negative. A negative value causes output up to hpos = 0 to be discarded.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 This is done for negative hscroll, or when this is a continuation line
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 and the continuation occurred in the middle of a multi-column character.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 TABOFFSET is an offset for ostensible hpos, used in tab stop calculations.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1455 Display on position VPOS on the frame. (origin 0).
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457 Returns a STRUCT POSITION giving character to start next line with
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 and where to display it, including a zero or negative hpos.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 The vpos field is not really a vpos; it is 1 unless the line is continued */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 struct position val_display_text_line;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 static struct position *
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 display_text_line (w, start, vpos, hpos, taboffset)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 struct window *w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 int start;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 int vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 int hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 int taboffset;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 register int pos = start;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 register int c;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 register GLYPH *p1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474 int end;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475 register int pause;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 register unsigned char *p;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 GLYPH *endp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 register GLYPH *startp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 register GLYPH *p1prev;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1480 FRAME_PTR f = XFRAME (w->frame);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 int tab_width = XINT (current_buffer->tab_width);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1482 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
1483 int width = window_internal_width (w) - 1;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 struct position val;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 int lastpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 int invis;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 int hscroll = XINT (w->hscroll);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 int truncate = hscroll
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 || (truncate_partial_width_windows
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1490 && XFASTINT (w->width) < FRAME_WIDTH (f))
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1491 || !NILP (current_buffer->truncate_lines);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 int selective
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 = XTYPE (current_buffer->selective_display) == Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 ? XINT (current_buffer->selective_display)
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1495 : !NILP (current_buffer->selective_display) ? -1 : 0;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 #ifndef old
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1497 int selective_e = selective && !NILP (current_buffer->selective_display_ellipses);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498 #endif
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1499 register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500 register struct Lisp_Vector *dp = window_display_table (w);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 int selective_rlen
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 = (selective && dp && XTYPE (DISP_INVIS_ROPE (dp)) == Lisp_String
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 ? XSTRING (DISP_INVIS_ROPE (dp))->size / sizeof (GLYPH) : 0);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 GLYPH truncator = (dp == 0 || XTYPE (DISP_TRUNC_GLYPH (dp)) != Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 ? '$' : XINT (DISP_TRUNC_GLYPH (dp)));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 GLYPH continuer = (dp == 0 || XTYPE (DISP_CONTINUE_GLYPH (dp)) != Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 ? '\\' : XINT (DISP_CONTINUE_GLYPH (dp)));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509 hpos += XFASTINT (w->left);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1510 get_display_line (f, vpos, XFASTINT (w->left));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 if (MINI_WINDOW_P (w) && start == 1
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 && vpos == XFASTINT (w->top))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 if (minibuf_prompt)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 hpos = display_string (w, vpos, minibuf_prompt, hpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 (!truncate ? continuer : truncator),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 -1, -1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1520 minibuf_prompt_width = hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 desired_glyphs->bufp[vpos] = pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 p1 = desired_glyphs->glyphs[vpos] + hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 end = ZV;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 startp = desired_glyphs->glyphs[vpos] + XFASTINT (w->left);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 endp = startp + width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 /* Loop generating characters.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 Stop at end of buffer, before newline,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531 or if reach or pass continuation column. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 pause = pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 while (p1 < endp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 p1prev = p1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 if (pos == pause)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 if (pos == end)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 if (pos == point && cursor_vpos < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 cursor_vpos = vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 cursor_hpos = p1 - startp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 pause = end;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 if (pos < point && point < pause)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 pause = point;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 if (pos < GPT && GPT < pause)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 pause = GPT;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 p = &FETCH_CHAR (pos);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555 c = *p++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556 if (c >= 040 && c < 0177
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 && (dp == 0 || XTYPE (DISP_CHAR_ROPE (dp, c)) != Lisp_String))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 if (p1 >= startp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560 *p1 = c;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 else if (c == '\n')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 invis = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 while (pos < end
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 && selective > 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 && position_indentation (pos + 1) >= selective)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570 invis = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1571 pos = find_next_newline (pos + 1, 1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 if (FETCH_CHAR (pos - 1) == '\n')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 pos--;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 if (invis && selective_rlen > 0 && p1 >= startp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 p1 += selective_rlen;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 if (p1 - startp > width)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 p1 = endp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580 bcopy (XSTRING (DISP_INVIS_ROPE (dp))->data, p1prev,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581 (p1 - p1prev) * sizeof (GLYPH));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 else if (c == '\t')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 do
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 if (p1 >= startp && p1 < endp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 *p1 = SPACEGLYPH;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1593 while ((p1 - startp + taboffset + hscroll - (hscroll > 0))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 % tab_width);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1595 }
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1596 else if (c == Ctl ('M') && selective == -1)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598 pos = find_next_newline (pos, 1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 if (FETCH_CHAR (pos - 1) == '\n')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 pos--;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 if (selective_rlen > 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 p1 += selective_rlen;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 if (p1 - startp > width)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 p1 = endp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 bcopy (XSTRING (DISP_INVIS_ROPE (dp))->data, p1prev,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 (p1 - p1prev) * sizeof (GLYPH));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 else if (dp != 0 && XTYPE (DISP_CHAR_ROPE (dp, c)) == Lisp_String)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 p1 = copy_rope (p1, startp, DISP_CHAR_ROPE (dp, c));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 else if (c < 0200 && ctl_arrow)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617 if (p1 >= startp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618 *p1 = (dp && XTYPE (DISP_CTRL_GLYPH (dp)) == Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1619 ? XINT (DISP_CTRL_GLYPH (dp)) : '^');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1621 if (p1 >= startp && p1 < endp)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 *p1 = c ^ 0100;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1627 if (p1 >= startp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628 *p1 = (dp && XTYPE (DISP_ESCAPE_GLYPH (dp)) == Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1631 if (p1 >= startp && p1 < endp)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 *p1 = (c >> 6) + '0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1634 if (p1 >= startp && p1 < endp)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635 *p1 = (7 & (c >> 3)) + '0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1636 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
1637 if (p1 >= startp && p1 < endp)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 *p1 = (7 & c) + '0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1640 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 pos++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 val.hpos = - XINT (w->hscroll);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 if (val.hpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 val.hpos++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 val.vpos = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1650 lastpos = pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652 /* Handle continuation in middle of a character */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1653 /* by backing up over it */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654 if (p1 > endp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656 /* Start the next line with that same character */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 pos--;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 /* but at a negative hpos, to skip the columns output on this line. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 val.hpos += p1prev - endp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 /* Keep in this line everything up to the continuation column. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661 p1 = endp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 /* Finish deciding which character to start the next line on,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 and what hpos to start it at.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 Also set `lastpos' to the last position which counts as "on this line"
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1667 for cursor-positioning. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669 if (pos < ZV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 if (FETCH_CHAR (pos) == '\n')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1672 /* If stopped due to a newline, start next line after it */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 pos++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 /* Stopped due to right margin of window */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1677 if (truncate)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1679 *p1++ = truncator;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 /* Truncating => start next line after next newline,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 and point is on this line if it is before the newline,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 and skip none of first char of next line */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 pos = find_next_newline (pos, 1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 val.hpos = XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1686 lastpos = pos - (FETCH_CHAR (pos - 1) == '\n');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690 *p1++ = continuer;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691 val.vpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692 lastpos--;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1696
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 /* If point is at eol or in invisible text at eol,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1698 record its frame location now. */
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 if (start <= point && point <= lastpos && cursor_vpos < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 cursor_vpos = vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703 cursor_hpos = p1 - startp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 if (cursor_vpos == vpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1707 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 if (cursor_hpos < 0) cursor_hpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 if (cursor_hpos > width) cursor_hpos = width;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 cursor_hpos += XFASTINT (w->left);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1711 if (w == XWINDOW (FRAME_SELECTED_WINDOW (f)))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1713 FRAME_CURSOR_Y (f) = cursor_vpos;
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1714 FRAME_CURSOR_X (f) = cursor_hpos;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1715
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1716 if (w == XWINDOW (selected_window))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 /* Line is not continued and did not start
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719 in middle of character */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 if ((hpos - XFASTINT (w->left)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 == (XINT (w->hscroll) ? 1 - XINT (w->hscroll) : 0))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 && val.vpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 this_line_bufpos = start;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 this_line_buffer = current_buffer;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 this_line_vpos = cursor_vpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 this_line_start_hpos = hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 this_line_endpos = Z - lastpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1730 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1731 this_line_bufpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1732 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1733 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1734 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736 /* If hscroll and line not empty, insert truncation-at-left marker */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 if (hscroll && lastpos != start)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 *startp = truncator;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 if (p1 <= startp)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 p1 = startp + 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1744 if (XFASTINT (w->width) + XFASTINT (w->left) != FRAME_WIDTH (f))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 endp++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 if (p1 < startp) p1 = startp;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 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
1749
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1750 /* Don't draw vertical bars if we're using scrollbars. They're
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1751 covered up by the scrollbars, and it's distracting to see
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1752 them when the scrollbar windows are flickering around to be
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1753 reconfigured. */
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1754 *p1++ = (FRAME_HAS_VERTICAL_SCROLLBARS (f)
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1755 ? ' ' : '|');
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 desired_glyphs->used[vpos] = max (desired_glyphs->used[vpos],
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 p1 - desired_glyphs->glyphs[vpos]);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 desired_glyphs->glyphs[vpos][desired_glyphs->used[vpos]] = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 /* If the start of this line is the overlay arrow-position,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 then put the arrow string into the display-line. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 if (XTYPE (Voverlay_arrow_position) == Lisp_Marker
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765 && current_buffer == XMARKER (Voverlay_arrow_position)->buffer
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 && start == marker_position (Voverlay_arrow_position)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 && XTYPE (Voverlay_arrow_string) == Lisp_String
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 && ! overlay_arrow_seen)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 unsigned char *p = XSTRING (Voverlay_arrow_string)->data;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 int i;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 int len = XSTRING (Voverlay_arrow_string)->size;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1774 if (len > width)
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
1775 len = width;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 for (i = 0; i < len; i++)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 startp[i] = p[i];
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 if (desired_glyphs->used[vpos] <
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 (len + startp - desired_glyphs->glyphs[vpos]))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 desired_glyphs->used[vpos] = len + startp - desired_glyphs->glyphs[vpos];
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 overlay_arrow_seen = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 val.bufpos = pos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 val_display_text_line = val;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 return &val_display_text_line;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 /* Display the mode line for window w */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 static void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 display_mode_line (w)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 struct window *w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796 register int vpos = XFASTINT (w->height) + XFASTINT (w->top) - 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 register int left = XFASTINT (w->left);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798 register int right = XFASTINT (w->width) + left;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1799 register FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1801 get_display_line (f, vpos, left);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 display_mode_element (w, vpos, left, 0, right, right,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 current_buffer->mode_line_format);
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1804 FRAME_DESIRED_GLYPHS (f)->bufp[vpos] = 0;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 /* Make the mode line inverse video if the entire line
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 is made of mode lines.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 I.e. if this window is full width,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 or if it is the child of a full width window
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 (which implies that that window is split side-by-side
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 and the rest of this line is mode lines of the sibling windows). */
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1812 if (XFASTINT (w->width) == FRAME_WIDTH (f)
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1813 || XFASTINT (XWINDOW (w->parent)->width) == FRAME_WIDTH (f))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1814 FRAME_DESIRED_GLYPHS (f)->highlight[vpos] = mode_line_inverse_video;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 #ifdef HAVE_X_WINDOWS
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 /* I'm trying this out because I saw Unimpress use it, but it's
1124
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1818 possible that this may mess adversely with some window managers. -jla
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819
1124
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1820 Wouldn't it be nice to use something like mode-line-format to
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1821 describe frame titles? -JimB */
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1822
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1823 /* Change the title of the frame to the name of the buffer displayed
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1824 in the currently selected window. Don't do this for minibuffer frames,
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1825 and don't do it when there's only one non-minibuffer frame. */
973
52267046b144 * xdisp.c (FRAME_IS_TERMCAP, FRAME_IS_X, FRAME_HAS_MINIBUF):
Jim Blandy <jimb@redhat.com>
parents: 831
diff changeset
1826 if (FRAME_X_P (f)
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1827 && ! FRAME_MINIBUF_ONLY_P (f)
831
dcfb4a00adb3 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 827
diff changeset
1828 && w == XWINDOW (f->selected_window))
1124
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1829 x_implicitly_set_name (f, (EQ (Fnext_frame (WINDOW_FRAME (w), Qnil),
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1830 WINDOW_FRAME (w))
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1831 ? Qnil
453c24f2bdaa * xdisp.c (display_mode_line): If the only other frames are
Jim Blandy <jimb@redhat.com>
parents: 1017
diff changeset
1832 : XBUFFER (w->buffer)->name),
1017
d42877206c0a * xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents: 973
diff changeset
1833 Qnil);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 #endif
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 /* Contribute ELT to the mode line for window W.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 How it translates into text depends on its data type.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840 VPOS is the position of the mode line being displayed.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1842 HPOS is the position (absolute on frame) where this element's text
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 should start. The output is truncated automatically at the right
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 edge of window W.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 DEPTH is the depth in recursion. It is used to prevent
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 infinite recursion here.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 MINENDCOL is the hpos before which the element may not end.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 The element is padded at the right with spaces if nec
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 to reach this column.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 MAXENDCOL is the hpos past which this element may not extend.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 If MINENDCOL is > MAXENDCOL, MINENDCOL takes priority.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 (This is necessary to make nested padding and truncation work.)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 Returns the hpos of the end of the text generated by ELT.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 The next element will receive that value as its HPOS arg,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 so as to concatenate the elements. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1861 static int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 display_mode_element (w, vpos, hpos, depth, minendcol, maxendcol, elt)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 struct window *w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 register int vpos, hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 int depth;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 int minendcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 register int maxendcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 register Lisp_Object elt;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 tail_recurse:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 if (depth > 10)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872 goto invalid;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 depth++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1876 #ifdef SWITCH_ENUM_BUG
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1877 switch ((int) XTYPE (elt))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1878 #else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1879 switch (XTYPE (elt))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1880 #endif
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1881 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1882 case Lisp_String:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884 /* A string: output it and check for %-constructs within it. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1885 register unsigned char c;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 register unsigned char *this = XSTRING (elt)->data;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1888 while (hpos < maxendcol && *this)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1890 unsigned char *last = this;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1891 while ((c = *this++) != '\0' && c != '%')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1892 ;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1893 if (this - 1 != last)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 register int lim = --this - last + hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 hpos = display_string (w, vpos, last, hpos, 0, hpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 min (lim, maxendcol));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 else /* c == '%' */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 register int spec_width = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 /* We can't allow -ve args due to the "%-" construct */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 /* Argument specifies minwidth but not maxwidth
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 (maxwidth can be specified by
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906 (<negative-number> . <stuff>) mode-line elements) */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908 while ((c = *this++) >= '0' && c <= '9')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1909 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1910 spec_width = spec_width * 10 + (c - '0');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1911 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1912
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1913 spec_width += hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1914 if (spec_width > maxendcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1915 spec_width = maxendcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1916
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1917 if (c == 'M')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1918 hpos = display_mode_element (w, vpos, hpos, depth,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1919 spec_width, maxendcol,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1920 Vglobal_mode_string);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 else if (c != 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922 hpos = display_string (w, vpos,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1923 decode_mode_spec (w, c,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1924 maxendcol - hpos),
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1925 hpos, 0, spec_width, maxendcol);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1926 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1927 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1928 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1929 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1930
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1931 case Lisp_Symbol:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1932 /* A symbol: process the value of the symbol recursively
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1933 as if it appeared here directly. Avoid error if symbol void.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1934 Special case: if value of symbol is a string, output the string
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 literally. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 register Lisp_Object tem;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1938 tem = Fboundp (elt);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1939 if (!NILP (tem))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1941 tem = Fsymbol_value (elt);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1942 /* If value is a string, output that string literally:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1943 don't check for % within it. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 if (XTYPE (tem) == Lisp_String)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945 hpos = display_string (w, vpos, XSTRING (tem)->data,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1946 hpos, 0, minendcol, maxendcol);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1947 /* Give up right away for nil or t. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1948 else if (!EQ (tem, elt))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1949 { elt = tem; goto tail_recurse; }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1950 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1952 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1953
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954 case Lisp_Cons:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956 register Lisp_Object car, tem;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 /* A cons cell: three distinct cases.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 If first element is a string or a cons, process all the elements
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 and effectively concatenate them.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961 If first element is a negative number, truncate displaying cdr to
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 at most that many characters. If positive, pad (with spaces)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 to at least that many characters.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 If first element is a symbol, process the cadr or caddr recursively
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 according to whether the symbol's value is non-nil or nil. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 car = XCONS (elt)->car;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967 if (XTYPE (car) == Lisp_Symbol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969 tem = Fboundp (car);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 elt = XCONS (elt)->cdr;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1971 if (XTYPE (elt) != Lisp_Cons)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972 goto invalid;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 /* elt is now the cdr, and we know it is a cons cell.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 Use its car if CAR has a non-nil value. */
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1975 if (!NILP (tem))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 tem = Fsymbol_value (car);
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1978 if (!NILP (tem))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 { elt = XCONS (elt)->car; goto tail_recurse; }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1981 /* Symbol's value is nil (or symbol is unbound)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1982 Get the cddr of the original list
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1983 and if possible find the caddr and use that. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984 elt = XCONS (elt)->cdr;
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
1985 if (NILP (elt))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1986 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 else if (XTYPE (elt) != Lisp_Cons)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 goto invalid;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 elt = XCONS (elt)->car;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990 goto tail_recurse;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1991 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 else if (XTYPE (car) == Lisp_Int)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1994 register int lim = XINT (car);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1995 elt = XCONS (elt)->cdr;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996 if (lim < 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997 /* Negative int means reduce maximum width.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 DO NOT change MINENDCOL here!
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 (20 -10 . foo) should truncate foo to 10 col
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 and then pad to 20. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 maxendcol = min (maxendcol, hpos - lim);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 else if (lim > 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004 /* Padding specified. Don't let it be more than
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 current maximum. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 lim += hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 if (lim > maxendcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 lim = maxendcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009 /* If that's more padding than already wanted, queue it.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 But don't reduce padding already specified even if
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 that is beyond the current truncation point. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 if (lim > minendcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 minendcol = lim;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015 goto tail_recurse;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2016 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 else if (XTYPE (car) == Lisp_String || XTYPE (car) == Lisp_Cons)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019 register int limit = 50;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2020 /* LIMIT is to protect against circular lists. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021 while (XTYPE (elt) == Lisp_Cons && --limit > 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2022 && hpos < maxendcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 hpos = display_mode_element (w, vpos, hpos, depth,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 hpos, maxendcol,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 XCONS (elt)->car);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 elt = XCONS (elt)->cdr;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033 default:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 invalid:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 return (display_string (w, vpos, "*invalid*", hpos, 0,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036 minendcol, maxendcol));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 end:
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 if (minendcol > hpos)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041 hpos = display_string (w, vpos, "", hpos, 0, minendcol, -1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 return hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2044
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045 /* Return a string for the output of a mode line %-spec for window W,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 generated by character C and width MAXWIDTH. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047
1017
d42877206c0a * xdisp.c (display_mode_line): Use x_implicitly_set_name here.
Jim Blandy <jimb@redhat.com>
parents: 973
diff changeset
2048 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
2049
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 static char *
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 decode_mode_spec (w, c, maxwidth)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2052 struct window *w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053 register char c;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054 register int maxwidth;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2056 Lisp_Object obj = Qnil;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2057 FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2058 char *decode_mode_spec_buf = (char *) FRAME_TEMP_GLYPHS (f)->total_contents;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2060 if (maxwidth > FRAME_WIDTH (f))
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2061 maxwidth = FRAME_WIDTH (f);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063 switch (c)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2065 case 'b':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 obj = current_buffer->name;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067 #if 0
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068 if (maxwidth >= 3 && XSTRING (obj)->size > maxwidth)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070 bcopy (XSTRING (obj)->data, decode_mode_spec_buf, maxwidth - 1);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071 decode_mode_spec_buf[maxwidth - 1] = '\\';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 decode_mode_spec_buf[maxwidth] = '\0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073 return decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 #endif
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078 case 'f':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 obj = current_buffer->filename;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080 #if 0
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
2081 if (NILP (obj))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 return "[none]";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 else if (XTYPE (obj) == Lisp_String && XSTRING (obj)->size > maxwidth)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 bcopy ("...", decode_mode_spec_buf, 3);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2086 bcopy (XSTRING (obj)->data + XSTRING (obj)->size - maxwidth + 3,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087 decode_mode_spec_buf + 3, maxwidth - 3);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2088 return decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2089 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 #endif
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093 case 'm':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094 obj = current_buffer->mode_name;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2095 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2096
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097 case 'n':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098 if (BEGV > BEG || ZV < Z)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2099 return " Narrow";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102 case '*':
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
2103 if (!NILP (current_buffer->read_only))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 return "%";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2105 if (MODIFF > current_buffer->save_modified)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2106 return "*";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 return "-";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 case 's':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2110 /* status of process */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 obj = Fget_buffer_process (Fcurrent_buffer ());
485
8c615e453683 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 433
diff changeset
2112 if (NILP (obj))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2113 return "no process";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2114 obj = Fsymbol_name (Fprocess_status (obj));
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2115 break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2116
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2117 case 'p':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2118 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2119 int pos = marker_position (w->start);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2120 int total = ZV - BEGV;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2121
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2122 if (XFASTINT (w->window_end_pos) <= Z - ZV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2123 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2124 if (pos <= BEGV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2125 return "All";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2127 return "Bottom";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2128 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2129 else if (pos <= BEGV)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2130 return "Top";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2131 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2133 total = ((pos - BEGV) * 100 + total - 1) / total;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2134 /* We can't normally display a 3-digit number,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 so get us a 2-digit number that is close. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 if (total == 100)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 total = 99;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138 sprintf (decode_mode_spec_buf, "%2d%%", total);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2139 return decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2140 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2141 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2142
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2143 case '%':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2144 return "%";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2145
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2146 case '[':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2147 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2148 int i;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2149 char *p;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2150
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2151 if (command_loop_level > 5)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2152 return "[[[... ";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2153 p = decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2154 for (i = 0; i < command_loop_level; i++)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2155 *p++ = '[';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2156 *p = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2157 return decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2158 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2159
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2160 case ']':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2161 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2162 int i;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163 char *p;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2165 if (command_loop_level > 5)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2166 return " ...]]]";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2167 p = decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2168 for (i = 0; i < command_loop_level; i++)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2169 *p++ = ']';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2170 *p = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2171 return decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2172 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2173
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2174 case '-':
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2176 register char *p;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2177 register int i;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2179 if (maxwidth < sizeof (lots_of_dashes))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2180 return lots_of_dashes;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2181 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2182 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2183 for (p = decode_mode_spec_buf, i = maxwidth; i > 0; i--)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2184 *p++ = '-';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 *p = '\0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2187 return decode_mode_spec_buf;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2188 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2189 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2190
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2191 if (XTYPE (obj) == Lisp_String)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2192 return (char *) XSTRING (obj)->data;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 return "";
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2195 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2197 /* Display STRING on one line of window W, starting at HPOS.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 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
2199 If VPOS == -1, display it as the current frame's title.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2200
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201 TRUNCATE is GLYPH to display at end if truncated. Zero for none.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203 MINCOL is the first column ok to end at. (Pad with spaces to this col.)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2204 MAXCOL is the last column ok to end at. Truncate here.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 -1 for MINCOL or MAXCOL means no explicit minimum or maximum.
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2206 Both count from the left edge of the frame, as does HPOS.
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2207 The right edge of W is an implicit maximum.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2208 If TRUNCATE is nonzero, the implicit maximum is one column before the edge.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2210 Returns ending hpos */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2211
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212 static int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2213 display_string (w, vpos, string, hpos, truncate, mincol, maxcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 struct window *w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2215 unsigned char *string;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216 int vpos, hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2217 GLYPH truncate;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218 int mincol, maxcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 register int c;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221 register GLYPH *p1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2222 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
2223 int tab_width = XINT (XBUFFER (w->buffer)->tab_width);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2224 register GLYPH *start;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2225 register GLYPH *end;
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2226 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
2227 struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (f);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2228 GLYPH *p1start = desired_glyphs->glyphs[vpos] + hpos;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2229 int window_width = XFASTINT (w->width);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2230
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2231 /* Use the standard display table, not the window's display table.
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2232 We don't want the mode line in rot13. */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2233 register struct Lisp_Vector *dp = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2234
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2235 if (XTYPE (Vstandard_display_table) == Lisp_Vector
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2236 && XVECTOR (Vstandard_display_table)->size == DISP_TABLE_SIZE)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2237 dp = XVECTOR (Vstandard_display_table);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2238
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2239 if (tab_width <= 0 || tab_width > 20) tab_width = 8;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2240
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 p1 = p1start;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 start = desired_glyphs->glyphs[vpos] + XFASTINT (w->left);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 end = start + window_width - (truncate != 0);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2244
1785
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2245 if ((window_width + XFASTINT (w->left)) != FRAME_WIDTH (f))
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2246 {
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2247 if (FRAME_HAS_VERTICAL_SCROLLBARS (f))
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2248 {
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2249 int i;
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2250
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2251 for (i = 0; i < VERTICAL_SCROLLBAR_WIDTH; i++)
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2252 *end-- = ' ';
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2253 }
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2254 else
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2255 *end-- = '|';
19755499df90 * window.c (window_internal_width): New function, which accounts
Jim Blandy <jimb@redhat.com>
parents: 1718
diff changeset
2256 }
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 if (maxcol >= 0 && end - desired_glyphs->glyphs[vpos] > maxcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 end = desired_glyphs->glyphs[vpos] + maxcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 if (maxcol >= 0 && mincol > maxcol)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 mincol = maxcol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 while (p1 < end)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2265 c = *string++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266 if (!c) break;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2267 if (c >= 040 && c < 0177
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2268 && (dp == 0 || XTYPE (DISP_CHAR_ROPE (dp, c)) != Lisp_String))
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2269 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2270 if (p1 >= start)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2271 *p1 = c;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 else if (c == '\t')
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 do
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2278 if (p1 >= start && p1 < end)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 *p1 = SPACEGLYPH;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2280 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 while ((p1 - start + hscroll - (hscroll > 0)) % tab_width);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2283 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 else if (dp != 0 && XTYPE (DISP_CHAR_ROPE (dp, c)) == Lisp_String)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 p1 = copy_rope (p1, start, DISP_CHAR_ROPE (dp, c));
1527
00109911b040 * xdisp.c (redisplay): Use ! EQ to compare the old and new arrow
Jim Blandy <jimb@redhat.com>
parents: 1446
diff changeset
2286 else if (c < 0200 && ! NILP (buffer_defaults.ctl_arrow))
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 if (p1 >= start)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289 *p1 = (dp && XTYPE (DISP_CTRL_GLYPH (dp)) == Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290 ? XINT (DISP_CTRL_GLYPH (dp)) : '^');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2291 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
2292 if (p1 >= start && p1 < end)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2293 *p1 = c ^ 0100;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2294 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2295 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2296 else
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2297 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2298 if (p1 >= start)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2299 *p1 = (dp && XTYPE (DISP_ESCAPE_GLYPH (dp)) == Lisp_Int
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2300 ? XINT (DISP_ESCAPE_GLYPH (dp)) : '\\');
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2301 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
2302 if (p1 >= start && p1 < end)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2303 *p1 = (c >> 6) + '0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2304 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
2305 if (p1 >= start && p1 < end)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2306 *p1 = (7 & (c >> 3)) + '0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2307 p1++;
368
d04df545062f *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 331
diff changeset
2308 if (p1 >= start && p1 < end)
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2309 *p1 = (7 & c) + '0';
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2310 p1++;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2311 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2312 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2313
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2314 if (c)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2315 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2316 p1 = end;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2317 if (truncate) *p1++ = truncate;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2318 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2319 else if (mincol >= 0)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2320 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2321 end = desired_glyphs->glyphs[vpos] + mincol;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2322 while (p1 < end)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2323 *p1++ = SPACEGLYPH;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2324 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2325
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2326 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2327 register int len = p1 - desired_glyphs->glyphs[vpos];
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2328
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2329 if (len > desired_glyphs->used[vpos])
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2330 desired_glyphs->used[vpos] = len;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2331 desired_glyphs->glyphs[vpos][desired_glyphs->used[vpos]] = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2332
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2333 return len;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2334 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2335 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2336
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 void
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338 syms_of_xdisp ()
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2339 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2340 staticpro (&last_arrow_position);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2341 staticpro (&last_arrow_string);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2342 last_arrow_position = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2343 last_arrow_string = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2344
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2345 DEFVAR_LISP ("global-mode-string", &Vglobal_mode_string,
782
a6d00bdb2b60 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 781
diff changeset
2346 "String (or mode line construct) included (normally) in `mode-line-format'.");
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2347 Vglobal_mode_string = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2348
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2349 DEFVAR_LISP ("overlay-arrow-position", &Voverlay_arrow_position,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2350 "Marker for where to display an arrow on top of the buffer text.\n\
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2351 This must be the beginning of a line in order to work.\n\
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2352 See also `overlay-arrow-string'.");
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2353 Voverlay_arrow_position = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2354
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2355 DEFVAR_LISP ("overlay-arrow-string", &Voverlay_arrow_string,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356 "String to display as an arrow. See also `overlay-arrow-position'.");
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357 Voverlay_arrow_string = Qnil;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2358
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359 DEFVAR_INT ("scroll-step", &scroll_step,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2360 "*The number of lines to try scrolling a window by when point moves out.\n\
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2361 If that fails to bring point back on frame, point is centered instead.\n\
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2362 If this is zero, point is always centered after it moves off frame.");
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2363
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364 DEFVAR_INT ("debug-end-pos", &debug_end_pos, "Don't ask");
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2365
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2366 DEFVAR_BOOL ("truncate-partial-width-windows",
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2367 &truncate_partial_width_windows,
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2368 "*Non-nil means truncate lines in all windows less than full frame wide.");
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2369 truncate_partial_width_windows = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371 DEFVAR_BOOL ("mode-line-inverse-video", &mode_line_inverse_video,
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 "*Non-nil means use inverse video for the mode line.");
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373 mode_line_inverse_video = 1;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2375
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2376 /* initialize the window system */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 init_xdisp ()
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2378 {
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2379 Lisp_Object root_window;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2380 #ifndef COMPILER_REGISTER_BUG
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2381 register
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2382 #endif /* COMPILER_REGISTER_BUG */
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2383 struct window *mini_w;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2384
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2385 this_line_bufpos = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2386
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2387 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
2388 root_window = FRAME_ROOT_WINDOW (XFRAME (WINDOW_FRAME (mini_w)));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2389
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2390 echo_area_glyphs = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2391 previous_echo_glyphs = 0;
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2392
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2393 if (!noninteractive)
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2394 {
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2395 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (root_window)));
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2396 XFASTINT (XWINDOW (root_window)->top) = 0;
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2397 set_window_height (root_window, FRAME_HEIGHT (f) - 1, 0);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2398 XFASTINT (mini_w->top) = FRAME_HEIGHT (f) - 1;
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2399 set_window_height (minibuf_window, 1, 0);
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2400
769
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2401 XFASTINT (XWINDOW (root_window)->width) = FRAME_WIDTH (f);
1f320a0729f8 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2402 XFASTINT (mini_w->width) = FRAME_WIDTH (f);
277
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2403 }
3140f2aa89ae Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2404 }