annotate src/dispnew.c @ 18989:6253a99afd95

(rmail-pop-password-error): New variable. (rmail-insert-inbox-text): If there's an error getting mail from the POP server, and the error matches rmail-pop-password-error or we prompted for the POP password, assume that the password is incorrect and erase it so that the user will be prompted again the next time he gets mail.
author Richard M. Stallman <rms@gnu.org>
date Fri, 25 Jul 1997 22:08:24 +0000
parents 4501a367a887
children 35cddfda2ba8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Updating of data structures for redisplay.
18853
4501a367a887 (direct_output_forward_char): Reenable check against
Richard M. Stallman <rms@gnu.org>
parents: 18774
diff changeset
2 Copyright (C) 1985, 86, 87, 88, 93, 94, 95, 1997
4501a367a887 (direct_output_forward_char): Reenable check against
Richard M. Stallman <rms@gnu.org>
parents: 18774
diff changeset
3 Free Software Foundation, Inc.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
1777
4edfaa19c7a7 * window.c (window_internal_width): New function.
Jim Blandy <jimb@redhat.com>
parents: 1766
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
14186
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14125
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
ee40177f6c68 Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents: 14125
diff changeset
20 Boston, MA 02111-1307, USA. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include <signal.h>
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4551
diff changeset
25 #include <config.h>
7900
60795e826dad Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7814
diff changeset
26
60795e826dad Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents: 7814
diff changeset
27 #include <stdio.h>
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include <ctype.h>
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29
3525
58e789baa27a Include lisp.h earlier (before termhooks.h).
Richard M. Stallman <rms@gnu.org>
parents: 3517
diff changeset
30 #include "lisp.h"
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #include "termchar.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "termopts.h"
2198
8d7841ea526f Include termhooks.h.
Richard M. Stallman <rms@gnu.org>
parents: 2132
diff changeset
33 #include "termhooks.h"
13526
34382f4e23cb Always include dispextern.h before cm.h.
Richard M. Stallman <rms@gnu.org>
parents: 13448
diff changeset
34 /* cm.h must come after dispextern.h on Windows. */
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
35 #include "dispextern.h"
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
36 #include "cm.h"
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include "buffer.h"
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
38 #include "charset.h"
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
39 #include "frame.h"
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
40 #include "window.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 #include "commands.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #include "disptab.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #include "indent.h"
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
44 #include "intervals.h"
15065
270020829d09 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 14964
diff changeset
45 #include "blockinput.h"
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
47 /* I don't know why DEC Alpha OSF1 fail to compile this file if we
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
48 include the following file. */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
49 /* #include "systty.h" */
12917
8da09b463ee4 Include syssignal.h.
Richard M. Stallman <rms@gnu.org>
parents: 12667
diff changeset
50 #include "syssignal.h"
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
51
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 #ifdef HAVE_X_WINDOWS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #include "xterm.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
56 #ifdef HAVE_NTGUI
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
57 #include "w32term.h"
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
58 #endif /* HAVE_NTGUI */
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
59
7808
52e2eb6245d4 Include systime.h after xterm.h.
Richard M. Stallman <rms@gnu.org>
parents: 7648
diff changeset
60 /* Include systime.h after xterm.h to avoid double inclusion of time.h. */
52e2eb6245d4 Include systime.h after xterm.h.
Richard M. Stallman <rms@gnu.org>
parents: 7648
diff changeset
61 #include "systime.h"
52e2eb6245d4 Include systime.h after xterm.h.
Richard M. Stallman <rms@gnu.org>
parents: 7648
diff changeset
62
7558
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
63 #include <errno.h>
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
64
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 #define max(a, b) ((a) > (b) ? (a) : (b))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 #define min(a, b) ((a) < (b) ? (a) : (b))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 /* Get number of chars of output now in the buffer of a stdio stream.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69 This ought to be built in in stdio, but it isn't.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
70 Some s- files override this because their stdio internals differ. */
5214
c4bf07b226be (PENDING_OUTPUT_COUNT) [__GNU_LIBRARY__]: Alternate definition for the GNU
Roland McGrath <roland@gnu.org>
parents: 5083
diff changeset
71 #ifdef __GNU_LIBRARY__
7444
e5a2552872bf Comment fix.
Roland McGrath <roland@gnu.org>
parents: 7443
diff changeset
72 /* The s- file might have overridden the definition with one that works for
e5a2552872bf Comment fix.
Roland McGrath <roland@gnu.org>
parents: 7443
diff changeset
73 the system's C library. But we are using the GNU C library, so this is
e5a2552872bf Comment fix.
Roland McGrath <roland@gnu.org>
parents: 7443
diff changeset
74 the right definition for every system. */
7558
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
75 #ifdef GNU_LIBRARY_PENDING_OUTPUT_COUNT
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
76 #define PENDING_OUTPUT_COUNT GNU_LIBRARY_PENDING_OUTPUT_COUNT
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
77 #else
7443
a9cb818e5316 [__GNU_LIBRARY__]: Redefine PENDING_OUTPUT_COUNT even if already defined.
Roland McGrath <roland@gnu.org>
parents: 7247
diff changeset
78 #undef PENDING_OUTPUT_COUNT
5214
c4bf07b226be (PENDING_OUTPUT_COUNT) [__GNU_LIBRARY__]: Alternate definition for the GNU
Roland McGrath <roland@gnu.org>
parents: 5083
diff changeset
79 #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->__bufp - (FILE)->__buffer)
7558
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
80 #endif
8497bcb9fb8e (PENDING_OUTPUT_COUNT): If __GNU_LIBRARY__,
Richard M. Stallman <rms@gnu.org>
parents: 7530
diff changeset
81 #else /* not __GNU_LIBRARY__ */
7443
a9cb818e5316 [__GNU_LIBRARY__]: Redefine PENDING_OUTPUT_COUNT even if already defined.
Roland McGrath <roland@gnu.org>
parents: 7247
diff changeset
82 #ifndef PENDING_OUTPUT_COUNT
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_ptr - (FILE)->_base)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 #endif
5214
c4bf07b226be (PENDING_OUTPUT_COUNT) [__GNU_LIBRARY__]: Alternate definition for the GNU
Roland McGrath <roland@gnu.org>
parents: 5083
diff changeset
85 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
87 static void change_frame_size_1 ();
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
88
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
89 /* Nonzero upon entry to redisplay means do not assume anything about
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
90 current contents of actual terminal frame; clear and redraw it. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
92 int frame_garbaged;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 /* Nonzero means last display completed. Zero means it was preempted. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 int display_completed;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 /* Lisp variable visible-bell; enables use of screen-flash
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 instead of audible bell. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 int visible_bell;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
103 /* Invert the color of the whole frame, at a low level. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 int inverse_video;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 /* Line speed of the terminal. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 int baud_rate;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 /* nil or a symbol naming the window system under which emacs is
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 running ('x is the only current possibility). */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 Lisp_Object Vwindow_system;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 /* Version number of X windows: 10, 11 or nil. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 Lisp_Object Vwindow_system_version;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
118
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 /* Vector of glyph definitions. Indexed by glyph number,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
120 the contents are a string which is how to output the glyph.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 If Vglyph_table is nil, a glyph is output by using its low 8 bits
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 as a character code. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 Lisp_Object Vglyph_table;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 /* Display table to use for vectors that don't specify their own. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 Lisp_Object Vstandard_display_table;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 /* Nonzero means reading single-character input with prompt
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
132 so put cursor on minibuffer after the prompt.
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
133 positive means at end of text in echo area;
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
134 negative means at beginning of line. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 int cursor_in_echo_area;
13220
2e9014617492 (Qdisplay_table): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13105
diff changeset
136
2e9014617492 (Qdisplay_table): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13105
diff changeset
137 Lisp_Object Qdisplay_table;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
139 /* The currently selected frame.
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9303
diff changeset
140 In a single-frame version, this variable always holds the address of
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9303
diff changeset
141 the_only_frame. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
143 FRAME_PTR selected_frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
145 /* A frame which is not just a minibuffer, or 0 if there are no such
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
146 frames. This is usually the most recent such frame that was
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9303
diff changeset
147 selected. In a single-frame version, this variable always holds
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9303
diff changeset
148 the address of the_only_frame. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
149 FRAME_PTR last_nonminibuf_frame;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
150
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 /* This is a vector, made larger whenever it isn't large enough,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
152 which is used inside `update_frame' to hold the old contents
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
153 of the FRAME_PHYS_LINES of the frame being updated. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
154 struct frame_glyphs **ophys_lines;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 /* Length of vector currently allocated. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 int ophys_lines_length;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 FILE *termscript; /* Stdio stream being used for copy of all output. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 struct cm Wcm; /* Structure for info on cursor positioning */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 int delayed_size_change; /* 1 means SIGWINCH happened when not safe. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
164 DEFUN ("redraw-frame", Fredraw_frame, Sredraw_frame, 1, 1, 0,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
165 "Clear frame FRAME and output again what is supposed to appear on it.")
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
166 (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
167 Lisp_Object frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
169 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
171 CHECK_LIVE_FRAME (frame, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
172 f = XFRAME (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
173 update_begin (f);
15394
8d01f71c4797 (Fredraw_frame, remake_frame_glyphs)
Richard M. Stallman <rms@gnu.org>
parents: 15282
diff changeset
174 if (FRAME_MSDOS_P (f))
8d01f71c4797 (Fredraw_frame, remake_frame_glyphs)
Richard M. Stallman <rms@gnu.org>
parents: 15282
diff changeset
175 set_terminal_modes ();
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
176 clear_frame ();
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
177 clear_frame_records (f);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
178 update_end (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 windows_or_buffers_changed++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 /* Mark all windows as INaccurate,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 so that every window will have its redisplay done. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
183 mark_window_display_accurate (FRAME_ROOT_WINDOW (f), 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
184 f->garbaged = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
188 redraw_frame (f)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
189 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
191 Lisp_Object frame;
9264
9338a124ea84 (redraw_frame, Fsleep_for, sit_for, Fsit_for): Use new accessor macros instead
Karl Heuer <kwzh@gnu.org>
parents: 8903
diff changeset
192 XSETFRAME (frame, f);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
193 Fredraw_frame (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
196 DEFUN ("redraw-display", Fredraw_display, Sredraw_display, 0, 0, "",
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
197 "Clear and redisplay all visible frames.")
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
198 ()
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
199 {
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
200 Lisp_Object tail, frame;
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
201
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
202 FOR_EACH_FRAME (tail, frame)
3517
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
203 if (FRAME_VISIBLE_P (XFRAME (frame)))
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
204 Fredraw_frame (frame);
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
205
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
206 return Qnil;
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
207 }
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
208
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
209 /* This is used when frame_garbaged is set.
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
210 Redraw the individual frames marked as garbaged. */
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
211
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
212 void
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
213 redraw_garbaged_frames ()
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
214 {
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
215 Lisp_Object tail, frame;
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
216
657a74662346 (Fredraw_display): Redraw all visible frames.
Richard M. Stallman <rms@gnu.org>
parents: 3449
diff changeset
217 FOR_EACH_FRAME (tail, frame)
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
218 if (FRAME_VISIBLE_P (XFRAME (frame))
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
219 && FRAME_GARBAGED_P (XFRAME (frame)))
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
220 Fredraw_frame (frame);
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
221 }
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
222
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
224 static struct frame_glyphs *
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
225 make_frame_glyphs (frame, empty)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
226 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 int empty;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 register int i;
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
230 register width = FRAME_WINDOW_WIDTH (frame);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
231 register height = FRAME_HEIGHT (frame);
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
232 register struct frame_glyphs *new
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
233 = (struct frame_glyphs *) xmalloc (sizeof (struct frame_glyphs));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
235 SET_GLYPHS_FRAME (new, frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 new->height = height;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 new->width = width;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 new->used = (int *) xmalloc (height * sizeof (int));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 new->glyphs = (GLYPH **) xmalloc (height * sizeof (GLYPH *));
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
240 new->charstarts = (int **) xmalloc (height * sizeof (int *));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 new->highlight = (char *) xmalloc (height * sizeof (char));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 new->enable = (char *) xmalloc (height * sizeof (char));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243 bzero (new->enable, height * sizeof (char));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 new->bufp = (int *) xmalloc (height * sizeof (int));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
246 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
247 if (FRAME_WINDOW_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249 new->top_left_x = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 new->top_left_y = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 new->pix_width = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 new->pix_height = (short *) xmalloc (height * sizeof (short));
1407
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
253 new->max_ascent = (short *) xmalloc (height * sizeof (short));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
255 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 if (empty)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 /* Make the buffer used by decode_mode_spec. This buffer is also
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
260 used as temporary storage when updating the frame. See scroll.c. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 unsigned int total_glyphs = (width + 2) * sizeof (GLYPH);
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
262 unsigned int total_charstarts = (width + 2) * sizeof (int);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 new->total_contents = (GLYPH *) xmalloc (total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265 bzero (new->total_contents, total_glyphs);
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
266
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
267 new->total_charstarts = (int *) xmalloc (total_charstarts);
14903
13c3adcb1c13 (make_frame_glyphs): Zero the correct number of bytes.
Richard M. Stallman <rms@gnu.org>
parents: 14757
diff changeset
268 bzero (new->total_charstarts, total_charstarts);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
269 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 unsigned int total_glyphs = height * (width + 2) * sizeof (GLYPH);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 new->total_contents = (GLYPH *) xmalloc (total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 bzero (new->total_contents, total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 for (i = 0; i < height; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 new->glyphs[i] = new->total_contents + i * (width + 2) + 1;
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
278
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
279 if (!FRAME_TERMCAP_P (frame))
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
280 {
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
281 unsigned int total_charstarts = height * (width + 2) * sizeof (int);
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
282
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
283 new->total_charstarts = (int *) xmalloc (total_charstarts);
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
284 bzero (new->total_charstarts, total_charstarts);
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
285 for (i = 0; i < height; i++)
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
286 new->charstarts[i] = new->total_charstarts + i * (width + 2) + 1;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
287 }
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
288 else
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
289 {
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
290 /* Without a window system, we don't really need charstarts.
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
291 So use a small amount of space to make enough data structure
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
292 to prevent crashes in display_text_line. */
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
293 new->total_charstarts = (int *) xmalloc ((width + 2) * sizeof (int));
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
294 for (i = 0; i < height; i++)
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
295 new->charstarts[i] = new->total_charstarts;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
296 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
297 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
299 return new;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
300 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
301
8665
f06ea671bacb (free_frame_glyphs): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 8395
diff changeset
302 void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
303 free_frame_glyphs (frame, glyphs)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
304 FRAME_PTR frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
305 struct frame_glyphs *glyphs;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
306 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
307 if (glyphs->total_contents)
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
308 xfree (glyphs->total_contents);
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
309 if (glyphs->total_charstarts)
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
310 xfree (glyphs->total_charstarts);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
311
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
312 xfree (glyphs->used);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
313 xfree (glyphs->glyphs);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
314 xfree (glyphs->highlight);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
315 xfree (glyphs->enable);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
316 xfree (glyphs->bufp);
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
317 if (glyphs->charstarts)
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
318 xfree (glyphs->charstarts);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
320 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
321 if (FRAME_WINDOW_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 {
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
323 xfree (glyphs->top_left_x);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
324 xfree (glyphs->top_left_y);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
325 xfree (glyphs->pix_width);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
326 xfree (glyphs->pix_height);
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
327 xfree (glyphs->max_ascent);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
329 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2365
diff changeset
331 xfree (glyphs);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
334 void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
335 remake_frame_glyphs (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
336 FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
338 if (FRAME_CURRENT_GLYPHS (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
339 free_frame_glyphs (frame, FRAME_CURRENT_GLYPHS (frame));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
340 if (FRAME_DESIRED_GLYPHS (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
341 free_frame_glyphs (frame, FRAME_DESIRED_GLYPHS (frame));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
342 if (FRAME_TEMP_GLYPHS (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
343 free_frame_glyphs (frame, FRAME_TEMP_GLYPHS (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
345 if (FRAME_MESSAGE_BUF (frame))
1872
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
346 {
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
347 /* Reallocate the frame's message buffer; remember that
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
348 echo_area_glyphs may be pointing here. */
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
349 char *old_message_buf = FRAME_MESSAGE_BUF (frame);
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
350
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
351 FRAME_MESSAGE_BUF (frame)
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
352 = (char *) xrealloc (FRAME_MESSAGE_BUF (frame),
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
353 FRAME_MESSAGE_BUF_SIZE (frame) + 1);
1872
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
354
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
355 if (echo_area_glyphs == old_message_buf)
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
356 echo_area_glyphs = FRAME_MESSAGE_BUF (frame);
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
357 if (previous_echo_glyphs == old_message_buf)
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
358 previous_echo_glyphs = FRAME_MESSAGE_BUF (frame);
ad692b76edf4 * dispnew.c (remake_frame_glyphs): When re-allocating the frame's
Jim Blandy <jimb@redhat.com>
parents: 1849
diff changeset
359 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
361 FRAME_MESSAGE_BUF (frame)
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
362 = (char *) xmalloc (FRAME_MESSAGE_BUF_SIZE (frame) + 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
364 FRAME_CURRENT_GLYPHS (frame) = make_frame_glyphs (frame, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
365 FRAME_DESIRED_GLYPHS (frame) = make_frame_glyphs (frame, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
366 FRAME_TEMP_GLYPHS (frame) = make_frame_glyphs (frame, 1);
15395
b584c2db055f (change_frame_size, remake_frame_glyphs): Use FRAME_WINDOW_P.
Richard M. Stallman <rms@gnu.org>
parents: 15394
diff changeset
367 if (FRAME_WINDOW_P (frame) || frame == selected_frame)
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
368 SET_FRAME_GARBAGED (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
370
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
371 /* Return the hash code of contents of line VPOS in frame-matrix M. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 static int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 line_hash_code (m, vpos)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
375 register struct frame_glyphs *m;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378 register GLYPH *body, *end;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 register int h = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 if (!m->enable[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383
1495
f17665e7347e (count_blanks): Leave argument r constant, and increment p.
Richard M. Stallman <rms@gnu.org>
parents: 1407
diff changeset
384 /* Give all highlighted lines the same hash code
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 so as to encourage scrolling to leave them in place. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386 if (m->highlight[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 return -1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 body = m->glyphs[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 if (must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 while (1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 GLYPH g = *body++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 if (g == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 h = (((h << 4) + (h >> 24)) & 0x0fffffff) + g - SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401 while (1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 GLYPH g = *body++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 if (g == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 h = (((h << 4) + (h >> 24)) & 0x0fffffff) + g;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 if (h)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 return h;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
413 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
414
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415 /* Return number of characters in line in M at vpos VPOS,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 except don't count leading and trailing spaces
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417 unless the terminal requires those to be explicitly output. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
418
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 static unsigned int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
420 line_draw_cost (m, vpos)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
421 struct frame_glyphs *m;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
422 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424 register GLYPH *beg = m->glyphs[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
425 register GLYPH *end = m->glyphs[vpos] + m->used[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
426 register int i;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 register int tlen = GLYPH_TABLE_LENGTH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
428 register Lisp_Object *tbase = GLYPH_TABLE_BASE;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430 /* Ignore trailing and leading spaces if we can. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 if (!must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 while ((end != beg) && (*end == SPACEGLYPH))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
434 --end;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
435 if (end == beg)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 return (0); /* All blank line. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 while (*beg == SPACEGLYPH)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439 ++beg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
440 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442 /* If we don't have a glyph-table, each glyph is one character,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
443 so return the number of glyphs. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 if (tbase == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445 return end - beg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 /* Otherwise, scan the glyphs and accumulate their total size in I. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448 i = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 while ((beg <= end) && *beg)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 register GLYPH g = *beg++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 if (GLYPH_SIMPLE_P (tbase, tlen, g))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 i += 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 i += GLYPH_LENGTH (tbase, g);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 return i;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 /* The functions on this page are the interface from xdisp.c to redisplay.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 The only other interface into redisplay is through setting
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
464 FRAME_CURSOR_X (frame) and FRAME_CURSOR_Y (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
465 and SET_FRAME_GARBAGED (frame). */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 /* cancel_line eliminates any request to display a line at position `vpos' */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
469 cancel_line (vpos, frame)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 int vpos;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
471 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
473 FRAME_DESIRED_GLYPHS (frame)->enable[vpos] = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
476 clear_frame_records (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
477 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
479 bzero (FRAME_CURRENT_GLYPHS (frame)->enable, FRAME_HEIGHT (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481
11411
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
482 /* Clear out all display lines for a coming redisplay. */
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
483
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
484 void
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
485 init_desired_glyphs (frame)
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
486 register FRAME_PTR frame;
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
487 {
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
488 register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (frame);
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
489 int vpos;
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
490 int height = FRAME_HEIGHT (frame);
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
491
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
492 for (vpos = 0; vpos < height; vpos++)
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
493 desired_glyphs->enable[vpos] = 0;
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
494 }
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
495
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 /* Prepare to display on line VPOS starting at HPOS within it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
499 get_display_line (frame, vpos, hpos)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
500 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
502 register int hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
504 register struct frame_glyphs *glyphs;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
505 register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 register GLYPH *p;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507
1192
5c380ec3cfc6 * dispnew.c (get_display_line): Don't abort if the frame is
Jim Blandy <jimb@redhat.com>
parents: 1042
diff changeset
508 if (vpos < 0)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 abort ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 if (! desired_glyphs->enable[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 desired_glyphs->used[vpos] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 desired_glyphs->highlight[vpos] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 desired_glyphs->enable[vpos] = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 if (hpos > desired_glyphs->used[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520 GLYPH *g = desired_glyphs->glyphs[vpos] + desired_glyphs->used[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 GLYPH *end = desired_glyphs->glyphs[vpos] + hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 desired_glyphs->used[vpos] = hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 while (g != end)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 *g++ = SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529 /* Like bcopy except never gets confused by overlap. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532 safe_bcopy (from, to, size)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 char *from, *to;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 int size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 {
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
536 if (size <= 0 || from == to)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
539 /* If the source and destination don't overlap, then bcopy can
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
540 handle it. If they do overlap, but the destination is lower in
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
541 memory than the source, we'll assume bcopy can handle that. */
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
542 if (to < from || from + size <= to)
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
543 bcopy (from, to, size);
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
544
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
545 /* Otherwise, we'll copy from the end. */
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
546 else
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 {
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
548 register char *endf = from + size;
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
549 register char *endt = to + size;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
551 /* If TO - FROM is large, then we should break the copy into
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 nonoverlapping chunks of TO - FROM bytes each. However, if
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553 TO - FROM is small, then the bcopy function call overhead
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 makes this not worth it. The crossover point could be about
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
555 anywhere. Since I don't think the obvious copy loop is too
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
556 bad, I'm trying to err in its favor. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 if (to - from < 64)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 do
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 *--endt = *--endf;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561 while (endf != from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564 {
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
565 for (;;)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 endt -= (to - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 endf -= (to - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
570 if (endt < to)
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
571 break;
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
572
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573 bcopy (endf, endt, to - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 }
1588
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
575
732a88db381f * dispnew.c [not MULTI_FRAME] (Fredraw_display): Pass the correct
Jim Blandy <jimb@redhat.com>
parents: 1495
diff changeset
576 /* If SIZE wasn't a multiple of TO - FROM, there will be a
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 little left over. The amount left over is
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 (endt + (to - from)) - to, which is endt - from. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 bcopy (from, to, endt - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
580 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
581 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583
352
cd7ffb1fcb45 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 314
diff changeset
584 /* Rotate a vector of SIZE bytes right, by DISTANCE bytes.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585 DISTANCE may be negative. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 static void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588 rotate_vector (vector, size, distance)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 char *vector;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 int size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
591 int distance;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 char *temp = (char *) alloca (size);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 if (distance < 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 distance += size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
598 bcopy (vector, temp + distance, size - distance);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 bcopy (vector + size - distance, temp, distance);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 bcopy (temp, vector, size);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
602
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
603 /* Scroll lines from vpos FROM up to but not including vpos END
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 down by AMOUNT lines (AMOUNT may be negative).
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605 Returns nonzero if done, zero if terminal cannot scroll them. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
606
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
607 int
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
608 scroll_frame_lines (frame, from, end, amount, newpos)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
609 register FRAME_PTR frame;
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
610 int from, end, amount, newpos;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
611 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
612 register int i;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
613 register struct frame_glyphs *current_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
614 = FRAME_CURRENT_GLYPHS (frame);
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
615 int pos_adjust;
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
616 int width = FRAME_WINDOW_WIDTH (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
617
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
618 if (!line_ins_del_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
619 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 if (amount == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
622 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
623
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 if (amount > 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
626 update_begin (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627 set_terminal_window (end + amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
628 if (!scroll_region_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629 ins_del_lines (end, -amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 ins_del_lines (from, amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
631 set_terminal_window (0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
633 rotate_vector (current_frame->glyphs + from,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
634 sizeof (GLYPH *) * (end + amount - from),
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
635 amount * sizeof (GLYPH *));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
637 rotate_vector (current_frame->charstarts + from,
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
638 sizeof (int *) * (end + amount - from),
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
639 amount * sizeof (int *));
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
640
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
641 safe_bcopy (current_frame->used + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
642 current_frame->used + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
643 (end - from) * sizeof current_frame->used[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
645 safe_bcopy (current_frame->highlight + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
646 current_frame->highlight + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
647 (end - from) * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
649 safe_bcopy (current_frame->enable + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
650 current_frame->enable + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
651 (end - from) * sizeof current_frame->enable[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
653 /* Adjust the lines by an amount
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
654 that puts the first of them at NEWPOS. */
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
655 pos_adjust = newpos - current_frame->charstarts[from + amount][0];
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
656
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
657 /* Offset each char position in the charstarts lines we moved
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
658 by pos_adjust. */
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
659 for (i = from + amount; i < end + amount; i++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
660 {
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
661 int *line = current_frame->charstarts[i];
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
662 int col;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
663 for (col = 0; col < width; col++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
664 if (line[col] > 0)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
665 line[col] += pos_adjust;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
666 }
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
667 for (i = from; i < from + amount; i++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
668 {
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
669 int *line = current_frame->charstarts[i];
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
670 int col;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
671 line[0] = -1;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
672 for (col = 0; col < width; col++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
673 line[col] = 0;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
674 }
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
675
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
676 /* Mark the lines made empty by scrolling as enabled, empty and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677 normal video. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
678 bzero (current_frame->used + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
679 amount * sizeof current_frame->used[0]);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
680 bzero (current_frame->highlight + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
681 amount * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
682 for (i = from; i < from + amount; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
683 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
684 current_frame->glyphs[i][0] = '\0';
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
685 current_frame->charstarts[i][0] = -1;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
686 current_frame->enable[i] = 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
688
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
689 safe_bcopy (current_frame->bufp + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
690 current_frame->bufp + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
691 (end - from) * sizeof current_frame->bufp[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
693 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
694 if (FRAME_WINDOW_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
695 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
696 safe_bcopy (current_frame->top_left_x + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
697 current_frame->top_left_x + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
698 (end - from) * sizeof current_frame->top_left_x[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
700 safe_bcopy (current_frame->top_left_y + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
701 current_frame->top_left_y + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
702 (end - from) * sizeof current_frame->top_left_y[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
704 safe_bcopy (current_frame->pix_width + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
705 current_frame->pix_width + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
706 (end - from) * sizeof current_frame->pix_width[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
707
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
708 safe_bcopy (current_frame->pix_height + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
709 current_frame->pix_height + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
710 (end - from) * sizeof current_frame->pix_height[0]);
1407
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
711
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
712 safe_bcopy (current_frame->max_ascent + from,
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
713 current_frame->max_ascent + from + amount,
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
714 (end - from) * sizeof current_frame->max_ascent[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
715 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
716 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
717
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
718 update_end (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 if (amount < 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
722 update_begin (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
723 set_terminal_window (end);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 ins_del_lines (from + amount, amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
725 if (!scroll_region_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 ins_del_lines (end + amount, -amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727 set_terminal_window (0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
729 rotate_vector (current_frame->glyphs + from + amount,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730 sizeof (GLYPH *) * (end - from - amount),
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 amount * sizeof (GLYPH *));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
733 rotate_vector (current_frame->charstarts + from + amount,
6627
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
734 sizeof (int *) * (end - from - amount),
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
735 amount * sizeof (int *));
f8471ecf787b (make_frame_glyphs): If EMPTY, don't leave junk in ->total_charstarts.
Richard M. Stallman <rms@gnu.org>
parents: 6620
diff changeset
736
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
737 safe_bcopy (current_frame->used + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
738 current_frame->used + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
739 (end - from) * sizeof current_frame->used[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
741 safe_bcopy (current_frame->highlight + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
742 current_frame->highlight + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
743 (end - from) * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
745 safe_bcopy (current_frame->enable + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
746 current_frame->enable + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
747 (end - from) * sizeof current_frame->enable[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
749 /* Adjust the lines by an amount
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
750 that puts the first of them at NEWPOS. */
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
751 pos_adjust = newpos - current_frame->charstarts[from + amount][0];
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
752
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
753 /* Offset each char position in the charstarts lines we moved
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
754 by pos_adjust. */
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
755 for (i = from + amount; i < end + amount; i++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
756 {
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
757 int *line = current_frame->charstarts[i];
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
758 int col;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
759 for (col = 0; col < width; col++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
760 if (line[col] > 0)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
761 line[col] += pos_adjust;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
762 }
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
763 for (i = end + amount; i < end; i++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
764 {
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
765 int *line = current_frame->charstarts[i];
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
766 int col;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
767 line[0] = -1;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
768 for (col = 0; col < width; col++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
769 line[col] = 0;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
770 }
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
771
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
772 /* Mark the lines made empty by scrolling as enabled, empty and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 normal video. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
774 bzero (current_frame->used + end + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
775 - amount * sizeof current_frame->used[0]);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
776 bzero (current_frame->highlight + end + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
777 - amount * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 for (i = end + amount; i < end; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
780 current_frame->glyphs[i][0] = '\0';
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
781 current_frame->charstarts[i][0] = 0;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
782 current_frame->enable[i] = 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
785 safe_bcopy (current_frame->bufp + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
786 current_frame->bufp + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
787 (end - from) * sizeof current_frame->bufp[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
788
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
789 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
790 if (FRAME_WINDOW_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
792 safe_bcopy (current_frame->top_left_x + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
793 current_frame->top_left_x + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
794 (end - from) * sizeof current_frame->top_left_x[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
796 safe_bcopy (current_frame->top_left_y + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
797 current_frame->top_left_y + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
798 (end - from) * sizeof current_frame->top_left_y[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
800 safe_bcopy (current_frame->pix_width + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
801 current_frame->pix_width + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
802 (end - from) * sizeof current_frame->pix_width[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
804 safe_bcopy (current_frame->pix_height + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
805 current_frame->pix_height + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
806 (end - from) * sizeof current_frame->pix_height[0]);
1407
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
807
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
808 safe_bcopy (current_frame->max_ascent + from,
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
809 current_frame->max_ascent + from + amount,
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
810 (end - from) * sizeof current_frame->max_ascent[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
812 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
814 update_end (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
819 /* After updating a window W that isn't the full frame wide,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 copy all the columns that W does not occupy
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
821 into the FRAME_DESIRED_GLYPHS (frame) from the FRAME_PHYS_GLYPHS (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
822 so that update_frame will not change those columns. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 preserve_other_columns (w)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825 struct window *w;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 register int vpos;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
828 register struct frame_glyphs *current_frame, *desired_frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
829 register FRAME_PTR frame = XFRAME (w->frame);
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
830 int start = WINDOW_LEFT_MARGIN (w);
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
831 int end = WINDOW_RIGHT_EDGE (w);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 int bot = XFASTINT (w->top) + XFASTINT (w->height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
834 current_frame = FRAME_CURRENT_GLYPHS (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
835 desired_frame = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 for (vpos = XFASTINT (w->top); vpos < bot; vpos++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
839 if (current_frame->enable[vpos] && desired_frame->enable[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 if (start > 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 int len;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
845 bcopy (current_frame->glyphs[vpos],
2930
839f3d132ee0 * dispnew.c (preserve_other_columns): Remember to multiply the
Jim Blandy <jimb@redhat.com>
parents: 2794
diff changeset
846 desired_frame->glyphs[vpos],
8878
066fab036ab5 (preserve_other_columns): Fix arg to sizeof in bcopy call.
Richard M. Stallman <rms@gnu.org>
parents: 8665
diff changeset
847 start * sizeof (current_frame->glyphs[vpos][0]));
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
848 bcopy (current_frame->charstarts[vpos],
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
849 desired_frame->charstarts[vpos],
8878
066fab036ab5 (preserve_other_columns): Fix arg to sizeof in bcopy call.
Richard M. Stallman <rms@gnu.org>
parents: 8665
diff changeset
850 start * sizeof (current_frame->charstarts[vpos][0]));
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
851 len = min (start, current_frame->used[vpos]);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
852 if (desired_frame->used[vpos] < len)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
853 desired_frame->used[vpos] = len;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
854 }
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
855 if (current_frame->used[vpos] > end
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
856 && desired_frame->used[vpos] < current_frame->used[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
858 while (desired_frame->used[vpos] < end)
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
859 {
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
860 int used = desired_frame->used[vpos]++;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
861 desired_frame->glyphs[vpos][used] = SPACEGLYPH;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
862 desired_frame->glyphs[vpos][used] = 0;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
863 }
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
864 bcopy (current_frame->glyphs[vpos] + end,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
865 desired_frame->glyphs[vpos] + end,
2930
839f3d132ee0 * dispnew.c (preserve_other_columns): Remember to multiply the
Jim Blandy <jimb@redhat.com>
parents: 2794
diff changeset
866 ((current_frame->used[vpos] - end)
8878
066fab036ab5 (preserve_other_columns): Fix arg to sizeof in bcopy call.
Richard M. Stallman <rms@gnu.org>
parents: 8665
diff changeset
867 * sizeof (current_frame->glyphs[vpos][0])));
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
868 bcopy (current_frame->charstarts[vpos] + end,
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
869 desired_frame->charstarts[vpos] + end,
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
870 ((current_frame->used[vpos] - end)
8878
066fab036ab5 (preserve_other_columns): Fix arg to sizeof in bcopy call.
Richard M. Stallman <rms@gnu.org>
parents: 8665
diff changeset
871 * sizeof (current_frame->charstarts[vpos][0])));
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
872 desired_frame->used[vpos] = current_frame->used[vpos];
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 #if 0
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
880 /* If window w does not need to be updated and isn't the full frame wide,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 copy all the columns that w does occupy
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
882 into the FRAME_DESIRED_LINES (frame) from the FRAME_PHYS_LINES (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
883 so that update_frame will not change those columns.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885 Have not been able to figure out how to use this correctly. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 preserve_my_columns (w)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 struct window *w;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
890 register int vpos, fin;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
891 register struct frame_glyphs *l1, *l2;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
892 register FRAME_PTR frame = XFRAME (w->frame);
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
893 int start = WINDOW_LEFT_MARGIN (w);
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
894 int end = WINDOW_RIGHT_EDGE (w);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 int bot = XFASTINT (w->top) + XFASTINT (w->height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 for (vpos = XFASTINT (w->top); vpos < bot; vpos++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
898 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
899 if ((l1 = FRAME_DESIRED_GLYPHS (frame)->glyphs[vpos + 1])
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
900 && (l2 = FRAME_PHYS_GLYPHS (frame)->glyphs[vpos + 1]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
901 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 if (l2->length > start && l1->length < l2->length)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
903 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
904 fin = l2->length;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 if (fin > end) fin = end;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906 while (l1->length < start)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 l1->body[l1->length++] = ' ';
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 bcopy (l2->body + start, l1->body + start, fin - start);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909 l1->length = fin;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
914
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
917 /* Adjust by ADJUST the charstart values in window W
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
918 after vpos VPOS, which counts relative to the frame
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
919 (not relative to W itself). */
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
920
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
921 void
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
922 adjust_window_charstarts (w, vpos, adjust)
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
923 struct window *w;
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
924 int vpos;
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
925 int adjust;
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
926 {
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
927 int left = WINDOW_LEFT_MARGIN (w);
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
928 int top = XFASTINT (w->top);
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
929 int right = left + window_internal_width (w);
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
930 int bottom = top + window_internal_height (w);
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
931 int i;
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
932
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
933 for (i = vpos + 1; i < bottom; i++)
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
934 {
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
935 int *charstart
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
936 = FRAME_CURRENT_GLYPHS (XFRAME (WINDOW_FRAME (w)))->charstarts[i];
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
937 int j;
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
938 for (j = left; j < right; j++)
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
939 if (charstart[j] > 0)
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
940 charstart[j] += adjust;
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
941 }
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
942 }
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
943
6682
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
944 /* Check the charstarts values in the area of window W
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
945 for internal consistency. We cannot check that they are "right";
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
946 we can only look for something nonsensical. */
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
947
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
948 verify_charstarts (w)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
949 struct window *w;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
950 {
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
951 FRAME_PTR f = XFRAME (WINDOW_FRAME (w));
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
952 int i;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
953 int top = XFASTINT (w->top);
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
954 int bottom = top + window_internal_height (w);
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
955 int left = WINDOW_LEFT_MARGIN (w);
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
956 int right = left + window_internal_width (w);
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
957 int next_line;
6682
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
958 int truncate = (XINT (w->hscroll)
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
959 || (truncate_partial_width_windows
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
960 && !WINDOW_FULL_WIDTH_P (w))
6682
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
961 || !NILP (XBUFFER (w->buffer)->truncate_lines));
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
962
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
963 for (i = top; i < bottom; i++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
964 {
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
965 int j;
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
966 int last;
6682
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
967 int *charstart = FRAME_CURRENT_GLYPHS (f)->charstarts[i];
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
968
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
969 if (i != top)
6682
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
970 {
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
971 if (truncate)
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
972 {
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
973 /* If we are truncating lines, allow a jump
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
974 in charstarts from one line to the next. */
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
975 if (charstart[left] < next_line)
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
976 abort ();
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
977 }
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
978 else
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
979 {
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
980 if (charstart[left] != next_line)
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
981 abort ();
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
982 }
16ab14205588 (verify_charstarts): Handle truncation of lines.
Richard M. Stallman <rms@gnu.org>
parents: 6648
diff changeset
983 }
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
984
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
985 for (j = left; j < right; j++)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
986 if (charstart[j] > 0)
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
987 last = charstart[j];
6645
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
988 /* Record where the next line should start. */
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
989 next_line = last;
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
990 if (BUF_ZV (XBUFFER (w->buffer)) != last)
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
991 {
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
992 /* If there's a newline between the two lines, count that. */
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
993 int endchar = *BUF_CHAR_ADDRESS (XBUFFER (w->buffer), last);
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
994 if (endchar == '\n')
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
995 next_line++;
ba0c1af167e6 (verify_charstarts): Count right for continued lines.
Richard M. Stallman <rms@gnu.org>
parents: 6642
diff changeset
996 }
6642
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
997 }
2fda5dd17356 (verify_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6627
diff changeset
998 }
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
999
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 /* On discovering that the redisplay for a window was no good,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 cancel the columns of that window, so that when the window is
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 displayed over again get_display_line will not complain. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1004 cancel_my_columns (w)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 struct window *w;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1006 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 register int vpos;
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1008 register struct frame_glyphs *desired_glyphs
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1009 = FRAME_DESIRED_GLYPHS (XFRAME (w->frame));
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1010 register int start = WINDOW_LEFT_MARGIN (w);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 register int bot = XFASTINT (w->top) + XFASTINT (w->height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 for (vpos = XFASTINT (w->top); vpos < bot; vpos++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 if (desired_glyphs->enable[vpos]
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 && desired_glyphs->used[vpos] >= start)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 desired_glyphs->used[vpos] = start;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1019 /* These functions try to perform directly and immediately on the frame
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 the necessary output for one change in the buffer.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021 They may return 0 meaning nothing was done if anything is difficult,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 or 1 meaning the output was performed properly.
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1023 They assume that the frame was up to date before the buffer
1495
f17665e7347e (count_blanks): Leave argument r constant, and increment p.
Richard M. Stallman <rms@gnu.org>
parents: 1407
diff changeset
1024 change being displayed. They make various other assumptions too;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 see command_loop_1 where these are called. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 direct_output_for_insert (g)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 int g;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1031 register FRAME_PTR frame = selected_frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1032 register struct frame_glyphs *current_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1033 = FRAME_CURRENT_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1035 #ifndef COMPILER_REGISTER_BUG
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 register
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1037 #endif /* COMPILER_REGISTER_BUG */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 struct window *w = XWINDOW (selected_window);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1039 #ifndef COMPILER_REGISTER_BUG
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1040 register
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 #endif /* COMPILER_REGISTER_BUG */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1042 int hpos = FRAME_CURSOR_X (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 #ifndef COMPILER_REGISTER_BUG
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 register
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1045 #endif /* COMPILER_REGISTER_BUG */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1046 int vpos = FRAME_CURSOR_Y (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1047
1777
4edfaa19c7a7 * window.c (window_internal_width): New function.
Jim Blandy <jimb@redhat.com>
parents: 1766
diff changeset
1048 /* Give up if about to continue line. */
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1049 if (hpos >= WINDOW_LEFT_MARGIN (w) + window_internal_width (w) - 1
1777
4edfaa19c7a7 * window.c (window_internal_width): New function.
Jim Blandy <jimb@redhat.com>
parents: 1766
diff changeset
1050
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051 /* Avoid losing if cursor is in invisible text off left margin */
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1052 || (XINT (w->hscroll) && hpos == WINDOW_LEFT_MARGIN (w))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 /* Give up if cursor outside window (in minibuf, probably) */
1042
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1055 || cursor_in_echo_area
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1056 || FRAME_CURSOR_Y (frame) < XFASTINT (w->top)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1057 || FRAME_CURSOR_Y (frame) >= XFASTINT (w->top) + XFASTINT (w->height)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1058
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1059 /* Give up if cursor not really at FRAME_CURSOR_X, FRAME_CURSOR_Y */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1060 || !display_completed
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1061
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1062 /* Give up if buffer appears in two places. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063 || buffer_shared > 1
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1065 #ifdef USE_TEXT_PROPERTIES
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1066 /* Intervals have already been adjusted, point is after the
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1067 character that was just inserted. */
6068
f67817990735 (direct_output_for_insert): Fix comment.
Karl Heuer <kwzh@gnu.org>
parents: 5885
diff changeset
1068 /* Give up if character is invisible. */
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1069 /* Give up if character has a face property.
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1070 At the moment we only lose at end of line or end of buffer
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1071 and only with faces that have some background */
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1072 /* Instead of wasting time, give up if character has any text properties */
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1073 || ! NILP (Ftext_properties_at (make_number (PT - 1), Qnil))
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1074 #endif
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1075
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 /* Give up if w is minibuffer and a message is being displayed there */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 || (MINI_WINDOW_P (w) && echo_area_glyphs))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079
2778
071fa2f469d7 * dispnew.c (direct_output_for_insert): Compute the face of the
Jim Blandy <jimb@redhat.com>
parents: 2648
diff changeset
1080 {
8301
c01188c50e70 (direct_output_for_insert): Dpn't call compute_char_face
Richard M. Stallman <rms@gnu.org>
parents: 8286
diff changeset
1081 int face = 0;
9572
b36d5e88cccc *** empty log message ***
Morten Welinder <terra@diku.dk>
parents: 9303
diff changeset
1082 #ifdef HAVE_FACES
2778
071fa2f469d7 * dispnew.c (direct_output_for_insert): Compute the face of the
Jim Blandy <jimb@redhat.com>
parents: 2648
diff changeset
1083 int dummy;
8301
c01188c50e70 (direct_output_for_insert): Dpn't call compute_char_face
Richard M. Stallman <rms@gnu.org>
parents: 8286
diff changeset
1084
15394
8d01f71c4797 (Fredraw_frame, remake_frame_glyphs)
Richard M. Stallman <rms@gnu.org>
parents: 15282
diff changeset
1085 if (FRAME_WINDOW_P (frame) || FRAME_MSDOS_P (frame))
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1086 face = compute_char_face (frame, w, PT - 1, -1, -1, &dummy, PT, 0);
2778
071fa2f469d7 * dispnew.c (direct_output_for_insert): Compute the face of the
Jim Blandy <jimb@redhat.com>
parents: 2648
diff changeset
1087 #endif
6414
d681b16231a8 (direct_output_for_insert): Handle termcap frames as well as X.
Karl Heuer <kwzh@gnu.org>
parents: 6349
diff changeset
1088 current_frame->glyphs[vpos][hpos] = MAKE_GLYPH (frame, g, face);
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1089 current_frame->charstarts[vpos][hpos] = PT - 1;
6648
c7eefaee311c (direct_output_for_insert): Add charstarts entry after the new char.
Richard M. Stallman <rms@gnu.org>
parents: 6645
diff changeset
1090 /* Record the entry for after the newly inserted character. */
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1091 current_frame->charstarts[vpos][hpos + 1] = PT;
6620
990d7d5095dc (adjust_window_charstarts): New function.
Richard M. Stallman <rms@gnu.org>
parents: 6617
diff changeset
1092 adjust_window_charstarts (w, vpos, 1);
2778
071fa2f469d7 * dispnew.c (direct_output_for_insert): Compute the face of the
Jim Blandy <jimb@redhat.com>
parents: 2648
diff changeset
1093 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 unchanged_modified = MODIFF;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1095 beg_unchanged = GPT - BEG;
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1096 XSETFASTINT (w->last_point, PT);
9303
3115ae493c30 (direct_output_for_insert, direct_output_forward_char, change_frame_size,
Karl Heuer <kwzh@gnu.org>
parents: 9264
diff changeset
1097 XSETFASTINT (w->last_point_x, hpos);
3115ae493c30 (direct_output_for_insert, direct_output_forward_char, change_frame_size,
Karl Heuer <kwzh@gnu.org>
parents: 9264
diff changeset
1098 XSETFASTINT (w->last_modified, MODIFF);
16195
e15e4bdcb8cc (direct_output_for_insert): Set last_overlay_modified field in window.
Richard M. Stallman <rms@gnu.org>
parents: 16051
diff changeset
1099 XSETFASTINT (w->last_overlay_modified, OVERLAY_MODIFF);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 reassert_line_highlight (0, vpos);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1102 write_glyphs (&current_frame->glyphs[vpos][hpos], 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 fflush (stdout);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1104 ++FRAME_CURSOR_X (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1105 if (hpos == current_frame->used[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1107 current_frame->used[vpos] = hpos + 1;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1108 current_frame->glyphs[vpos][hpos + 1] = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1113
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1114 int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1115 direct_output_forward_char (n)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 int n;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1117 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1118 register FRAME_PTR frame = selected_frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1119 register struct window *w = XWINDOW (selected_window);
8903
03597c3eb63b (direct_output_for_insert, direct_output_forward_char): Fix Lisp_Object
Karl Heuer <kwzh@gnu.org>
parents: 8878
diff changeset
1120 Lisp_Object position;
5223
db2e7e6a488e (Fsit_for): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5218
diff changeset
1121 int hpos = FRAME_CURSOR_X (frame);
db2e7e6a488e (Fsit_for): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5218
diff changeset
1122
db2e7e6a488e (Fsit_for): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5218
diff changeset
1123 /* Give up if in truncated text at end of line. */
18853
4501a367a887 (direct_output_forward_char): Reenable check against
Richard M. Stallman <rms@gnu.org>
parents: 18774
diff changeset
1124 /* This check is not redundant. */
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1125 if (hpos >= WINDOW_LEFT_MARGIN (w) + window_internal_width (w) - 1)
5223
db2e7e6a488e (Fsit_for): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5218
diff changeset
1126 return 0;
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1127
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1128 /* Give up if the buffer's direction is reversed (i.e. right-to-left). */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1129 if (!NILP (XBUFFER(w->buffer)->direction_reversed))
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1130 return 0;
5223
db2e7e6a488e (Fsit_for): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5218
diff changeset
1131
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
1132 /* Avoid losing if cursor is in invisible text off left margin
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
1133 or about to go off either side of window. */
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1134 if ((FRAME_CURSOR_X (frame) == WINDOW_LEFT_MARGIN (w)
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
1135 && (XINT (w->hscroll) || n < 0))
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
1136 || (n > 0
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1137 && (FRAME_CURSOR_X (frame) + 1
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1138 >= XFASTINT (w->left) + window_internal_width (w) - 1))
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1139 /* BUG FIX: Added "XFASTINT (w->left)". Without this,
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1140 direct_output_forward_char() always fails on "the right"
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1141 window. */
1042
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1142 || cursor_in_echo_area)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1143 return 0;
11096
cac0367b1794 (direct_output_forward_char): Don't use direct output at an overlay boundary.
Karl Heuer <kwzh@gnu.org>
parents: 10770
diff changeset
1144
2794
9163e4e4752c (direct_output_forward_char): Just give up
Richard M. Stallman <rms@gnu.org>
parents: 2778
diff changeset
1145 /* Can't use direct output if highlighting a region. */
9163e4e4752c (direct_output_forward_char): Just give up
Richard M. Stallman <rms@gnu.org>
parents: 2778
diff changeset
1146 if (!NILP (Vtransient_mark_mode) && !NILP (current_buffer->mark_active))
9163e4e4752c (direct_output_forward_char): Just give up
Richard M. Stallman <rms@gnu.org>
parents: 2778
diff changeset
1147 return 0;
9163e4e4752c (direct_output_forward_char): Just give up
Richard M. Stallman <rms@gnu.org>
parents: 2778
diff changeset
1148
11096
cac0367b1794 (direct_output_forward_char): Don't use direct output at an overlay boundary.
Karl Heuer <kwzh@gnu.org>
parents: 10770
diff changeset
1149 /* Can't use direct output at an overlay boundary; it might have
cac0367b1794 (direct_output_forward_char): Don't use direct output at an overlay boundary.
Karl Heuer <kwzh@gnu.org>
parents: 10770
diff changeset
1150 before-string or after-string properties. */
cac0367b1794 (direct_output_forward_char): Don't use direct output at an overlay boundary.
Karl Heuer <kwzh@gnu.org>
parents: 10770
diff changeset
1151 if (overlay_touches_p (PT) || overlay_touches_p (PT - n))
cac0367b1794 (direct_output_forward_char): Don't use direct output at an overlay boundary.
Karl Heuer <kwzh@gnu.org>
parents: 10770
diff changeset
1152 return 0;
cac0367b1794 (direct_output_forward_char): Don't use direct output at an overlay boundary.
Karl Heuer <kwzh@gnu.org>
parents: 10770
diff changeset
1153
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1154 #ifdef USE_TEXT_PROPERTIES
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1155 /* Don't use direct output next to an invisible character
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1156 since we might need to do something special. */
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1157
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1158 XSETFASTINT (position, PT);
4551
1abd3007cbb6 (direct_output_forward_char): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents: 4384
diff changeset
1159 if (XFASTINT (position) < ZV
6069
07045ca8ff19 (direct_output_forward_char): Use Fget_char_property to test for invisibility.
Karl Heuer <kwzh@gnu.org>
parents: 6068
diff changeset
1160 && ! NILP (Fget_char_property (position,
4551
1abd3007cbb6 (direct_output_forward_char): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents: 4384
diff changeset
1161 Qinvisible,
6069
07045ca8ff19 (direct_output_forward_char): Use Fget_char_property to test for invisibility.
Karl Heuer <kwzh@gnu.org>
parents: 6068
diff changeset
1162 selected_window)))
07045ca8ff19 (direct_output_forward_char): Use Fget_char_property to test for invisibility.
Karl Heuer <kwzh@gnu.org>
parents: 6068
diff changeset
1163 return 0;
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1164
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1165 XSETFASTINT (position, PT - 1);
4551
1abd3007cbb6 (direct_output_forward_char): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents: 4384
diff changeset
1166 if (XFASTINT (position) >= BEGV
6069
07045ca8ff19 (direct_output_forward_char): Use Fget_char_property to test for invisibility.
Karl Heuer <kwzh@gnu.org>
parents: 6068
diff changeset
1167 && ! NILP (Fget_char_property (position,
4551
1abd3007cbb6 (direct_output_forward_char): Fix previous change:
Richard M. Stallman <rms@gnu.org>
parents: 4384
diff changeset
1168 Qinvisible,
6069
07045ca8ff19 (direct_output_forward_char): Use Fget_char_property to test for invisibility.
Karl Heuer <kwzh@gnu.org>
parents: 6068
diff changeset
1169 selected_window)))
07045ca8ff19 (direct_output_forward_char): Use Fget_char_property to test for invisibility.
Karl Heuer <kwzh@gnu.org>
parents: 6068
diff changeset
1170 return 0;
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1171 #endif
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1172
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1173 FRAME_CURSOR_X (frame) += n;
9303
3115ae493c30 (direct_output_for_insert, direct_output_forward_char, change_frame_size,
Karl Heuer <kwzh@gnu.org>
parents: 9264
diff changeset
1174 XSETFASTINT (w->last_point_x, FRAME_CURSOR_X (frame));
16039
855c8d8ba0f0 Change all references from point to PT.
Karl Heuer <kwzh@gnu.org>
parents: 15896
diff changeset
1175 XSETFASTINT (w->last_point, PT);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1176 cursor_to (FRAME_CURSOR_Y (frame), FRAME_CURSOR_X (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177 fflush (stdout);
4384
98605d0ea3cf (direct_output_for_insert): Fail if character
Richard M. Stallman <rms@gnu.org>
parents: 4290
diff changeset
1178
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 static void update_line ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1184 /* Update frame F based on the data in FRAME_DESIRED_GLYPHS.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 Value is nonzero if redisplay stopped due to pending input.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 FORCE nonzero means do not stop for pending input. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 int
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1189 update_frame (f, force, inhibit_hairy_id)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1190 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1191 int force;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1192 int inhibit_hairy_id;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 {
7179
cb958b7d5fe1 (update_frame): Move assignments to current_frame and desired_frame.
Richard M. Stallman <rms@gnu.org>
parents: 6857
diff changeset
1194 register struct frame_glyphs *current_frame;
7188
7da4ad9a2a8f (update_frame): Move those assignments even farther down.
Richard M. Stallman <rms@gnu.org>
parents: 7179
diff changeset
1195 register struct frame_glyphs *desired_frame = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196 register int i;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1197 int pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198 int preempt_count = baud_rate / 2400 + 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 extern input_pending;
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1200 #ifdef HAVE_WINDOW_SYSTEM
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 register int downto, leftmost;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1202 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203
10122
3de6776ae141 (update_frame): Call calculate_costs if baud_rate changed.
Richard M. Stallman <rms@gnu.org>
parents: 9963
diff changeset
1204 if (baud_rate != FRAME_COST_BAUD_RATE (f))
3de6776ae141 (update_frame): Call calculate_costs if baud_rate changed.
Richard M. Stallman <rms@gnu.org>
parents: 9963
diff changeset
1205 calculate_costs (f);
3de6776ae141 (update_frame): Call calculate_costs if baud_rate changed.
Richard M. Stallman <rms@gnu.org>
parents: 9963
diff changeset
1206
3357
d9523a958b3c (update_frame): Make preempt_count positive.
Richard M. Stallman <rms@gnu.org>
parents: 3317
diff changeset
1207 if (preempt_count <= 0)
d9523a958b3c (update_frame): Make preempt_count positive.
Richard M. Stallman <rms@gnu.org>
parents: 3317
diff changeset
1208 preempt_count = 1;
d9523a958b3c (update_frame): Make preempt_count positive.
Richard M. Stallman <rms@gnu.org>
parents: 3317
diff changeset
1209
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1210 if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1211
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1212 detect_input_pending ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1213 if (input_pending && !force)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1214 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215 pause = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 goto do_pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1218
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1219 update_begin (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1220
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1221 if (!line_ins_del_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1222 inhibit_hairy_id = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1223
7188
7da4ad9a2a8f (update_frame): Move those assignments even farther down.
Richard M. Stallman <rms@gnu.org>
parents: 7179
diff changeset
1224 /* These are separate to avoid a possible bug in the AIX C compiler. */
7da4ad9a2a8f (update_frame): Move those assignments even farther down.
Richard M. Stallman <rms@gnu.org>
parents: 7179
diff changeset
1225 current_frame = FRAME_CURRENT_GLYPHS (f);
7da4ad9a2a8f (update_frame): Move those assignments even farther down.
Richard M. Stallman <rms@gnu.org>
parents: 7179
diff changeset
1226 desired_frame = FRAME_DESIRED_GLYPHS (f);
7da4ad9a2a8f (update_frame): Move those assignments even farther down.
Richard M. Stallman <rms@gnu.org>
parents: 7179
diff changeset
1227
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1228 /* See if any of the desired lines are enabled; don't compute for
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1229 i/d line if just want cursor motion. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1230 for (i = 0; i < FRAME_HEIGHT (f); i++)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1231 if (desired_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 /* Try doing i/d line, if not yet inhibited. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1235 if (!inhibit_hairy_id && i < FRAME_HEIGHT (f))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1236 force |= scrolling (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 /* Update the individual lines as needed. Do bottom line first. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1240 if (desired_frame->enable[FRAME_HEIGHT (f) - 1])
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1241 update_line (f, FRAME_HEIGHT (f) - 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1243 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1244 if (FRAME_WINDOW_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 {
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1246 leftmost = downto = FRAME_INTERNAL_BORDER_WIDTH (f);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1247 if (desired_frame->enable[0])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1249 current_frame->top_left_x[FRAME_HEIGHT (f) - 1] = leftmost;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1250 current_frame->top_left_y[FRAME_HEIGHT (f) - 1]
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1251 = PIXEL_HEIGHT (f) - FRAME_INTERNAL_BORDER_WIDTH (f)
1407
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
1252 - current_frame->pix_height[FRAME_HEIGHT (f) - 1];
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1253 current_frame->top_left_x[0] = leftmost;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1254 current_frame->top_left_y[0] = downto;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1257 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 /* Now update the rest of the lines. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1260 for (i = 0; i < FRAME_HEIGHT (f) - 1 && (force || !input_pending); i++)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1261 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1262 if (desired_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1263 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1264 if (FRAME_TERMCAP_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1266 /* Flush out every so many lines.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1267 Also flush out if likely to have more than 1k buffered
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 otherwise. I'm told that some telnet connections get
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269 really screwed by more than 1k output at once. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 int outq = PENDING_OUTPUT_COUNT (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1271 if (outq > 900
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1272 || (outq > 20 && ((i - 1) % preempt_count == 0)))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1275 if (preempt_count == 1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276 {
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1277 #ifdef EMACS_OUTQSIZE
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1278 if (EMACS_OUTQSIZE (0, &outq) < 0)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 /* Probably not a tty. Ignore the error and reset
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 * the outq count. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 outq = PENDING_OUTPUT_COUNT (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283 outq *= 10;
7530
57c2345a9002 (update_frame): Fix test of outq and baud_rate some more.
Richard M. Stallman <rms@gnu.org>
parents: 7529
diff changeset
1284 if (baud_rate <= outq && baud_rate > 0)
3357
d9523a958b3c (update_frame): Make preempt_count positive.
Richard M. Stallman <rms@gnu.org>
parents: 3317
diff changeset
1285 sleep (outq / baud_rate);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289
16822
483e137d5384 (update_frame): Call detect_input_pending
Richard M. Stallman <rms@gnu.org>
parents: 16589
diff changeset
1290 if ((i - 1) % preempt_count == 0)
483e137d5384 (update_frame): Call detect_input_pending
Richard M. Stallman <rms@gnu.org>
parents: 16589
diff changeset
1291 detect_input_pending ();
483e137d5384 (update_frame): Call detect_input_pending
Richard M. Stallman <rms@gnu.org>
parents: 16589
diff changeset
1292
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1293 update_line (f, i);
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1294 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1295 if (FRAME_WINDOW_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1297 current_frame->top_left_y[i] = downto;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1298 current_frame->top_left_x[i] = leftmost;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1300 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1303 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1304 if (FRAME_WINDOW_P (f))
1407
0f214040f708 * dispnew.c (scroll_frame_lines): All references to frame elements
Joseph Arceneaux <jla@gnu.org>
parents: 1192
diff changeset
1305 downto += current_frame->pix_height[i];
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1306 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307 }
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1308 pause = (i < FRAME_HEIGHT (f) - 1) ? i : 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1309
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 /* Now just clean up termcap drivers and set cursor, etc. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1311 if (!pause)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1312 {
12409
6e374b28ecc3 (update_frame): Pretend cursor is in echo area
Richard M. Stallman <rms@gnu.org>
parents: 12193
diff changeset
1313 if ((cursor_in_echo_area
12627
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1314 /* If we are showing a message instead of the minibuffer,
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1315 show the cursor for the message instead of for the
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1316 (now hidden) minibuffer contents. */
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1317 || (EQ (minibuf_window, selected_window)
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1318 && EQ (minibuf_window, echo_area_window)
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1319 && echo_area_glyphs != 0))
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1320 /* These cases apply only to the frame that contains
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1321 the active minibuffer window. */
c7bc7a24b1ff (update_frame): Check that the echo area is in the frame being displayed.
Richard M. Stallman <rms@gnu.org>
parents: 12532
diff changeset
1322 && FRAME_HAS_MINIBUF_P (f)
14459
c1d25453a95f (update_frame): Compare FRAME_MINIBUF_WINDOW(f)
Richard M. Stallman <rms@gnu.org>
parents: 14286
diff changeset
1323 && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window))
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1324 {
1042
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1325 int top = XINT (XWINDOW (FRAME_MINIBUF_WINDOW (f))->top);
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1326 int row, col;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1327
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1328 if (cursor_in_echo_area < 0)
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1329 {
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1330 row = top;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1331 col = 0;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1332 }
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1333 else
1042
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1334 {
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1335 /* If the minibuffer is several lines high, find the last
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1336 line that has any text on it. */
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1337 row = FRAME_HEIGHT (f);
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1338 do
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1339 {
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1340 row--;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1341 if (current_frame->enable[row])
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1342 col = current_frame->used[row];
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1343 else
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1344 col = 0;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1345 }
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1346 while (row > top && col == 0);
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1347
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
1348 if (col >= FRAME_WINDOW_WIDTH (f))
1042
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1349 {
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1350 col = 0;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1351 if (row < FRAME_HEIGHT (f) - 1)
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1352 row++;
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1353 }
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1354 }
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1355
41b77a76b885 * dispnew.c: Incude "systty.h", not "systerm.h".
Jim Blandy <jimb@redhat.com>
parents: 1003
diff changeset
1356 cursor_to (row, col);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1357 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 else
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1359 cursor_to (FRAME_CURSOR_Y (f),
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1360 max (min (FRAME_CURSOR_X (f),
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1361 FRAME_WINDOW_WIDTH (f) - 1), 0));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1364 update_end (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 if (termscript)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 fflush (termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 /* Here if output is preempted because input is detected. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 do_pause:
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1373 if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 display_completed = !pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375
7247
bead6db0bbf2 (update_frame): Fix previous change: unconditionally bzero at the end.
Richard M. Stallman <rms@gnu.org>
parents: 7188
diff changeset
1376 bzero (FRAME_DESIRED_GLYPHS (f)->enable, FRAME_HEIGHT (f));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1377 return pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1379
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 /* Called when about to quit, to check for doing so
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 at an improper time. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 quit_error_check ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 {
13105
a9efbc138c23 (get_display_line): Don't abort if there's text
Richard M. Stallman <rms@gnu.org>
parents: 12917
diff changeset
1386 #if 0
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1387 if (FRAME_DESIRED_GLYPHS (selected_frame) == 0)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 return;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1389 if (FRAME_DESIRED_GLYPHS (selected_frame)->enable[0])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 abort ();
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1391 if (FRAME_DESIRED_GLYPHS (selected_frame)->enable[FRAME_HEIGHT (selected_frame) - 1])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 abort ();
13105
a9efbc138c23 (get_display_line): Don't abort if there's text
Richard M. Stallman <rms@gnu.org>
parents: 12917
diff changeset
1393 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1395
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 /* Decide what insert/delete line to do, and do it */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 extern void scrolling_1 ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1400 scrolling (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1401 FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 int unchanged_at_top, unchanged_at_bottom;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 int window_size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405 int changed_lines;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1406 int *old_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1407 int *new_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1408 int *draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
10259
48e4dfc6bb43 (scrolling): Fewer restrictions if scroll_region_ok is
Richard M. Stallman <rms@gnu.org>
parents: 10122
diff changeset
1409 int *old_draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 register int i;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1411 int free_at_end_vpos = FRAME_HEIGHT (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1412 register struct frame_glyphs *current_frame = FRAME_CURRENT_GLYPHS (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1413 register struct frame_glyphs *desired_frame = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415 /* Compute hash codes of all the lines.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 Also calculate number of changed lines,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 number of unchanged lines at the beginning,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 and number of unchanged lines at the end. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 changed_lines = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 unchanged_at_top = 0;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1422 unchanged_at_bottom = FRAME_HEIGHT (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1423 for (i = 0; i < FRAME_HEIGHT (frame); i++)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 /* Give up on this scrolling if some old lines are not enabled. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1426 if (!current_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 return 0;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1428 old_hash[i] = line_hash_code (current_frame, i);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1429 if (! desired_frame->enable[i])
18015
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1430 {
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1431 /* This line cannot be redrawn, so don't let scrolling mess it. */
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1432 new_hash[i] = old_hash[i];
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1433 #define INFINITY 1000000 /* Taken from scroll.c */
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1434 draw_cost[i] = INFINITY;
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1435 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 else
18015
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1437 {
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1438 new_hash[i] = line_hash_code (desired_frame, i);
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1439 draw_cost[i] = line_draw_cost (desired_frame, i);
934a44a3b34f (scrolling): If a line is not enabled,
Richard M. Stallman <rms@gnu.org>
parents: 17961
diff changeset
1440 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 if (old_hash[i] != new_hash[i])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 changed_lines++;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1445 unchanged_at_bottom = FRAME_HEIGHT (frame) - i - 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 else if (i == unchanged_at_top)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448 unchanged_at_top++;
10259
48e4dfc6bb43 (scrolling): Fewer restrictions if scroll_region_ok is
Richard M. Stallman <rms@gnu.org>
parents: 10122
diff changeset
1449 old_draw_cost[i] = line_draw_cost (current_frame, i);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452 /* If changed lines are few, don't allow preemption, don't scroll. */
10259
48e4dfc6bb43 (scrolling): Fewer restrictions if scroll_region_ok is
Richard M. Stallman <rms@gnu.org>
parents: 10122
diff changeset
1453 if (!scroll_region_ok && changed_lines < baud_rate / 2400
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1454 || unchanged_at_bottom == FRAME_HEIGHT (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1455 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1457 window_size = (FRAME_HEIGHT (frame) - unchanged_at_top
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 - unchanged_at_bottom);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 if (scroll_region_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 free_at_end_vpos -= unchanged_at_bottom;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1462 else if (memory_below_frame)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 free_at_end_vpos = -1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 /* If large window, fast terminal and few lines in common between
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1466 current frame and desired frame, don't bother with i/d calc. */
10259
48e4dfc6bb43 (scrolling): Fewer restrictions if scroll_region_ok is
Richard M. Stallman <rms@gnu.org>
parents: 10122
diff changeset
1467 if (!scroll_region_ok && window_size >= 18 && baud_rate > 2400
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 && (window_size >=
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 10 * scrolling_max_lines_saved (unchanged_at_top,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1470 FRAME_HEIGHT (frame) - unchanged_at_bottom,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471 old_hash, new_hash, draw_cost)))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1474 scrolling_1 (frame, window_size, unchanged_at_top, unchanged_at_bottom,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475 draw_cost + unchanged_at_top - 1,
10259
48e4dfc6bb43 (scrolling): Fewer restrictions if scroll_region_ok is
Richard M. Stallman <rms@gnu.org>
parents: 10122
diff changeset
1476 old_draw_cost + unchanged_at_top - 1,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 old_hash + unchanged_at_top - 1,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 new_hash + unchanged_at_top - 1,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 free_at_end_vpos - unchanged_at_top);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 /* Return the offset in its buffer of the character at location col, line
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 in the given window. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 buffer_posn_from_coords (window, col, line)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 struct window *window;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 int col, line;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 {
5885
b649c51e3f6b (buffer_posn_from_coords): Take hscroll into account.
Karl Heuer <kwzh@gnu.org>
parents: 5619
diff changeset
1491 int hscroll = XINT (window->hscroll);
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
1492 int window_left = WINDOW_LEFT_MARGIN (window);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 /* The actual width of the window is window->width less one for the
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1495 DISP_CONTINUE_GLYPH, and less one if it's not the rightmost
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1496 window. */
1777
4edfaa19c7a7 * window.c (window_internal_width): New function.
Jim Blandy <jimb@redhat.com>
parents: 1766
diff changeset
1497 int window_width = window_internal_width (window) - 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1499 int startp = marker_position (window->start);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 /* Since compute_motion will only operate on the current buffer,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 we need to save the old one and restore it when we're done. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 struct buffer *old_current_buffer = current_buffer;
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1504 struct position *posn;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1506 current_buffer = XBUFFER (window->buffer);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507
11858
343ec791e9be (buffer_posn_from_coords): Don't let startp be before BEGV.
Karl Heuer <kwzh@gnu.org>
parents: 11851
diff changeset
1508 /* We can't get a correct result in this case,
343ec791e9be (buffer_posn_from_coords): Don't let startp be before BEGV.
Karl Heuer <kwzh@gnu.org>
parents: 11851
diff changeset
1509 but at least prevent compute_motion from crashing. */
343ec791e9be (buffer_posn_from_coords): Don't let startp be before BEGV.
Karl Heuer <kwzh@gnu.org>
parents: 11851
diff changeset
1510 if (startp < BEGV)
343ec791e9be (buffer_posn_from_coords): Don't let startp be before BEGV.
Karl Heuer <kwzh@gnu.org>
parents: 11851
diff changeset
1511 startp = BEGV;
343ec791e9be (buffer_posn_from_coords): Don't let startp be before BEGV.
Karl Heuer <kwzh@gnu.org>
parents: 11851
diff changeset
1512
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1513 /* It would be nice if we could use FRAME_CURRENT_GLYPHS (XFRAME
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1514 (window->frame))->bufp to avoid scanning from the very top of
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1515 the window, but it isn't maintained correctly, and I'm not even
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1516 sure I will keep it. */
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1517 posn = compute_motion (startp, 0,
11851
b90c2cdd9627 (buffer_posn_from_coords): New arg to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents: 11795
diff changeset
1518 ((window == XWINDOW (minibuf_window) && startp == BEG
b90c2cdd9627 (buffer_posn_from_coords): New arg to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents: 11795
diff changeset
1519 ? minibuf_prompt_width : 0)
b90c2cdd9627 (buffer_posn_from_coords): New arg to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents: 11795
diff changeset
1520 + (hscroll ? 1 - hscroll : 0)),
b90c2cdd9627 (buffer_posn_from_coords): New arg to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents: 11795
diff changeset
1521 0,
3317
55066d2375b6 (buffer_posn_from_coords): Since COL is already
Richard M. Stallman <rms@gnu.org>
parents: 3192
diff changeset
1522 ZV, line, col,
6692
43a79400a664 Add window argument on calls to compute_motion.
Karl Heuer <kwzh@gnu.org>
parents: 6682
diff changeset
1523 window_width, hscroll, 0, window);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 current_buffer = old_current_buffer;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1527 /* compute_motion considers frame points past the end of a line
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1528 to be *after* the newline, i.e. at the start of the next line.
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1529 This is reasonable, but not really what we want. So if the
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1530 result is on a line below LINE, back it up one character. */
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1531 if (posn->vpos > line)
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1532 return posn->bufpos - 1;
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1533 else
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1534 return posn->bufpos;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 static int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 count_blanks (r)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 register GLYPH *r;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 register GLYPH *p = r;
1495
f17665e7347e (count_blanks): Leave argument r constant, and increment p.
Richard M. Stallman <rms@gnu.org>
parents: 1407
diff changeset
1542 while (*p++ == SPACEGLYPH);
f17665e7347e (count_blanks): Leave argument r constant, and increment p.
Richard M. Stallman <rms@gnu.org>
parents: 1407
diff changeset
1543 return p - r - 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 static int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 count_match (str1, str2)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 GLYPH *str1, *str2;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 register GLYPH *p1 = str1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 register GLYPH *p2 = str2;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 while (*p1++ == *p2++);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 return p1 - str1 - 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1555
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1556 /* Char insertion/deletion cost vector, from term.c */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1557 extern int *char_ins_del_vector;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1558
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
1559 #define char_ins_del_cost(f) (&char_ins_del_vector[FRAME_WINDOW_WIDTH((f))])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 static void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1562 update_line (frame, vpos)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1563 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 register GLYPH *obody, *nbody, *op1, *op2, *np1, *temp;
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1567 int *temp1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 int tem;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 int osp, nsp, begmatch, endmatch, olen, nlen;
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1570 GLYPH save;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1571 register struct frame_glyphs *current_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1572 = FRAME_CURRENT_GLYPHS (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1573 register struct frame_glyphs *desired_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1574 = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1576 if (desired_frame->highlight[vpos]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1577 != (current_frame->enable[vpos] && current_frame->highlight[vpos]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1579 change_line_highlight (desired_frame->highlight[vpos], vpos,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1580 (current_frame->enable[vpos] ?
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1581 current_frame->used[vpos] : 0));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1582 current_frame->enable[vpos] = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1583 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1585 reassert_line_highlight (desired_frame->highlight[vpos], vpos);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1587 if (! current_frame->enable[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589 olen = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1590 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1592 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1593 obody = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1594 olen = current_frame->used[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1595 if (! current_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 if (!must_write_spaces)
13448
89f89cadc30d (update_line): Avoid indexing into obody by -1.
Richard M. Stallman <rms@gnu.org>
parents: 13408
diff changeset
1598 while (olen > 0 && obody[olen - 1] == SPACEGLYPH)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 olen--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1601 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1603 /* For an inverse-video line, remember we gave it
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1604 spaces all the way to the frame edge
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1605 so that the reverse video extends all the way across. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
1607 while (olen < FRAME_WINDOW_WIDTH (frame) - 1)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 obody[olen++] = SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612 /* One way or another, this will enable the line being updated. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1613 current_frame->enable[vpos] = 1;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1614 current_frame->used[vpos] = desired_frame->used[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1615 current_frame->highlight[vpos] = desired_frame->highlight[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1616 current_frame->bufp[vpos] = desired_frame->bufp[vpos];
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1618 #ifdef HAVE_WINDOW_SYSTEM
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1619 if (FRAME_WINDOW_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1621 current_frame->pix_width[vpos]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1622 = current_frame->used[vpos]
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1623 * FONT_WIDTH (FRAME_FONT (frame));
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1624 current_frame->pix_height[vpos]
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1625 = FRAME_LINE_HEIGHT (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 }
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
1627 #endif /* HAVE_WINDOW_SYSTEM */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1629 if (!desired_frame->enable[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1631 nlen = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 goto just_erase;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1634
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1635 nbody = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1636 nlen = desired_frame->used[vpos];
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1637
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638 /* Pretend trailing spaces are not there at all,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 unless for one reason or another we must write all spaces. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1640 if (! desired_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 if (!must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 /* We know that the previous character byte contains 0. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 while (nbody[nlen - 1] == SPACEGLYPH)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645 nlen--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1646 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1647 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1649 /* For an inverse-video line, give it extra trailing spaces
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1650 all the way to the frame edge
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1651 so that the reverse video extends all the way across. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1652
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
1653 while (nlen < FRAME_WINDOW_WIDTH (frame) - 1)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654 nbody[nlen++] = SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1656
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 /* If there's no i/d char, quickly do the best we can without it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 if (!char_ins_del_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1659 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 int i,j;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661
4276
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1662 #if 0
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1663 if (FRAME_X_P (frame))
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1664 {
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1665 /* Under X, erase everything we are going to rewrite,
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1666 and rewrite everything from the first char that's changed.
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1667 This is part of supporting fonts like Courier
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1668 whose chars can overlap outside the char width. */
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1669 for (i = 0; i < nlen; i++)
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1670 if (i >= olen || nbody[i] != obody[i])
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1671 break;
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1672
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1673 cursor_to (vpos, i);
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1674 if (i != olen)
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1675 clear_end_of_line (olen);
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1676 write_glyphs (nbody + i, nlen - i);
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1677 }
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1678 else
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1679 {}
2298d2aff61c Commented-out code added.
Richard M. Stallman <rms@gnu.org>
parents: 4134
diff changeset
1680 #endif /* 0 */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 for (i = 0; i < nlen; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1683 if (i >= olen || nbody[i] != obody[i]) /* A non-matching char. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1685 cursor_to (vpos, i);
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1686 for (j = 1;
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1687 (i + j < nlen
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1688 && (i + j >= olen || nbody[i + j] != obody[i + j]
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1689 || (nbody[i + j] & GLYPH_MASK_PADDING)));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1690 j++);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1691
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1692 /* Output this run of non-matching chars. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693 write_glyphs (nbody + i, j);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 i += j - 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1696 /* Now find the next non-match. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 /* Clear the rest of the line, or the non-clear part of it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 if (olen > nlen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703 cursor_to (vpos, nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 clear_end_of_line (olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1705 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1707 /* Exchange contents between current_frame and new_frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1708 temp = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1709 desired_frame->glyphs[vpos] = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1710 current_frame->glyphs[vpos] = temp;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1712 /* Exchange charstarts between current_frame and new_frame. */
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1713 temp1 = desired_frame->charstarts[vpos];
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1714 desired_frame->charstarts[vpos] = current_frame->charstarts[vpos];
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1715 current_frame->charstarts[vpos] = temp1;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1716
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1719
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 if (!olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1722 nsp = (must_write_spaces || desired_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 ? 0 : count_blanks (nbody);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 if (nlen > nsp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 cursor_to (vpos, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 write_glyphs (nbody + nsp, nlen - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1730 /* Exchange contents between current_frame and new_frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1731 temp = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1732 desired_frame->glyphs[vpos] = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1733 current_frame->glyphs[vpos] = temp;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1734
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1735 /* Exchange charstarts between current_frame and new_frame. */
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1736 temp1 = desired_frame->charstarts[vpos];
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1737 desired_frame->charstarts[vpos] = current_frame->charstarts[vpos];
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1738 current_frame->charstarts[vpos] = temp1;
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1739
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 obody[olen] = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 save = nbody[nlen];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 nbody[nlen] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 /* Compute number of leading blanks in old and new contents. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 osp = count_blanks (obody);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1749 if (!desired_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 nsp = count_blanks (nbody);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 nsp = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 /* Compute number of matching chars starting with first nonblank. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 begmatch = count_match (obody + osp, nbody + nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 /* Spaces in new match implicit space past the end of old. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 /* A bug causing this to be a no-op was fixed in 18.29. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 if (!must_write_spaces && osp + begmatch == olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 np1 = nbody + nsp;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1762 while (np1[begmatch] == SPACEGLYPH)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 begmatch++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1764 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1765
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1766 /* Avoid doing insert/delete char
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1767 just cause number of leading spaces differs
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 when the following text does not match. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 if (begmatch == 0 && osp != nsp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 osp = nsp = min (osp, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772 /* Find matching characters at end of line */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773 op1 = obody + olen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 np1 = nbody + nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775 op2 = op1 + begmatch - min (olen - osp, nlen - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 while (op1 > op2 && op1[-1] == np1[-1])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 op1--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 np1--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 endmatch = obody + olen - op1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 /* Put correct value back in nbody[nlen].
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 This is important because direct_output_for_insert
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 can write into the line at a later point.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786 If this screws up the zero at the end of the line, re-establish it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 nbody[nlen] = save;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 obody[olen] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 /* tem gets the distance to insert or delete.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1791 endmatch is how many characters we save by doing so.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1792 Is it worth it? */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 tem = (nlen - nsp) - (olen - osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 if (endmatch && tem
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1796 && (!char_ins_del_ok || endmatch <= char_ins_del_cost (frame)[tem]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1797 endmatch = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1798
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 /* nsp - osp is the distance to insert or delete.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 If that is nonzero, begmatch is known to be nonzero also.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801 begmatch + endmatch is how much we save by doing the ins/del.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1802 Is it worth it? */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1804 if (nsp != osp
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1805 && (!char_ins_del_ok
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1806 || begmatch + endmatch <= char_ins_del_cost (frame)[nsp - osp]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 begmatch = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 endmatch = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 osp = nsp = min (osp, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1812
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1813 /* Now go through the line, inserting, writing and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1814 deleting as appropriate. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1815
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1816 if (osp > nsp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1817 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1818 cursor_to (vpos, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1819 delete_glyphs (osp - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821 else if (nsp > osp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 /* If going to delete chars later in line
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 and insert earlier in the line,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 must delete first to avoid losing data in the insert */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 if (endmatch && nlen < olen + nsp - osp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828 cursor_to (vpos, nlen - endmatch + osp - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 delete_glyphs (olen + nsp - osp - nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1830 olen = nlen - (nsp - osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1831 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1832 cursor_to (vpos, osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1833 insert_glyphs ((char *)0, nsp - osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 olen += nsp - osp;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1836
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1837 tem = nsp + begmatch + endmatch;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1838 if (nlen != tem || olen != tem)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1839 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840 cursor_to (vpos, nsp + begmatch);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 if (!endmatch || nlen == olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 /* If new text being written reaches right margin,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 there is no need to do clear-to-eol at the end.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 (and it would not be safe, since cursor is not
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846 going to be "at the margin" after the text is done) */
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
1847 if (nlen == FRAME_WINDOW_WIDTH (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 olen = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849 write_glyphs (nbody + nsp + begmatch, nlen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 #ifdef obsolete
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1853 /* the following code loses disastrously if tem == nlen.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1854 Rather than trying to fix that case, I am trying the simpler
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1855 solution found above. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1856
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1857 /* If the text reaches to the right margin,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1858 it will lose one way or another (depending on AutoWrap)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1859 to clear to end of line after outputting all the text.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1860 So pause with one character to go and clear the line then. */
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
1861 if (nlen == FRAME_WINDOW_WIDTH (frame) && fast_clear_end_of_line && olen > nlen)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1863 /* endmatch must be zero, and tem must equal nsp + begmatch */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864 write_glyphs (nbody + tem, nlen - tem - 1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 clear_end_of_line (olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 olen = 0; /* Don't let it be cleared again later */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1867 write_glyphs (nbody + nlen - 1, 1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1868 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870 write_glyphs (nbody + nsp + begmatch, nlen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1871 #endif /* OBSOLETE */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1872
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1873 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 else if (nlen > olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 {
17015
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1876 /* Here, we used to have the following simple code:
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1877 ----------------------------------------
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1878 write_glyphs (nbody + nsp + begmatch, olen - tem);
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1879 insert_glyphs (nbody + nsp + begmatch + olen - tem, nlen - olen);
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1880 ----------------------------------------
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1881 but it doesn't work if nbody[nsp + begmatch + olen - tem]
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1882 is a padding glyph. */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1883 int out = olen - tem; /* Columns to be overwritten originally. */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1884 int del;
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1885
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1886 /* Calculate columns we can actually overwrite. */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1887 while (nbody[nsp + begmatch + out] & GLYPH_MASK_PADDING) out--;
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1888 write_glyphs (nbody + nsp + begmatch, out);
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1889 /* If we left columns to be overwritten. we must delete them. */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1890 del = olen - tem - out;
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1891 if (del > 0) delete_glyphs (del);
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1892 /* At last, we insert columns not yet written out. */
fe0b3661b584 (direct_output_forward_char): #if-0-out redundant
Karl Heuer <kwzh@gnu.org>
parents: 16896
diff changeset
1893 insert_glyphs (nbody + nsp + begmatch + out, nlen - olen + del);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1894 olen = nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1895 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 else if (olen > nlen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1897 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 write_glyphs (nbody + nsp + begmatch, nlen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899 delete_glyphs (olen - nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 olen = nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1901 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 just_erase:
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905 /* If any unerased characters remain after the new line, erase them. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1906 if (olen > nlen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1907 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1908 cursor_to (vpos, nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1909 clear_end_of_line (olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1910 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1911
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1912 /* Exchange contents between current_frame and new_frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1913 temp = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1914 desired_frame->glyphs[vpos] = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1915 current_frame->glyphs[vpos] = temp;
6617
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1916
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1917 /* Exchange charstarts between current_frame and new_frame. */
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1918 temp1 = desired_frame->charstarts[vpos];
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1919 desired_frame->charstarts[vpos] = current_frame->charstarts[vpos];
6309d97ee4bc (scroll_frame_lines): Handle charstarts like glyphs.
Richard M. Stallman <rms@gnu.org>
parents: 6414
diff changeset
1920 current_frame->charstarts[vpos] = temp1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1921 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1922
12193
26ec7360f078 Comment update.
Karl Heuer <kwzh@gnu.org>
parents: 12186
diff changeset
1923 /* A vector of size >= 2 * NFRAMES + 3 * NBUFFERS + 1, containing the
26ec7360f078 Comment update.
Karl Heuer <kwzh@gnu.org>
parents: 12186
diff changeset
1924 session's frames, frame names, buffers, buffer-read-only flags, and
26ec7360f078 Comment update.
Karl Heuer <kwzh@gnu.org>
parents: 12186
diff changeset
1925 buffer-modified-flags, and a trailing sentinel (so we don't need to
26ec7360f078 Comment update.
Karl Heuer <kwzh@gnu.org>
parents: 12186
diff changeset
1926 add length checks). */
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1927 static Lisp_Object frame_and_buffer_state;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1928
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1929 DEFUN ("frame-or-buffer-changed-p", Fframe_or_buffer_changed_p,
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1930 Sframe_or_buffer_changed_p, 0, 0, 0,
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1931 "Return non-nil if the frame and buffer state appears to have changed.\n\
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1932 The state variable is an internal vector containing all frames and buffers,\n\
11411
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1933 aside from buffers whose names start with space,\n\
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1934 along with the buffers' read-only and modified flags, which allows a fast\n\
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1935 check to see whether the menu bars might need to be recomputed.\n\
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1936 If this function returns non-nil, it updates the internal vector to reflect\n\
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1937 the current state.\n")
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1938 ()
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1939 {
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1940 Lisp_Object tail, frame, buf;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1941 Lisp_Object *vecp;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1942 int n;
11919
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1943
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1944 vecp = XVECTOR (frame_and_buffer_state)->contents;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1945 FOR_EACH_FRAME (tail, frame)
11919
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1946 {
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1947 if (!EQ (*vecp++, frame))
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1948 goto changed;
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1949 if (!EQ (*vecp++, XFRAME (frame)->name))
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1950 goto changed;
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1951 }
9650
4295137050dd (Fframe_or_buffer_changed_p):
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
1952 /* Check that the buffer info matches.
4295137050dd (Fframe_or_buffer_changed_p):
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
1953 No need to test for the end of the vector
4295137050dd (Fframe_or_buffer_changed_p):
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
1954 because the last element of the vector is lambda
4295137050dd (Fframe_or_buffer_changed_p):
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
1955 and that will always cause a mismatch. */
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1956 for (tail = Vbuffer_alist; CONSP (tail); tail = XCONS (tail)->cdr)
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1957 {
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1958 buf = XCONS (XCONS (tail)->car)->cdr;
11411
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1959 /* Ignore buffers that aren't included in buffer lists. */
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1960 if (XSTRING (XBUFFER (buf)->name)->data[0] == ' ')
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1961 continue;
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1962 if (!EQ (*vecp++, buf))
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1963 goto changed;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1964 if (!EQ (*vecp++, XBUFFER (buf)->read_only))
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1965 goto changed;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1966 if (!EQ (*vecp++, Fbuffer_modified_p (buf)))
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1967 goto changed;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1968 }
9650
4295137050dd (Fframe_or_buffer_changed_p):
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
1969 /* Detect deletion of a buffer at the end of the list. */
17360
3dd1b4cc865b (Fframe_or_buffer_changed_p): Use EQ, not ==.
Karl Heuer <kwzh@gnu.org>
parents: 17282
diff changeset
1970 if (EQ (*vecp, Qlambda))
9650
4295137050dd (Fframe_or_buffer_changed_p):
Richard M. Stallman <rms@gnu.org>
parents: 9572
diff changeset
1971 return Qnil;
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1972 changed:
9963
e95b3647fb26 Fix typo in comment.
Karl Heuer <kwzh@gnu.org>
parents: 9650
diff changeset
1973 /* Start with 1 so there is room for at least one lambda at the end. */
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1974 n = 1;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1975 FOR_EACH_FRAME (tail, frame)
12186
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
1976 n += 2;
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1977 for (tail = Vbuffer_alist; CONSP (tail); tail = XCONS (tail)->cdr)
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1978 n += 3;
7814
e1e536773850 (Fframe_or_buffer_changed_p): Reuse the state vector.
Karl Heuer <kwzh@gnu.org>
parents: 7810
diff changeset
1979 /* Reallocate the vector if it's grown, or if it's shrunk a lot. */
e1e536773850 (Fframe_or_buffer_changed_p): Reuse the state vector.
Karl Heuer <kwzh@gnu.org>
parents: 7810
diff changeset
1980 if (n > XVECTOR (frame_and_buffer_state)->size
12186
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
1981 || n + 20 < XVECTOR (frame_and_buffer_state)->size / 2)
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
1982 /* Add 20 extra so we grow it less often. */
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
1983 frame_and_buffer_state = Fmake_vector (make_number (n + 20), Qlambda);
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1984 vecp = XVECTOR (frame_and_buffer_state)->contents;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1985 FOR_EACH_FRAME (tail, frame)
11919
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1986 {
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1987 *vecp++ = frame;
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1988 *vecp++ = XFRAME (frame)->name;
31cb053405f2 (Fframe_or_buffer_changed_p): Record frame names
Karl Heuer <kwzh@gnu.org>
parents: 11914
diff changeset
1989 }
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1990 for (tail = Vbuffer_alist; CONSP (tail); tail = XCONS (tail)->cdr)
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1991 {
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1992 buf = XCONS (XCONS (tail)->car)->cdr;
11411
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1993 /* Ignore buffers that aren't included in buffer lists. */
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1994 if (XSTRING (XBUFFER (buf)->name)->data[0] == ' ')
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
1995 continue;
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1996 *vecp++ = buf;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1997 *vecp++ = XBUFFER (buf)->read_only;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1998 *vecp++ = Fbuffer_modified_p (buf);
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
1999 }
12186
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2000 /* Fill up the vector with lambdas (always at least one). */
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2001 *vecp++ = Qlambda;
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2002 while (vecp - XVECTOR (frame_and_buffer_state)->contents
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2003 < XVECTOR (frame_and_buffer_state)->size)
7814
e1e536773850 (Fframe_or_buffer_changed_p): Reuse the state vector.
Karl Heuer <kwzh@gnu.org>
parents: 7810
diff changeset
2004 *vecp++ = Qlambda;
12186
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2005 /* Make sure we didn't overflow the vector. */
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2006 if (vecp - XVECTOR (frame_and_buffer_state)->contents
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2007 > XVECTOR (frame_and_buffer_state)->size)
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2008 abort ();
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
2009 return Qt;
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
2010 }
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
2011
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 DEFUN ("open-termscript", Fopen_termscript, Sopen_termscript,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 1, 1, "FOpen termscript file: ",
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 "Start writing all terminal output to FILE as well as the terminal.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015 FILE = nil means just close any termscript file currently open.")
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2016 (file)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 Lisp_Object file;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019 if (termscript != 0) fclose (termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2020 termscript = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
2022 if (! NILP (file))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 file = Fexpand_file_name (file, Qnil);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 termscript = fopen (XSTRING (file)->data, "w");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026 if (termscript == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 report_file_error ("Opening termscript", Fcons (file, Qnil));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033 #ifdef SIGWINCH
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
2034 SIGTYPE
10745
a553a08f5785 (window_change_signal): Add ignored argument.
Richard M. Stallman <rms@gnu.org>
parents: 10259
diff changeset
2035 window_change_signal (signalnum) /* If we don't have an argument, */
a553a08f5785 (window_change_signal): Add ignored argument.
Richard M. Stallman <rms@gnu.org>
parents: 10259
diff changeset
2036 int signalnum; /* some compilers complain in signal calls. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038 int width, height;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2039 extern int errno;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2040 int old_errno = errno;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2042 get_frame_size (&width, &height);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2043
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2044 /* The frame size change obviously applies to a termcap-controlled
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2045 frame. Find such a frame in the list, and assume it's the only
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 one (since the redisplay code always writes to stdout, not a
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2047 FILE * specified in the frame structure). Record the new size,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 but don't reallocate the data structures now. Let that be done
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 later outside of the signal handler. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 {
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2052 Lisp_Object tail, frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2054 FOR_EACH_FRAME (tail, frame)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 {
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2056 if (FRAME_TERMCAP_P (XFRAME (frame)))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2057 {
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2058 change_frame_size (XFRAME (frame), height, width, 0, 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 signal (SIGWINCH, window_change_signal);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2065 errno = old_errno;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067 #endif /* SIGWINCH */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2070 /* Do any change in frame size that was requested by a signal. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2071
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 do_pending_window_change ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2074 /* If window_change_signal should have run before, run it now. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 while (delayed_size_change)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2076 {
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2077 Lisp_Object tail, frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2078
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 delayed_size_change = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2081 FOR_EACH_FRAME (tail, frame)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 {
2252
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2083 FRAME_PTR f = XFRAME (frame);
9793d8654e23 * frame.h (FOR_EACH_FRAME): Change the definition so that
Jim Blandy <jimb@redhat.com>
parents: 2198
diff changeset
2084
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2085 int height = FRAME_NEW_HEIGHT (f);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2086 int width = FRAME_NEW_WIDTH (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087
3449
ad455da9b789 (do_pending_window_change): No need to clear
Richard M. Stallman <rms@gnu.org>
parents: 3357
diff changeset
2088 if (height != 0 || width != 0)
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2089 change_frame_size (f, height, width, 0, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2095 /* Change the frame height and/or width. Values may be given as zero to
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2096 indicate no change is to take place.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2098 If DELAY is non-zero, then assume we're being called from a signal
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2099 handler, and queue the change for later - perhaps the next
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2100 redisplay. Since this tries to resize windows, we can't call it
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2101 from a signal handler. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2102
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2103 change_frame_size (f, newheight, newwidth, pretend, delay)
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2104 register FRAME_PTR f;
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2105 int newheight, newwidth, pretend;
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2106 {
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2107 Lisp_Object tail, frame;
16881
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2108
15395
b584c2db055f (change_frame_size, remake_frame_glyphs): Use FRAME_WINDOW_P.
Richard M. Stallman <rms@gnu.org>
parents: 15394
diff changeset
2109 if (! FRAME_WINDOW_P (f))
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2110 {
15394
8d01f71c4797 (Fredraw_frame, remake_frame_glyphs)
Richard M. Stallman <rms@gnu.org>
parents: 15282
diff changeset
2111 /* When using termcap, or on MS-DOS, all frames use
8d01f71c4797 (Fredraw_frame, remake_frame_glyphs)
Richard M. Stallman <rms@gnu.org>
parents: 15282
diff changeset
2112 the same screen, so a change in size affects all frames. */
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2113 FOR_EACH_FRAME (tail, frame)
15395
b584c2db055f (change_frame_size, remake_frame_glyphs): Use FRAME_WINDOW_P.
Richard M. Stallman <rms@gnu.org>
parents: 15394
diff changeset
2114 if (! FRAME_WINDOW_P (XFRAME (frame)))
10770
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2115 change_frame_size_1 (XFRAME (frame), newheight, newwidth,
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2116 pretend, delay);
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2117 }
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2118 else
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2119 change_frame_size_1 (f, newheight, newwidth, pretend, delay);
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2120 }
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2121
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2122 static void
79745e047484 (change_frame_size_1): New subroutine.
Richard M. Stallman <rms@gnu.org>
parents: 10745
diff changeset
2123 change_frame_size_1 (frame, newheight, newwidth, pretend, delay)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2124 register FRAME_PTR frame;
11914
b1a014bdd22c (change_frame_size_1): Declare arg DELAY.
Karl Heuer <kwzh@gnu.org>
parents: 11858
diff changeset
2125 int newheight, newwidth, pretend, delay;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2126 {
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2127 int new_frame_window_width;
16881
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2128 unsigned int total_glyphs;
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2129
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2130 /* If we can't deal with the change now, queue it for later. */
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2131 if (delay)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2132 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2133 FRAME_NEW_HEIGHT (frame) = newheight;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2134 FRAME_NEW_WIDTH (frame) = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2135 delayed_size_change = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2136 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2137 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2138
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2139 /* This size-change overrides any pending one for this frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2140 FRAME_NEW_HEIGHT (frame) = 0;
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2141 FRAME_NEW_WIDTH (frame) = 0;
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2142
3449
ad455da9b789 (do_pending_window_change): No need to clear
Richard M. Stallman <rms@gnu.org>
parents: 3357
diff changeset
2143 /* If an argument is zero, set it to the current value. */
15896
3a3c30116313 (change_frame_size_1): Clean up conditional.
Erik Naggum <erik@naggum.no>
parents: 15687
diff changeset
2144 if (newheight == 0)
3a3c30116313 (change_frame_size_1): Clean up conditional.
Erik Naggum <erik@naggum.no>
parents: 15687
diff changeset
2145 newheight = FRAME_HEIGHT (frame);
3a3c30116313 (change_frame_size_1): Clean up conditional.
Erik Naggum <erik@naggum.no>
parents: 15687
diff changeset
2146 if (newwidth == 0)
3a3c30116313 (change_frame_size_1): Clean up conditional.
Erik Naggum <erik@naggum.no>
parents: 15687
diff changeset
2147 newwidth = FRAME_WIDTH (frame);
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2148 new_frame_window_width = FRAME_WINDOW_WIDTH_ARG (frame, newwidth);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2149
16881
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2150 total_glyphs = newheight * (newwidth + 2) * sizeof (GLYPH);
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2151
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2152 /* If these sizes are so big they cause overflow,
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2153 just ignore the change. It's not clear what better we could do. */
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2154 if (total_glyphs / sizeof (GLYPH) / newheight != newwidth + 2)
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2155 return;
245ba9f2781a (change_frame_size_1): Reject new sizes if they cause overflow.
Richard M. Stallman <rms@gnu.org>
parents: 16822
diff changeset
2156
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2157 /* Round up to the smallest acceptable size. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2158 check_frame_size (frame, &newheight, &newwidth);
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2159
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2160 /* If we're not changing the frame size, quit now. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2161 if (newheight == FRAME_HEIGHT (frame)
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2162 && new_frame_window_width == FRAME_WINDOW_WIDTH (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2163 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2164
15078
a295c26b5d67 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 15065
diff changeset
2165 BLOCK_INPUT;
a295c26b5d67 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 15065
diff changeset
2166
14286
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2167 #ifdef MSDOS
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2168 /* We only can set screen dimensions to certain values supported
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2169 by our video hardware. Try to find the smallest size greater
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2170 or equal to the requested dimensions. */
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2171 dos_set_window_size (&newheight, &newwidth);
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2172 #endif
5d42664b4e74 (change_frame_size_1) [MSDOS]: Support frame size
Karl Heuer <kwzh@gnu.org>
parents: 14186
diff changeset
2173
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2174 if (newheight != FRAME_HEIGHT (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2175 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2176 if (FRAME_HAS_MINIBUF_P (frame)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2177 && ! FRAME_MINIBUF_ONLY_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2178 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2179 /* Frame has both root and minibuffer. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2180 set_window_height (FRAME_ROOT_WINDOW (frame),
2132
0f4b18efebf5 (change_frame_size): Handle FRAME_MENU_BAR_LINES.
Richard M. Stallman <rms@gnu.org>
parents: 1915
diff changeset
2181 newheight - 1 - FRAME_MENU_BAR_LINES (frame), 0);
9303
3115ae493c30 (direct_output_for_insert, direct_output_forward_char, change_frame_size,
Karl Heuer <kwzh@gnu.org>
parents: 9264
diff changeset
2182 XSETFASTINT (XWINDOW (FRAME_MINIBUF_WINDOW (frame))->top,
3115ae493c30 (direct_output_for_insert, direct_output_forward_char, change_frame_size,
Karl Heuer <kwzh@gnu.org>
parents: 9264
diff changeset
2183 newheight - 1);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2184 set_window_height (FRAME_MINIBUF_WINDOW (frame), 1, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2185 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2186 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2187 /* Frame has just one top-level window. */
2132
0f4b18efebf5 (change_frame_size): Handle FRAME_MENU_BAR_LINES.
Richard M. Stallman <rms@gnu.org>
parents: 1915
diff changeset
2188 set_window_height (FRAME_ROOT_WINDOW (frame),
0f4b18efebf5 (change_frame_size): Handle FRAME_MENU_BAR_LINES.
Richard M. Stallman <rms@gnu.org>
parents: 1915
diff changeset
2189 newheight - FRAME_MENU_BAR_LINES (frame), 0);
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2190
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2191 if (FRAME_TERMCAP_P (frame) && !pretend)
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2192 FrameRows = newheight;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2193
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2194 #if 0
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2195 if (frame->output_method == output_termcap)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2196 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2197 frame_height = newheight;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2198 if (!pretend)
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2199 FrameRows = newheight;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2200 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2201 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2202 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2203
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2204 if (new_frame_window_width != FRAME_WINDOW_WIDTH (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2205 {
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2206 set_window_width (FRAME_ROOT_WINDOW (frame), new_frame_window_width, 0);
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2207 if (FRAME_HAS_MINIBUF_P (frame))
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2208 set_window_width (FRAME_MINIBUF_WINDOW (frame), new_frame_window_width, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2209
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2210 if (FRAME_TERMCAP_P (frame) && !pretend)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2211 FrameCols = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2212 #if 0
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2213 if (frame->output_method == output_termcap)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2214 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2215 frame_width = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2216 if (!pretend)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2217 FrameCols = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2218 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2219 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2220 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2221
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
2222 FRAME_HEIGHT (frame) = newheight;
16256
1ce0cb94fa68 (preserve_other_columns, preserve_my_columns): Use new
Richard M. Stallman <rms@gnu.org>
parents: 16195
diff changeset
2223 SET_FRAME_WIDTH (frame, newwidth);
7648
2e85e48d42da (change_frame_size): Keep cursor coords in range.
Richard M. Stallman <rms@gnu.org>
parents: 7558
diff changeset
2224
16267
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
2225 if (FRAME_CURSOR_X (frame) >= FRAME_WINDOW_WIDTH (frame))
05ca2cb9fe0f (make_frame_glyphs, update_line, update_frame)
Richard M. Stallman <rms@gnu.org>
parents: 16256
diff changeset
2226 FRAME_CURSOR_X (frame) = FRAME_WINDOW_WIDTH (frame) - 1;
7648
2e85e48d42da (change_frame_size): Keep cursor coords in range.
Richard M. Stallman <rms@gnu.org>
parents: 7558
diff changeset
2227 if (FRAME_CURSOR_Y (frame) >= FRAME_HEIGHT (frame))
2e85e48d42da (change_frame_size): Keep cursor coords in range.
Richard M. Stallman <rms@gnu.org>
parents: 7558
diff changeset
2228 FRAME_CURSOR_Y (frame) = FRAME_HEIGHT (frame) - 1;
2e85e48d42da (change_frame_size): Keep cursor coords in range.
Richard M. Stallman <rms@gnu.org>
parents: 7558
diff changeset
2229
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2230 remake_frame_glyphs (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2231 calculate_costs (frame);
15065
270020829d09 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 14964
diff changeset
2232
270020829d09 Include blockinput.h.
Richard M. Stallman <rms@gnu.org>
parents: 14964
diff changeset
2233 UNBLOCK_INPUT;
17282
5023bea28298 (change_frame_size_1): Call Fset_window_buffer,
Richard M. Stallman <rms@gnu.org>
parents: 17015
diff changeset
2234
5023bea28298 (change_frame_size_1): Call Fset_window_buffer,
Richard M. Stallman <rms@gnu.org>
parents: 17015
diff changeset
2235 /* This isn't quite a no-op: it runs window-configuration-change-hook. */
5023bea28298 (change_frame_size_1): Call Fset_window_buffer,
Richard M. Stallman <rms@gnu.org>
parents: 17015
diff changeset
2236 Fset_window_buffer (FRAME_SELECTED_WINDOW (frame),
5023bea28298 (change_frame_size_1): Call Fset_window_buffer,
Richard M. Stallman <rms@gnu.org>
parents: 17015
diff changeset
2237 XWINDOW (FRAME_SELECTED_WINDOW (frame))->buffer);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2238 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2239
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2240 DEFUN ("send-string-to-terminal", Fsend_string_to_terminal,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2241 Ssend_string_to_terminal, 1, 1, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2242 "Send STRING to the terminal without alteration.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2243 Control characters in STRING will have terminal-dependent effects.")
14068
a3c83dde295e (Fsend_string_to_terminal, Fsit_for): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13526
diff changeset
2244 (string)
a3c83dde295e (Fsend_string_to_terminal, Fsit_for): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13526
diff changeset
2245 Lisp_Object string;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2246 {
14068
a3c83dde295e (Fsend_string_to_terminal, Fsit_for): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13526
diff changeset
2247 CHECK_STRING (string, 0);
a3c83dde295e (Fsend_string_to_terminal, Fsit_for): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13526
diff changeset
2248 fwrite (XSTRING (string)->data, 1, XSTRING (string)->size, stdout);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2249 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2250 if (termscript)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2251 {
14068
a3c83dde295e (Fsend_string_to_terminal, Fsit_for): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13526
diff changeset
2252 fwrite (XSTRING (string)->data, 1, XSTRING (string)->size, termscript);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2253 fflush (termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2254 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2255 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2256 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2257
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2258 DEFUN ("ding", Fding, Sding, 0, 1, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2259 "Beep, or flash the screen.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2260 Also, unless an argument is given,\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2261 terminate any keyboard macro currently executing.")
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2262 (arg)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2263 Lisp_Object arg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2264 {
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
2265 if (!NILP (arg))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2266 {
649
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
2267 if (noninteractive)
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
2268 putchar (07);
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
2269 else
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
2270 ring_bell ();
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2271 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2272 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2273 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2274 bitch_at_user ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2275
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2276 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2277 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2278
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2279 bitch_at_user ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2280 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2281 if (noninteractive)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2282 putchar (07);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2283 else if (!INTERACTIVE) /* Stop executing a keyboard macro. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2284 error ("Keyboard macro terminated by a command ringing the bell");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2285 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2286 ring_bell ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2287 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2288 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2289
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2290 DEFUN ("sleep-for", Fsleep_for, Ssleep_for, 1, 2, 0,
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2291 "Pause, without updating display, for SECONDS seconds.\n\
2648
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2292 SECONDS may be a floating-point value, meaning that you can wait for a\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2293 fraction of a second. Optional second arg MILLISECONDS specifies an\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2294 additional wait period, in milliseconds; this may be useful if your\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2295 Emacs was built without floating point support.\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2296 \(Not all operating systems support waiting for a fraction of a second.)")
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2297 (seconds, milliseconds)
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2298 Lisp_Object seconds, milliseconds;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2299 {
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2300 int sec, usec;
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2301
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2302 if (NILP (milliseconds))
9264
9338a124ea84 (redraw_frame, Fsleep_for, sit_for, Fsit_for): Use new accessor macros instead
Karl Heuer <kwzh@gnu.org>
parents: 8903
diff changeset
2303 XSETINT (milliseconds, 0);
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2304 else
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2305 CHECK_NUMBER (milliseconds, 1);
2648
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2306 usec = XINT (milliseconds) * 1000;
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2307
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2308 #ifdef LISP_FLOAT_TYPE
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2309 {
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2310 double duration = extract_float (seconds);
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2311 sec = (int) duration;
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2312 usec += (duration - sec) * 1000000;
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2313 }
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2314 #else
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2315 CHECK_NUMBER (seconds, 0);
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2316 sec = XINT (seconds);
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2317 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2318
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2319 #ifndef EMACS_HAS_USECS
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2320 if (sec == 0 && usec != 0)
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2321 error ("millisecond `sleep-for' not supported on %s", SYSTEM_TYPE);
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2322 #endif
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2323
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2324 /* Assure that 0 <= usec < 1000000. */
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2325 if (usec < 0)
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2326 {
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2327 /* We can't rely on the rounding being correct if user is negative. */
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2328 if (-1000000 < usec)
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2329 sec--, usec += 1000000;
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2330 else
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2331 sec -= -usec / 1000000, usec = 1000000 - (-usec % 1000000);
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2332 }
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2333 else
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2334 sec += usec / 1000000, usec %= 1000000;
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2335
14646
68fe10d1abd0 (Fsleep_for): Accept sub-second intervals.
Erik Naggum <erik@naggum.no>
parents: 14459
diff changeset
2336 if (sec < 0 || (sec == 0 && usec == 0))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2337 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2338
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2339 {
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2340 Lisp_Object zero;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2341
9303
3115ae493c30 (direct_output_for_insert, direct_output_forward_char, change_frame_size,
Karl Heuer <kwzh@gnu.org>
parents: 9264
diff changeset
2342 XSETFASTINT (zero, 0);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2343 wait_reading_process_input (sec, usec, zero, 0);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2344 }
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
2345
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2346 /* We should always have wait_reading_process_input; we have a dummy
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2347 implementation for systems which don't support subprocesses. */
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2348 #if 0
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2349 /* No wait_reading_process_input */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2350 immediate_quit = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2351 QUIT;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2352
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2353 #ifdef VMS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2354 sys_sleep (sec);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2355 #else /* not VMS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2356 /* The reason this is done this way
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2357 (rather than defined (H_S) && defined (H_T))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2358 is because the VMS preprocessor doesn't grok `defined' */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2359 #ifdef HAVE_SELECT
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2360 EMACS_GET_TIME (end_time);
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2361 EMACS_SET_SECS_USECS (timeout, sec, usec);
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
2362 EMACS_ADD_TIME (end_time, end_time, timeout);
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2363
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2364 while (1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2365 {
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2366 EMACS_GET_TIME (timeout);
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2367 EMACS_SUB_TIME (timeout, end_time, timeout);
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2368 if (EMACS_TIME_NEG_P (timeout)
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
2369 || !select (1, 0, 0, 0, &timeout))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2370 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2371 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2372 #else /* not HAVE_SELECT */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2373 sleep (sec);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2374 #endif /* HAVE_SELECT */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2375 #endif /* not VMS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2376
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2377 immediate_quit = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2378 #endif /* no subprocesses */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2379
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2380 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2381 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2382
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2383 /* This is just like wait_reading_process_input, except that
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2384 it does the redisplay.
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2385
5223
db2e7e6a488e (Fsit_for): Call prepare_menu_bars.
Richard M. Stallman <rms@gnu.org>
parents: 5218
diff changeset
2386 It's also much like Fsit_for, except that it can be used for
11411
91bcce2fd486 (Fframe_or_buffer_changed_p): Ignore buffers whose names start with space.
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
2387 waiting for input as well. */
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2388
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2389 Lisp_Object
17961
86ae1679df19 (sit_for): New arg initial_display.
Richard M. Stallman <rms@gnu.org>
parents: 17895
diff changeset
2390 sit_for (sec, usec, reading, display, initial_display)
86ae1679df19 (sit_for): New arg initial_display.
Richard M. Stallman <rms@gnu.org>
parents: 17895
diff changeset
2391 int sec, usec, reading, display, initial_display;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2392 {
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2393 Lisp_Object read_kbd;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2394
14964
9938201005a3 (sit_for): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 14903
diff changeset
2395 swallow_events (display);
9938201005a3 (sit_for): Call swallow_events.
Richard M. Stallman <rms@gnu.org>
parents: 14903
diff changeset
2396
14757
99125e1e8bac (sit_for): Pass DISPLAY to detect_input_pending_run_timers.
Richard M. Stallman <rms@gnu.org>
parents: 14646
diff changeset
2397 if (detect_input_pending_run_timers (display))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2398 return Qnil;
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2399
17961
86ae1679df19 (sit_for): New arg initial_display.
Richard M. Stallman <rms@gnu.org>
parents: 17895
diff changeset
2400 if (initial_display)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2401 redisplay_preserve_echo_area ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2402
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
2403 if (sec == 0 && usec == 0)
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
2404 return Qt;
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
2405
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2406 #ifdef SIGIO
1915
98ecf99d7b1a * dispnew.c (sit_for): Pass the correct number of arguments to
Jim Blandy <jimb@redhat.com>
parents: 1872
diff changeset
2407 gobble_input (0);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2408 #endif
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2409
9264
9338a124ea84 (redraw_frame, Fsleep_for, sit_for, Fsit_for): Use new accessor macros instead
Karl Heuer <kwzh@gnu.org>
parents: 8903
diff changeset
2410 XSETINT (read_kbd, reading ? -1 : 1);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2411 wait_reading_process_input (sec, usec, read_kbd, display);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2412
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2413 return detect_input_pending () ? Qnil : Qt;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2414 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2415
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2416 DEFUN ("sit-for", Fsit_for, Ssit_for, 1, 3, 0,
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2417 "Perform redisplay, then wait for SECONDS seconds or until input is available.\n\
2648
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2418 SECONDS may be a floating-point value, meaning that you can wait for a\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2419 fraction of a second. Optional second arg MILLISECONDS specifies an\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2420 additional wait period, in milliseconds; this may be useful if your\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2421 Emacs was built without floating point support.\n\
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2422 \(Not all operating systems support waiting for a fraction of a second.)\n\
14068
a3c83dde295e (Fsend_string_to_terminal, Fsit_for): Harmonize arguments with
Erik Naggum <erik@naggum.no>
parents: 13526
diff changeset
2423 Optional third arg NODISP non-nil means don't redisplay, just wait for input.\n\
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2424 Redisplay is preempted as always if input arrives, and does not happen\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2425 if input is available before it starts.\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2426 Value is t if waited the full time with no input arriving.")
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2427 (seconds, milliseconds, nodisp)
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2428 Lisp_Object seconds, milliseconds, nodisp;
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2429 {
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2430 int sec, usec;
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2431
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2432 if (NILP (milliseconds))
9264
9338a124ea84 (redraw_frame, Fsleep_for, sit_for, Fsit_for): Use new accessor macros instead
Karl Heuer <kwzh@gnu.org>
parents: 8903
diff changeset
2433 XSETINT (milliseconds, 0);
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2434 else
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2435 CHECK_NUMBER (milliseconds, 1);
2648
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2436 usec = XINT (milliseconds) * 1000;
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2437
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2438 #ifdef LISP_FLOAT_TYPE
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2439 {
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2440 double duration = extract_float (seconds);
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2441 sec = (int) duration;
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2442 usec += (duration - sec) * 1000000;
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2443 }
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2444 #else
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2445 CHECK_NUMBER (seconds, 0);
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2446 sec = XINT (seconds);
0a8d853dfebb * systime.h: Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 2511
diff changeset
2447 #endif
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2448
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2449 #ifndef EMACS_HAS_USECS
2291
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2450 if (usec != 0 && sec == 0)
bee5c1693cac * dispnew.c (Fsleep_for): Make this take two arguments SECONDS and
Jim Blandy <jimb@redhat.com>
parents: 2288
diff changeset
2451 error ("millisecond `sit-for' not supported on %s", SYSTEM_TYPE);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2452 #endif
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2453
17961
86ae1679df19 (sit_for): New arg initial_display.
Richard M. Stallman <rms@gnu.org>
parents: 17895
diff changeset
2454 return sit_for (sec, usec, 0, NILP (nodisp), NILP (nodisp));
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
2455 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2456
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2457 char *terminal_type;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2458
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2459 /* Initialization done when Emacs fork is started, before doing stty. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2460 /* Determine terminal type and set terminal_driver */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2461 /* Then invoke its decoding routine to set up variables
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2462 in the terminal package */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2463
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2464 init_display ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2465 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2466 #ifdef HAVE_X_WINDOWS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2467 extern int display_arg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2468 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2469
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2470 meta_key = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2471 inverse_video = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2472 cursor_in_echo_area = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2473 terminal_type = (char *) 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2474
2339
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2475 /* Now is the time to initialize this; it's used by init_sys_modes
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2476 during startup. */
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2477 Vwindow_system = Qnil;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2478
2339
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2479 /* If the user wants to use a window system, we shouldn't bother
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2480 initializing the terminal. This is especially important when the
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2481 terminal is so dumb that emacs gives up before and doesn't bother
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2482 using the window system.
a302de11debf * dispnew.c (init_display): Initialize Vwindow_system.
Jim Blandy <jimb@redhat.com>
parents: 2292
diff changeset
2483
14125
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2484 If the DISPLAY environment variable is set and nonempty,
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2485 try to use X, and die with an error message if that doesn't work. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2486
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2487 #ifdef HAVE_X_WINDOWS
2359
90a5f91329f3 * dispnew.c (init_display): Get display name from environment
Jim Blandy <jimb@redhat.com>
parents: 2339
diff changeset
2488 if (! display_arg)
90a5f91329f3 * dispnew.c (init_display): Get display name from environment
Jim Blandy <jimb@redhat.com>
parents: 2339
diff changeset
2489 {
14125
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2490 char *display;
2359
90a5f91329f3 * dispnew.c (init_display): Get display name from environment
Jim Blandy <jimb@redhat.com>
parents: 2339
diff changeset
2491 #ifdef VMS
14125
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2492 display = getenv ("DECW$DISPLAY");
2359
90a5f91329f3 * dispnew.c (init_display): Get display name from environment
Jim Blandy <jimb@redhat.com>
parents: 2339
diff changeset
2493 #else
14125
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2494 display = getenv ("DISPLAY");
2359
90a5f91329f3 * dispnew.c (init_display): Get display name from environment
Jim Blandy <jimb@redhat.com>
parents: 2339
diff changeset
2495 #endif
14125
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2496
2f222e8b06f5 (init_display): Treat null string DISPLAY var like not set.
Karl Heuer <kwzh@gnu.org>
parents: 14068
diff changeset
2497 display_arg = (display != 0 && *display != 0);
2364
9a8a5570e842 Fix typo.
Jim Blandy <jimb@redhat.com>
parents: 2359
diff changeset
2498 }
2359
90a5f91329f3 * dispnew.c (init_display): Get display name from environment
Jim Blandy <jimb@redhat.com>
parents: 2339
diff changeset
2499
18774
95b4ac950a5d (init_display): Go ahead and prepare for
Richard M. Stallman <rms@gnu.org>
parents: 18015
diff changeset
2500 if (!inhibit_window_system && display_arg
95b4ac950a5d (init_display): Go ahead and prepare for
Richard M. Stallman <rms@gnu.org>
parents: 18015
diff changeset
2501 #ifndef CANNOT_DUMP
95b4ac950a5d (init_display): Go ahead and prepare for
Richard M. Stallman <rms@gnu.org>
parents: 18015
diff changeset
2502 && initialized
95b4ac950a5d (init_display): Go ahead and prepare for
Richard M. Stallman <rms@gnu.org>
parents: 18015
diff changeset
2503 #endif
95b4ac950a5d (init_display): Go ahead and prepare for
Richard M. Stallman <rms@gnu.org>
parents: 18015
diff changeset
2504 )
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2505 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2506 Vwindow_system = intern ("x");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2507 #ifdef HAVE_X11
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2508 Vwindow_system_version = make_number (11);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2509 #else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2510 Vwindow_system_version = make_number (10);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2511 #endif
15273
db889dd732a1 (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
Karl Heuer <kwzh@gnu.org>
parents: 15078
diff changeset
2512 #if defined (LINUX) && defined (HAVE_LIBNCURSES)
db889dd732a1 (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
Karl Heuer <kwzh@gnu.org>
parents: 15078
diff changeset
2513 /* In some versions of ncurses,
15282
7db3a832db9e Comment fix.
Karl Heuer <kwzh@gnu.org>
parents: 15273
diff changeset
2514 tputs crashes if we have not called tgetent.
15273
db889dd732a1 (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
Karl Heuer <kwzh@gnu.org>
parents: 15078
diff changeset
2515 So call tgetent. */
db889dd732a1 (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
Karl Heuer <kwzh@gnu.org>
parents: 15078
diff changeset
2516 { char b[2044]; tgetent (b, "xterm");}
db889dd732a1 (init_display) [HAVE_LIBNCURSES]: If X, call tgetent.
Karl Heuer <kwzh@gnu.org>
parents: 15078
diff changeset
2517 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2518 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2519 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2520 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2521
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2522 #ifdef HAVE_NTGUI
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2523 if (!inhibit_window_system)
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2524 {
16589
ec300a10e407 (init_display) [HAVE_NTGUI]: Use w32 for window-system.
Geoff Voelker <voelker@cs.washington.edu>
parents: 16412
diff changeset
2525 Vwindow_system = intern ("w32");
13408
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2526 Vwindow_system_version = make_number (1);
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2527 return;
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2528 }
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2529 #endif /* HAVE_NTGUI */
7e92386e1cf7 [HAVE_NTGUI]: Include w32term.h.
Geoff Voelker <voelker@cs.washington.edu>
parents: 13220
diff changeset
2530
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2531 /* If no window system has been specified, try to use the terminal. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2532 if (! isatty (0))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2533 {
16896
b2c51d6de440 (init_display): Use `fatal'.
Richard M. Stallman <rms@gnu.org>
parents: 16891
diff changeset
2534 fatal ("standard input is not a tty");
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2535 exit (1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2536 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2537
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2538 /* Look at the TERM variable */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2539 terminal_type = (char *) getenv ("TERM");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2540 if (!terminal_type)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2541 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2542 #ifdef VMS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2543 fprintf (stderr, "Please specify your terminal type.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2544 For types defined in VMS, use set term /device=TYPE.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2545 For types not defined in VMS, use define emacs_term \"TYPE\".\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2546 \(The quotation marks are necessary since terminal types are lower case.)\n");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2547 #else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2548 fprintf (stderr, "Please set the environment variable TERM; see tset(1).\n");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2549 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2550 exit (1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2551 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2552
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2553 #ifdef VMS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2554 /* VMS DCL tends to upcase things, so downcase term type.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2555 Hardly any uppercase letters in terminal types; should be none. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2556 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2557 char *new = (char *) xmalloc (strlen (terminal_type) + 1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2558 char *p;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2559
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2560 strcpy (new, terminal_type);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2561
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2562 for (p = new; *p; p++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2563 if (isupper (*p))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2564 *p = tolower (*p);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2565
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2566 terminal_type = new;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2567 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2568 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2569
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2570 term_init (terminal_type);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2571
16891
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2572 {
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2573 int width = FRAME_WINDOW_WIDTH (selected_frame);
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2574 int height = FRAME_HEIGHT (selected_frame);
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2575
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2576 unsigned int total_glyphs = height * (width + 2) * sizeof (GLYPH);
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2577
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2578 /* If these sizes are so big they cause overflow,
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2579 just ignore the change. It's not clear what better we could do. */
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2580 if (total_glyphs / sizeof (GLYPH) / height != width + 2)
16896
b2c51d6de440 (init_display): Use `fatal'.
Richard M. Stallman <rms@gnu.org>
parents: 16891
diff changeset
2581 fatal ("screen size %dx%d too big", width, height);
16891
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2582 }
989845750a4d (init_display): Check for overflow in screen size.
Richard M. Stallman <rms@gnu.org>
parents: 16881
diff changeset
2583
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2584 remake_frame_glyphs (selected_frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2585 calculate_costs (selected_frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2586
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2587 /* X and Y coordinates of the cursor between updates. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2588 FRAME_CURSOR_X (selected_frame) = 0;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2589 FRAME_CURSOR_Y (selected_frame) = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2590
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2591 #ifdef SIGWINCH
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2592 #ifndef CANNOT_DUMP
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2593 if (initialized)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2594 #endif /* CANNOT_DUMP */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2595 signal (SIGWINCH, window_change_signal);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2596 #endif /* SIGWINCH */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2597 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2598
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2599 syms_of_display ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2600 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2601 defsubr (&Sredraw_frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2602 defsubr (&Sredraw_display);
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
2603 defsubr (&Sframe_or_buffer_changed_p);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2604 defsubr (&Sopen_termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2605 defsubr (&Sding);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2606 defsubr (&Ssit_for);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2607 defsubr (&Ssleep_for);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2608 defsubr (&Ssend_string_to_terminal);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2609
12186
6811992e871c (Fframe_or_buffer_changed_p): Calculate vector size right.
Karl Heuer <kwzh@gnu.org>
parents: 11919
diff changeset
2610 frame_and_buffer_state = Fmake_vector (make_number (20), Qlambda);
7810
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
2611 staticpro (&frame_and_buffer_state);
15c0bf73737e (Fframe_or_buffer_changed_p): New function.
Karl Heuer <kwzh@gnu.org>
parents: 7808
diff changeset
2612
13220
2e9014617492 (Qdisplay_table): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13105
diff changeset
2613 Qdisplay_table = intern ("display-table");
2e9014617492 (Qdisplay_table): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13105
diff changeset
2614 staticpro (&Qdisplay_table);
2e9014617492 (Qdisplay_table): New variable.
Richard M. Stallman <rms@gnu.org>
parents: 13105
diff changeset
2615
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2616 DEFVAR_INT ("baud-rate", &baud_rate,
7926
b87f2c705501 (syms_of_display): Make baud-rate a user var.
Richard M. Stallman <rms@gnu.org>
parents: 7900
diff changeset
2617 "*The output baud rate of the terminal.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2618 On most systems, changing this value will affect the amount of padding\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2619 and the other strategic decisions made during redisplay.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2620 DEFVAR_BOOL ("inverse-video", &inverse_video,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2621 "*Non-nil means invert the entire frame display.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2622 This means everything is in inverse video which otherwise would not be.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2623 DEFVAR_BOOL ("visible-bell", &visible_bell,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2624 "*Non-nil means try to flash the frame to represent a bell.");
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2625 DEFVAR_BOOL ("no-redraw-on-reenter", &no_redraw_on_reenter,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2626 "*Non-nil means no need to redraw entire frame after suspending.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2627 A non-nil value is useful if the terminal can automatically preserve\n\
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2628 Emacs's frame display when you reenter Emacs.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2629 It is up to you to set this variable if your terminal can do that.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2630 DEFVAR_LISP ("window-system", &Vwindow_system,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2631 "A symbol naming the window-system under which Emacs is running\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2632 \(such as `x'), or nil if emacs is running on an ordinary terminal.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2633 DEFVAR_LISP ("window-system-version", &Vwindow_system_version,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2634 "The version number of the window system in use.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2635 For X windows, this is 10 or 11.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2636 DEFVAR_BOOL ("cursor-in-echo-area", &cursor_in_echo_area,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2637 "Non-nil means put cursor in minibuffer, at end of any message there.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2638 DEFVAR_LISP ("glyph-table", &Vglyph_table,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2639 "Table defining how to output a glyph code to the frame.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2640 If not nil, this is a vector indexed by glyph code to define the glyph.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2641 Each element can be:\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2642 integer: a glyph code which this glyph is an alias for.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2643 string: output this glyph using that string (not impl. in X windows).\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2644 nil: this glyph mod 256 is char code to output,\n\
6857
613ec7b5640e (Vglyph_table): Doc fix.
Karl Heuer <kwzh@gnu.org>
parents: 6765
diff changeset
2645 and this glyph / 256 is face code for X windows (see `face-id').");
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2646 Vglyph_table = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2647
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2648 DEFVAR_LISP ("standard-display-table", &Vstandard_display_table,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2649 "Display table to use for buffers that specify none.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2650 See `buffer-display-table' for more information.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2651 Vstandard_display_table = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2652
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2653 /* Initialize `window-system', unless init_display already decided it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2654 #ifdef CANNOT_DUMP
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2655 if (noninteractive)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2656 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2657 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2658 Vwindow_system = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2659 Vwindow_system_version = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2660 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2661 }