aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorKaroly Lorentey2004-03-07 15:30:22 +0000
committerKaroly Lorentey2004-03-07 15:30:22 +0000
commit54e81dc64794f315efdf418518a5e00f419cbcbd (patch)
tree4c2dc33f0c1e697b810298ba5e9972341c0d4240 /src
parent4388f1016b80bd33a75481b28352ae6c456e386a (diff)
parentee96c8385cf436bf308665e5d6c8fb16c761e8e1 (diff)
downloademacs-54e81dc64794f315efdf418518a5e00f419cbcbd.tar.gz
emacs-54e81dc64794f315efdf418518a5e00f419cbcbd.zip
Merged in changes from CVS HEAD
Patches applied: * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-126 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-127 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-128 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-129 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-130 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-131 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-132 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-133 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-134 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-135 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-136 Update from CVS * miles@gnu.org--gnu-2004/emacs--cvs-trunk--0--patch-137 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-112
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog241
-rw-r--r--src/buffer.c5
-rw-r--r--src/doc.c2
-rw-r--r--src/editfns.c71
-rw-r--r--src/fringe.c25
-rw-r--r--src/indent.c12
-rw-r--r--src/makefile.w32-in15
-rw-r--r--src/s/sol2-6.h5
-rw-r--r--src/w32term.c2
-rw-r--r--src/window.c8
-rw-r--r--src/window.h3
-rw-r--r--src/xdisp.c245
-rw-r--r--src/xfns.c13
13 files changed, 459 insertions, 188 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index c1a63aab953..bb8ef04bc67 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,78 @@
12004-03-04 Richard M. Stallman <rms@gnu.org>
2
3 * s/sol2-6.h (LD_SWITCH_SYSTEM_TEMACS): New definition.
4
5 * window.c (Fdisplay_buffer): Doc fix.
6
7 * buffer.c (Fpop_to_buffer): Doc fix.
8
92004-03-03 Kim F. Storm <storm@cua.dk>
10
11 * xdisp.c (display_line): Fix call to get_overlay_arrow_glyph_row.
12
132004-03-02 Stefan Monnier <monnier@iro.umontreal.ca>
14
15 * editfns.c (Ftranslate_region): Lisp_Object/int mixup.
16
172004-03-02 Richard M. Stallman <rms@gnu.org>
18
19 * indent.c (compute_motion): Save vpos in prev_vpos, like hpos etc.
20
212004-03-02 Kenichi Handa <handa@m17n.org>
22
23 * doc.c (Fsubstitute_command_keys): Fix counding bytes.
24
252004-03-02 Kim F. Storm <storm@cua.dk>
26
27 * window.h (struct window): New member overlay_arrow_bitmap.
28
29 * window.c (make_window): Initialize overlay_arrow_bitmap.
30
31 * xdisp.c (Voverlay_arrow_variable_list): New variable to properly
32 implement and integrate multiple overlay arrows with redisplay.
33 (syms_of_xdisp): DEFVAR_LISP and initialize it.
34 (last_arrow_position, last_arrow_string): Replace by properties.
35 (Qlast_arrow_position, Qlast_arrow_string)
36 (Qoverlay_arrow_string, Qoverlay_arrow_bitmap): New variables.
37 (syms_of_xdisp): Intern and staticpro them.
38 (overlay_arrow_string_or_property, update_overlay_arrows)
39 (overlay_arrow_in_current_buffer_p, overlay_arrows_changed_p)
40 (overlay_arrow_at_row): New functions for multiple overlay arrows.
41 (redisplay_internal): Use them instead of directly accessing
42 Voverlay_arrow_position etc. for multiple overlay arrows.
43 (mark_window_display_accurate): Use update_overlay_arrows.
44 (try_cursor_movement): Use overlay_arrow_in_current_buffer_p.
45 (try_window_id): Use overlay_arrows_changed_p.
46 (get_overlay_arrow_glyph_row): Add overlay_arrow_string arg.
47 (display_line): Use overlay_arrow_at_row to check multiple
48 overlay arrows, and get relevant overlay-arrow-string and
49 overlay-arrow-bitmap. Set w->overlay_arrow_bitmap accordingly.
50 (produce_image_glyph): Set pixel_width = 0 for fringe bitmap.
51 (syms_of_xdisp): Remove last_arrow_position and last_arrow_string.
52
53 * fringe.c (draw_fringe_bitmap): Use w->overlay_arrow_bitmap if set.
54 (update_window_fringes): Remove unused code.
55
562004-03-01 Jason Rumney <jasonr@gnu.org>
57
58 * w32term.c (w32_read_socket): Fix last change to ButtonPress handling.
59
602004-03-01 Juanma Barranquero <lektu@terra.es>
61
62 * fringe.c (Fdefine_fringe_bitmap): Fix typo in docstring.
63
64 * makefile.w32-in ($(BLD)/fringe.$(O)): Add dependencies.
65
662004-03-01 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
67
68 * xfns.c (Fx_display_color_cells): Use number of planes to calculate
69 how many colors can be displayed.
70
712004-03-01 Kenichi Handa <handa@m17n.org>
72
73 * editfns.c (Ftranslate_region): Handle multibyte chars in TABLE
74 correctly.
75
12004-02-28 Kim F. Storm <storm@cua.dk> 762004-02-28 Kim F. Storm <storm@cua.dk>
2 77
3 * dispnew.c (update_window): Update header line also if there are 78 * dispnew.c (update_window): Update header line also if there are
@@ -11,11 +86,11 @@
11 86
122004-02-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> 872004-02-28 Jan Dj,Ad(Brv <jan.h.d@swipnet.se>
13 88
14 * xfns.c (x_window): Fixed indentation. 89 * xfns.c (x_window): Fix indentation.
15 90
16 * xterm.c (x_calc_absolute_position): Call x_real_positions 91 * xterm.c (x_calc_absolute_position): Call x_real_positions
17 to get WM window sizes and use those to calculate position. 92 to get WM window sizes and use those to calculate position.
18 (x_set_offset): Removed code commented out. 93 (x_set_offset): Remove code commented out.
19 94
202004-02-28 Miles Bader <miles@gnu.org> 952004-02-28 Miles Bader <miles@gnu.org>
21 96
@@ -39,7 +114,7 @@
39 * keyboard.h (kbd_buffer_store_event_hold): Add prototype. 114 * keyboard.h (kbd_buffer_store_event_hold): Add prototype.
40 (gen_help_event): Fix prototype. 115 (gen_help_event): Fix prototype.
41 116
42 * macterm.c (XTread_socket): Remove bufp_r and 117 * macterm.c (XTread_socket): Remove bufp_r and
43 numcharsp args. Add hold_quit arg. 118 numcharsp args. Add hold_quit arg.
44 Rework to use just one, local, inev input_event. Store inev 119 Rework to use just one, local, inev input_event. Store inev
45 directly in fifo using kbd_buffer_store_event_hold. 120 directly in fifo using kbd_buffer_store_event_hold.
@@ -51,7 +126,7 @@
51 initialize local hold_quit event to handle postponed quit event 126 initialize local hold_quit event to handle postponed quit event
52 (and store it if set by kbd_buffer_store_event_hold). 127 (and store it if set by kbd_buffer_store_event_hold).
53 128
54 * term.c (read_socket_hook): Fix arg list. 129 * term.c (read_socket_hook): Fix arg list.
55 130
56 * termhooks.h (read_socket_hook): Fix prototype. 131 * termhooks.h (read_socket_hook): Fix prototype.
57 132
@@ -73,9 +148,9 @@
73 148
74 * xsmfns.c (x_session_check_input): Remove numchars arg. 149 * xsmfns.c (x_session_check_input): Remove numchars arg.
75 150
76 * xterm.c (x_focus_changed, x_detect_focus_change): Remove 151 * xterm.c (x_focus_changed, x_detect_focus_change):
77 numchars arg. Always store event into bufp arg. Return nothing. 152 Remove numchars arg. Always store event into bufp arg.
78 Callers changed accordingly. 153 Return nothing. Callers changed accordingly.
79 (glyph_rect): Simplify. 154 (glyph_rect): Simplify.
80 (STORE_KEYSYM_FOR_DEBUG): New macro. 155 (STORE_KEYSYM_FOR_DEBUG): New macro.
81 (SET_SAVED_MENU_EVENT): Use inev instead of bufp, etc. 156 (SET_SAVED_MENU_EVENT): Use inev instead of bufp, etc.
@@ -106,15 +181,14 @@
106 * xterm.h (x_session_check_input): Fix prototype. 181 * xterm.h (x_session_check_input): Fix prototype.
107 182
1082004-02-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> 1832004-02-26 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
109 184
110 * s/darwin.h (LD_SWITCH_SYSTEM_TEMACS): Add `-framework 185 * s/darwin.h (LD_SWITCH_SYSTEM_TEMACS): Add `-framework QuickTime'.
111 QuickTime'. 186
112
113 * dispextern.h [MAC_OSX]: Do not include Carbon/Carbon.h (now in 187 * dispextern.h [MAC_OSX]: Do not include Carbon/Carbon.h (now in
114 macgui.h). 188 macgui.h).
115 189
116 * emacs.c (main) [HAVE_CARBON]: Call init_xfns. 190 * emacs.c (main) [HAVE_CARBON]: Call init_xfns.
117 191
118 * macgui.h [MAC_OSX]: Include Carbon/Carbon.h. 192 * macgui.h [MAC_OSX]: Include Carbon/Carbon.h.
119 (mktime, DEBUG, Z, free, malloc, realloc, max, min) 193 (mktime, DEBUG, Z, free, malloc, realloc, max, min)
120 (init_process) [MAC_OSX] : Avoid conflicts with Carbon/Carbon.h. 194 (init_process) [MAC_OSX] : Avoid conflicts with Carbon/Carbon.h.
@@ -123,18 +197,16 @@
123 (Bitmap): Remove typedef. 197 (Bitmap): Remove typedef.
124 (Pixmap): Change int to GWorldPtr. 198 (Pixmap): Change int to GWorldPtr.
125 199
126 * macmenu.c [MAC_OSX]: Do not include Carbon/Carbon.h (now in 200 * macmenu.c [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
127 macgui.h). 201
128 202 * macterm.h [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
129 * macterm.h [MAC_OSX]: Do not include Carbon/Carbon.h (now in 203 (RED16_FROM_ULONG, GREEN16_FROM_ULONG, BLUE16_FROM_ULONG):
130 macgui.h). 204 New #define to extract 16-bit depth color components from unsigned
131 (RED16_FROM_ULONG, GREEN16_FROM_ULONG, BLUE16_FROM_ULONG): New
132 #define to extract 16-bit depth color components from unsigned
133 long representation. 205 long representation.
134 (PIX_MASK_DRAW, PIX_MASK_RETAIN): New #define to represent pixel 206 (PIX_MASK_DRAW, PIX_MASK_RETAIN): New #define to represent pixel
135 colors used for masks. 207 colors used for masks.
136 (struct mac_display_info): Add color_p. Remove n_cbits. 208 (struct mac_display_info): Add color_p. Remove n_cbits.
137 209
138 * macfns.c: Include sys/types.h and sys/stat.h. 210 * macfns.c: Include sys/types.h and sys/stat.h.
139 [MAC_OSX]: Do not include Carbon/Carbon.h (now in macgui.h). 211 [MAC_OSX]: Do not include Carbon/Carbon.h (now in macgui.h).
140 Include QuickTime/QuickTime.h. 212 Include QuickTime/QuickTime.h.
@@ -145,11 +217,11 @@
145 (ZPixmap): New #define for compatibility with xfns.c. 217 (ZPixmap): New #define for compatibility with xfns.c.
146 (XGetImage, XPutPixel, XGetPixel, XDestroyImage) 218 (XGetImage, XPutPixel, XGetPixel, XDestroyImage)
147 (x_create_x_image_and_pixmap, x_destroy_x_image, x_put_x_image) 219 (x_create_x_image_and_pixmap, x_destroy_x_image, x_put_x_image)
148 (find_image_fsspec, image_load_qt_1, image_load_quicktime): New 220 (find_image_fsspec, image_load_qt_1, image_load_quicktime):
149 functions. 221 New functions.
150 (four_corners_best, x_create_x_image_and_pixmap) 222 (four_corners_best, x_create_x_image_and_pixmap)
151 (x_destroy_x_image, unwind_create_frame, x_disable_image, 223 (x_destroy_x_image, unwind_create_frame, x_disable_image)
152 (x_edge_detection, init_color_table, colors_in_color_table, 224 (x_edge_detection, init_color_table, colors_in_color_table)
153 (lookup_rgb_color, lookup_pixel_color, postprocess_image) 225 (lookup_rgb_color, lookup_pixel_color, postprocess_image)
154 (x_put_x_image, slurp_file, xbm_scan, xbm_load, xbm_load_image) 226 (x_put_x_image, slurp_file, xbm_scan, xbm_load, xbm_load_image)
155 (xbm_image_p, xbm_read_bitmap_data, xbm_file_p, x_to_xcolors) 227 (xbm_image_p, xbm_read_bitmap_data, xbm_file_p, x_to_xcolors)
@@ -168,14 +240,13 @@
168 (enum pbm_keyword_index, pbm_format, enum png_keyword_index) 240 (enum pbm_keyword_index, pbm_format, enum png_keyword_index)
169 (png_format, png_image_p, enum jpeg_keyword_index, jpeg_format) 241 (png_format, png_image_p, enum jpeg_keyword_index, jpeg_format)
170 (jpeg_image_p, enum tiff_keyword_index, tiff_format, tiff_image_p) 242 (jpeg_image_p, enum tiff_keyword_index, tiff_format, tiff_image_p)
171 (enum gif_keyword_index, gif_format, gif_image_p): Sync with 243 (enum gif_keyword_index, gif_format, gif_image_p): Sync with xfns.c.
172 xfns.c.
173 (x_make_gc): Sync with xfns.c. Enclose unused `border_tile' with 244 (x_make_gc): Sync with xfns.c. Enclose unused `border_tile' with
174 #if 0. 245 #if 0.
175 (x_free_gcs): Sync with xfns.c. Enclose unused `border_tile' with 246 (x_free_gcs): Sync with xfns.c. Enclose unused `border_tile' with
176 #if 0. Free white_relief.gc and black_relief.gc. 247 #if 0. Free white_relief.gc and black_relief.gc.
177 (unwind_create_frame, x_emboss, x_laplace, x_edge_detection): New 248 (unwind_create_frame, x_emboss, x_laplace, x_edge_detection):
178 functions (from xfns.c). 249 New functions (from xfns.c).
179 (Fx_create_frame): Record unwind_create_frame. 250 (Fx_create_frame): Record unwind_create_frame.
180 (Fxw_display_color_p): Use dpyinfo->color_p. 251 (Fxw_display_color_p): Use dpyinfo->color_p.
181 (Fx_display_grayscale_p, Fx_display_planes): Don't use 252 (Fx_display_grayscale_p, Fx_display_planes): Don't use
@@ -187,14 +258,13 @@
187 (Fimage_size, Fimage_mask_p, four_corners_best, image_background) 258 (Fimage_size, Fimage_mask_p, four_corners_best, image_background)
188 (x_clear_image_1, postprocess_image, slurp_file, xbm_load_image) 259 (x_clear_image_1, postprocess_image, slurp_file, xbm_load_image)
189 (xbm_file_p, x_to_xcolors, x_from_xcolors, x_detect_edges) 260 (xbm_file_p, x_to_xcolors, x_from_xcolors, x_detect_edges)
190 (image_background_transparent): New function (from xfns.c). Use 261 (image_background_transparent): New function (from xfns.c).
191 PIX_MASK_DRAW/PIX_MASK_RETAIN. 262 Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
192 (image_load_quicktime): Add declaration. 263 (image_load_quicktime): Add declaration.
193 [MAC_OSX] (image_load_quartz2d): Likewise. 264 [MAC_OSX] (image_load_quartz2d): Likewise.
194 [MAC_OSX] (CGImageCreateWithPNGDataProviderProcType): New typedef. 265 [MAC_OSX] (CGImageCreateWithPNGDataProviderProcType): New typedef.
195 [MAC_OSX] (MyCGImageCreateWithPNGDataProvider): New variable. 266 [MAC_OSX] (MyCGImageCreateWithPNGDataProvider): New variable.
196 [MAC_OSX] (init_image_func_pointer, image_load_quartz2d): New 267 [MAC_OSX] (init_image_func_pointer, image_load_quartz2d): New funs.
197 functions.
198 (xbm_load_image_from_file, x_laplace_read_row) 268 (xbm_load_image_from_file, x_laplace_read_row)
199 (x_laplace_write_row, pbm_read_file): Remove functions. 269 (x_laplace_write_row, pbm_read_file): Remove functions.
200 [HAVE_XPM] (enum xpm_keyword_index, xpm_format, xpm_image_p) 270 [HAVE_XPM] (enum xpm_keyword_index, xpm_format, xpm_image_p)
@@ -203,23 +273,22 @@
203 (lookup_rgb_color): Don't lookup color table. Just do gamma 273 (lookup_rgb_color): Don't lookup color table. Just do gamma
204 correction. 274 correction.
205 (COLOR_INTENSITY): New #define (from xfns.c). 275 (COLOR_INTENSITY): New #define (from xfns.c).
206 (x_disable_image): New function (from xfns.c). Use 276 (x_disable_image): New function (from xfns.c).
207 PIX_MASK_DRAW/PIX_MASK_RETAIN. 277 Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
208 (x_build_heuristic_mask): Sync with xfns.c. Use 278 (x_build_heuristic_mask): Sync with xfns.c.
209 PIX_MASK_DRAW/PIX_MASK_RETAIN. 279 Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
210 (HAVE_PBM): Remove #ifdef. 280 (HAVE_PBM): Remove #ifdef.
211 (pbm_load): Sync with xfns.c. Set img->width and img->height 281 (pbm_load): Sync with xfns.c. Set img->width and img->height
212 before IMAGE_BACKGROUND. 282 before IMAGE_BACKGROUND.
213 (png_image_p, png_load): Don't enclose declarations with #if 283 (png_image_p, png_load): Don't enclose declarations with #if HAVE_PNG.
214 HAVE_PNG.
215 (Qpng, enum png_keyword_index, png_format, png_type, png_image_p): 284 (Qpng, enum png_keyword_index, png_format, png_type, png_image_p):
216 Don't enclose with #if HAVE_PNG. 285 Don't enclose with #if HAVE_PNG.
217 [!HAVE_PNG] (png_load) [MAC_OSX]: Use image_load_quartz2d if a 286 [!HAVE_PNG] (png_load) [MAC_OSX]: Use image_load_quartz2d if a
218 symbol _CGImageCreateWithPNGDataProvider is defined. Otherwise 287 symbol _CGImageCreateWithPNGDataProvider is defined.
219 use image_load_quicktime. 288 Otherwise use image_load_quicktime.
220 [!HAVE_PNG] (png_load) [!MAC_OSX]: Use image_load_quicktime. 289 [!HAVE_PNG] (png_load) [!MAC_OSX]: Use image_load_quicktime.
221 [HAVE_PNG] (png_load): Sync with xfns.c. Use 290 [HAVE_PNG] (png_load): Sync with xfns.c.
222 PIX_MASK_DRAW/PIX_MASK_RETAIN. 291 Use PIX_MASK_DRAW/PIX_MASK_RETAIN.
223 (jpeg_image_p, jpeg_load): Don't enclose declarations with #if 292 (jpeg_image_p, jpeg_load): Don't enclose declarations with #if
224 HAVE_JPEG. 293 HAVE_JPEG.
225 (Qjpeg, enum jpeg_keyword_index, jpeg_format, jpeg_type) 294 (Qjpeg, enum jpeg_keyword_index, jpeg_format, jpeg_type)
@@ -232,11 +301,10 @@
232 (Qtiff, enum tiff_keyword_index, tiff_format, tiff_type) 301 (Qtiff, enum tiff_keyword_index, tiff_format, tiff_type)
233 (tiff_image_p): Don't enclose with #if HAVE_TIFF. 302 (tiff_image_p): Don't enclose with #if HAVE_TIFF.
234 [!HAVE_TIFF] (tiff_load): Use image_load_quicktime. 303 [!HAVE_TIFF] (tiff_load): Use image_load_quicktime.
235 [HAVE_TIFF] (tiff_error_handler, tiff_warning_handler): New 304 [HAVE_TIFF] (tiff_error_handler, tiff_warning_handler):
236 functions (from xfns.c). 305 New functions (from xfns.c).
237 [HAVE_TIFF] (tiff_load): Sync with xfns.c. 306 [HAVE_TIFF] (tiff_load): Sync with xfns.c.
238 (gif_image_p, gif_load): Don't enclose declarations with #if 307 (gif_image_p, gif_load): Don't enclose declarations with #if HAVE_GIF.
239 HAVE_GIF.
240 (Qgif, enum gif_keyword_index, gif_format, gif_type, gif_image_p): 308 (Qgif, enum gif_keyword_index, gif_format, gif_type, gif_image_p):
241 Don't enclose with #if HAVE_GIF. 309 Don't enclose with #if HAVE_GIF.
242 [!HAVE_GIF] (gif_load): Use Quicktime Movie Toolbox if it is 310 [!HAVE_GIF] (gif_load): Use Quicktime Movie Toolbox if it is
@@ -253,12 +321,11 @@
253 image types. Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and 321 image types. Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and
254 HAVE_PNG. Add defsubr for Simage_size and Simage_mask_p. 322 HAVE_PNG. Add defsubr for Simage_size and Simage_mask_p.
255 (init_xfns): Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and 323 (init_xfns): Remove #if HAVE_JPEG, HAVE_TIFF, HAVE_GIF, and
256 HAVE_PNG. Call EnterMovies to support animated gifs. Call 324 HAVE_PNG. Call EnterMovies to support animated gifs.
257 init_image_func_pointer to bind a symbol 325 Call init_image_func_pointer to bind a symbol
258 _CGImageCreateWithPNGDataProvider if it is defined. 326 _CGImageCreateWithPNGDataProvider if it is defined.
259 327
260 * macterm.c [MAC_OSX]: Do not include Carbon/Carbon.h (now in 328 * macterm.c [MAC_OSX]: Don't include Carbon/Carbon.h (now in macgui.h).
261 macgui.h).
262 (x_draw_bar_cursor): Sync declaration with xterm.c. 329 (x_draw_bar_cursor): Sync declaration with xterm.c.
263 (XFreePixmap, mac_draw_rectangle_to_pixmap, mac_copy_area) 330 (XFreePixmap, mac_draw_rectangle_to_pixmap, mac_copy_area)
264 (mac_copy_area_to_pixmap): Implementation with GWorld (offscreen 331 (mac_copy_area_to_pixmap): Implementation with GWorld (offscreen
@@ -266,16 +333,16 @@
266 (mac_set_forecolor, mac_set_backcolor): Use RED16_FROM_ULONG etc. 333 (mac_set_forecolor, mac_set_backcolor): Use RED16_FROM_ULONG etc.
267 (mac_draw_line_to_pixmap, XCreatePixmap) 334 (mac_draw_line_to_pixmap, XCreatePixmap)
268 (XCreatePixmapFromBitmapData, mac_fill_rectangle_to_pixmap) 335 (XCreatePixmapFromBitmapData, mac_fill_rectangle_to_pixmap)
269 (mac_copy_area_with_mask, mac_copy_area_with_mask_to_pixmap): New 336 (mac_copy_area_with_mask, mac_copy_area_with_mask_to_pixmap):
270 functions. 337 New functions.
271 (mac_draw_bitmap) [TARGET_API_MAC_CARBON]: Use 338 (mac_draw_bitmap) [TARGET_API_MAC_CARBON]:
272 GetPortBitMapForCopyBits instead of the cast to Bitmap *. Cast 339 Use GetPortBitMapForCopyBits instead of the cast to Bitmap *.
273 bits to char *. 340 Cast bits to char *.
274 (reflect_byte): New function (from w32fns.c). 341 (reflect_byte): New function (from w32fns.c).
275 (mac_create_bitmap_from_bitmap_data): Use it and don't stuff bits 342 (mac_create_bitmap_from_bitmap_data): Use it and don't stuff bits
276 due to byte alignment. 343 due to byte alignment.
277 (mac_scroll_area) [TARGET_API_MAC_CARBON]: Use 344 (mac_scroll_area) [TARGET_API_MAC_CARBON]:
278 GetPortBitMapForCopyBits instead of the cast to Bitmap *. 345 Use GetPortBitMapForCopyBits instead of the cast to Bitmap *.
279 (XSetForeground): Remove static (now used in macfns.c). 346 (XSetForeground): Remove static (now used in macfns.c).
280 (HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New #define (from w32term.c). 347 (HIGHLIGHT_COLOR_DARK_BOOST_LIMIT): New #define (from w32term.c).
281 (mac_alloc_lighter_color, x_destroy_window): Sync with w32term.c. 348 (mac_alloc_lighter_color, x_destroy_window): Sync with w32term.c.
@@ -293,18 +360,16 @@
293 (x_free_frame_resources): New funcion (from xterm.c). 360 (x_free_frame_resources): New funcion (from xterm.c).
294 (XTread_socket): Call handle_tool_bar_click if mouse up/down event 361 (XTread_socket): Call handle_tool_bar_click if mouse up/down event
295 occurs in tool bar area. 362 occurs in tool bar area.
296 (mac_initialize_display_info): Remove dpyinfo->n_cbits. Set 363 (mac_initialize_display_info): Remove dpyinfo->n_cbits.
297 dpyinfo->color_p. Determine dpyinfo->n_planes using HasDepth. 364 Set dpyinfo->color_p. Determine dpyinfo->n_planes using HasDepth.
298 Initialize image cache. 365 Initialize image cache.
299 (stricmp, wildstrieq, mac_font_pattern_match, mac_font_match): 366 (stricmp, wildstrieq, mac_font_pattern_match, mac_font_match):
300 Enclose unused functions with #if 0. 367 Enclose unused functions with #if 0.
301 (Qbig5, Qcn_gb, Qsjis, Qeuc_kr): New variables. 368 (Qbig5, Qcn_gb, Qsjis, Qeuc_kr): New variables.
302 (decode_mac_font_name): New function to apply code conversions 369 (decode_mac_font_name): New function to apply code conversions
303 from a mac font name to an XLFD font name according to its script 370 from a mac font name to an XLFD font name according to its script code.
304 code.
305 (x_font_name_to_mac_font_name): Apply code conversion from an XLFD 371 (x_font_name_to_mac_font_name): Apply code conversion from an XLFD
306 font name to a mac font name according to REGISTRY and ENCODING 372 font name to a mac font name according to REGISTRY and ENCODING fields.
307 fields.
308 (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't use a font 373 (init_font_name_table) [TARGET_API_MAC_CARBON]: Don't use a font
309 whose name starts with `.'. 374 whose name starts with `.'.
310 (init_font_name_table): Use decode_mac_font_name. Add both 375 (init_font_name_table): Use decode_mac_font_name. Add both
@@ -345,7 +410,7 @@
345 * xfns.c (lookup_image): Remove xassert(!interrupt_input_blocked); 410 * xfns.c (lookup_image): Remove xassert(!interrupt_input_blocked);
346 BLOCK_INPUT can be nested, so it doesn't make much sense. 411 BLOCK_INPUT can be nested, so it doesn't make much sense.
347 412
3482004-02-24 Michael Mauger <mmaug@yahoo.com> 4132004-02-24 Michael Mauger <mmaug@yahoo.com>
349 414
350 * w32fns.c (slurp_file, xbm_scan, xbm_load_image) 415 * w32fns.c (slurp_file, xbm_scan, xbm_load_image)
351 (xbm_read_bitmap_data): Use unsigned char for image data. 416 (xbm_read_bitmap_data): Use unsigned char for image data.
@@ -363,8 +428,8 @@
363 428
364 * emacs.c (USAGE1): Split into two halves. 429 * emacs.c (USAGE1): Split into two halves.
365 (USAGE2): Second half of the old USAGE1. 430 (USAGE2): Second half of the old USAGE1.
366 (USAGE3): Renamed from USAGE2. 431 (USAGE3): Rename from USAGE2.
367 (USAGE4): Renamed from USAGE3. 432 (USAGE4): Rename from USAGE3.
368 433
3692004-02-21 Juri Linkov <juri@jurta.org> 4342004-02-21 Juri Linkov <juri@jurta.org>
370 435
@@ -387,8 +452,8 @@
387 in one call to read_socket_hook. Value is 8. 452 in one call to read_socket_hook. Value is 8.
388 (read_avail_input): Separate and rework handling of read_socket_hook 453 (read_avail_input): Separate and rework handling of read_socket_hook
389 and non-read_socket_hook cases. Use smaller input_event buffer 454 and non-read_socket_hook cases. Use smaller input_event buffer
390 in read_socket_hook case, and repeat if full buffer is read. Use 455 in read_socket_hook case, and repeat if full buffer is read.
391 new local variable 'discard' to skip input after C-g. 456 Use new local variable 'discard' to skip input after C-g.
392 In non-read_socket_hook case, just use a single input_event, and 457 In non-read_socket_hook case, just use a single input_event, and
393 call kbd_buffer_store_event on the fly for each character. 458 call kbd_buffer_store_event on the fly for each character.
394 459
@@ -595,7 +660,7 @@
595 Add prototypes. 660 Add prototypes.
596 661
597 * macterm.c (mac_draw_bitmap): Add overlay_p arg. 662 * macterm.c (mac_draw_bitmap): Add overlay_p arg.
598 (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps; 663 (x_draw_fringe_bitmap): Handle overlayed fringe bitmaps;
599 thanks to YAMAMOTO Mitsuharu for advice on how to do this. 664 thanks to YAMAMOTO Mitsuharu for advice on how to do this.
600 Use cursor color for displaying cursor in fringe. 665 Use cursor color for displaying cursor in fringe.
601 (x_redisplay_interface): Add null handlers for 666 (x_redisplay_interface): Add null handlers for
@@ -756,7 +821,7 @@
756 821
757 * makefile.w32-in, w32fns.c: Add `default-printer-name' function. 822 * makefile.w32-in, w32fns.c: Add `default-printer-name' function.
758 823
7592004-01-27 Steven Tamm <steventamm@mac.com> 8242004-01-27 Steven Tamm <steventamm@mac.com>
760 825
761 * unexmacosx.c (unexec_copy): Do not copy more than was 826 * unexmacosx.c (unexec_copy): Do not copy more than was
762 requested to prevent overwriting during unexec. 827 requested to prevent overwriting during unexec.
@@ -767,7 +832,7 @@
767 832
768 * process.h: Add extern to synch_process_termsig. 833 * process.h: Add extern to synch_process_termsig.
769 834
7702004-01-27 Steven Tamm <steventamm@mac.com> 8352004-01-27 Steven Tamm <steventamm@mac.com>
771 836
772 * macterm.c (make_mac_frame, make_mac_terminal_frame): 837 * macterm.c (make_mac_frame, make_mac_terminal_frame):
773 Move setting of scroll bars from make_mac_frame to 838 Move setting of scroll bars from make_mac_frame to
@@ -884,7 +949,7 @@
884 949
885 * buffer.h (struct buffer): New member indicate_buffer_boundaries. 950 * buffer.h (struct buffer): New member indicate_buffer_boundaries.
886 951
887 * buffer.c (init_buffer_once): Set buffer_defaults and 952 * buffer.c (init_buffer_once): Set buffer_defaults and
888 buffer_local_flags for indicate_buffer_boundaries. 953 buffer_local_flags for indicate_buffer_boundaries.
889 (syms_of_buffer): Defvar_per_buffer it, and defvar_lisp_nopro 954 (syms_of_buffer): Defvar_per_buffer it, and defvar_lisp_nopro
890 default- variable for it. 955 default- variable for it.
@@ -1095,7 +1160,7 @@
1095 to the definition of `signal' in the Elisp manual. 1160 to the definition of `signal' in the Elisp manual.
1096 * eval.c (Fsignal): Ditto. 1161 * eval.c (Fsignal): Ditto.
1097 1162
10982003-12-29 James Clark <jjc@jclark.com> (tiny change) 11632003-12-29 James Clark <jjc@jclark.com> (tiny change)
1099 1164
1100 * fns.c (internal_equal): Return t for two NaN arguments. 1165 * fns.c (internal_equal): Return t for two NaN arguments.
1101 1166
@@ -1221,7 +1286,7 @@
1221 1286
1222 * minibuf.c (Fcompleting_read): Undo previous change. 1287 * minibuf.c (Fcompleting_read): Undo previous change.
1223 1288
12242003-12-25 Lars Hansen <larsh@math.ku.dk> 12892003-12-25 Lars Hansen <larsh@math.ku.dk>
1225 1290
1226 * dired.c (Fdirectory_files, Fdirectory_files_and_attributes): 1291 * dired.c (Fdirectory_files, Fdirectory_files_and_attributes):
1227 Arguments GCPRO'ed in call to file name handler. 1292 Arguments GCPRO'ed in call to file name handler.
@@ -1410,7 +1475,7 @@
1410 * xdisp.c (note_mode_line_or_margin_highlight): Adapt to new 1475 * xdisp.c (note_mode_line_or_margin_highlight): Adapt to new
1411 mode_line_string and marginal_area_string parameters. 1476 mode_line_string and marginal_area_string parameters.
1412 1477
14132003-11-22 Lars Hansen <larsh@math.ku.dk> 14782003-11-22 Lars Hansen <larsh@math.ku.dk>
1414 1479
1415 * w32.c (struct the_group, getgrgid): Add. 1480 * w32.c (struct the_group, getgrgid): Add.
1416 * mac.c (struct my_group, getgrgid): Add. 1481 * mac.c (struct my_group, getgrgid): Add.
@@ -1504,7 +1569,7 @@
1504 * frame.c (store_frame_param): 1569 * frame.c (store_frame_param):
1505 * fontset.c (Fset_fontset_font): 1570 * fontset.c (Fset_fontset_font):
1506 * emacs.c (shut_down_emacs): 1571 * emacs.c (shut_down_emacs):
1507 * ccl.c (ccl_driver): Remove period at end of error message. 1572 * ccl.c (ccl_driver): Remove period at end of error message.
1508 1573
1509 * config.in: Regenerate. 1574 * config.in: Regenerate.
1510 1575
@@ -1809,7 +1874,7 @@
1809 Set BUF_INTERVALS (buffer)->up_obj when appropriate. 1874 Set BUF_INTERVALS (buffer)->up_obj when appropriate.
1810 Handle over_used when splitting UNDER. 1875 Handle over_used when splitting UNDER.
1811 1876
18122003-09-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> 18772003-09-30 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
1813 1878
1814 * regex.c (regex_compile): Free the stack when returning from function. 1879 * regex.c (regex_compile): Free the stack when returning from function.
1815 1880
@@ -2064,7 +2129,7 @@
2064 2129
2065 * w32term.c (w32_read_socket): Fix WM_MOUSEWHEEL assignment. 2130 * w32term.c (w32_read_socket): Fix WM_MOUSEWHEEL assignment.
2066 2131
20672003-08-26 Terje Rosten <terjeros@phys.ntnu.no> 21322003-08-26 Terje Rosten <terjeros@phys.ntnu.no>
2068 2133
2069 * xfns.c (Vgtk_version_string): New variable. 2134 * xfns.c (Vgtk_version_string): New variable.
2070 (syms_of_xfns): DEFVAR_LISP it. Provide gtk. 2135 (syms_of_xfns): DEFVAR_LISP it. Provide gtk.
@@ -3358,11 +3423,11 @@
3358 (draw_fringe_bitmap): Rework to handle per-window fringes and new 3423 (draw_fringe_bitmap): Rework to handle per-window fringes and new
3359 fringe vs. display margin position. 3424 fringe vs. display margin position.
3360 (hscroll_window_tree): Use window_box_width instead of window_box. 3425 (hscroll_window_tree): Use window_box_width instead of window_box.
3361 (redisplay_window): Adapt to per-window scroll bars. 3426 (redisplay_window): Adapt to per-window scroll bars.
3362 (draw_glyphs): Rework to handle per-window fringes and scroll 3427 (draw_glyphs): Rework to handle per-window fringes and scroll
3363 bars, and new fringe vs. display margin position. 3428 bars, and new fringe vs. display margin position.
3364 Use WINDOW_LEFT_EDGE_X, WINDOW_TOTAL_WIDTH, and window_box_left. 3429 Use WINDOW_LEFT_EDGE_X, WINDOW_TOTAL_WIDTH, and window_box_left.
3365 (x_clear_end_of_line): Adapt to per-window fringes and scroll 3430 (x_clear_end_of_line): Adapt to per-window fringes and scroll
3366 bars, and new fringe vs. display margin position. Fix bug which 3431 bars, and new fringe vs. display margin position. Fix bug which
3367 increased total width of full_width rows by width of scroll bars 3432 increased total width of full_width rows by width of scroll bars
3368 although window's total width already includes that. 3433 although window's total width already includes that.
@@ -4429,7 +4494,7 @@
4429 (w32_draw_window_cursor): New W32-specific functions for RIF. 4494 (w32_draw_window_cursor): New W32-specific functions for RIF.
4430 (w32_redisplay_interface): Add new members. 4495 (w32_redisplay_interface): Add new members.
4431 4496
4432 * w32gui.h (No_Cursor): Define as 0 for W32. 4497 * w32gui.h (No_Cursor): Define as 0 for W32.
4433 (XRectangle): Add X compatible rectangle type. 4498 (XRectangle): Add X compatible rectangle type.
4434 (NativeRectangle): Declare as RECT for W32. 4499 (NativeRectangle): Declare as RECT for W32.
4435 (CONVERT_TO_XRECT, CONVERT_FROM_XRECT, STORE_NATIVE_RECT): New macros. 4500 (CONVERT_TO_XRECT, CONVERT_FROM_XRECT, STORE_NATIVE_RECT): New macros.
@@ -5517,7 +5582,7 @@
5517 5582
5518 * lisp.h: Declare Vx_resource_name extern. 5583 * lisp.h: Declare Vx_resource_name extern.
5519 5584
5520 * keyboard.c (kbd_buffer_get_event): Check MENU_BAR_ACTIVATE_EVENT 5585 * keyboard.c (kbd_buffer_get_event): Check MENU_BAR_ACTIVATE_EVENT
5521 for USE_GTK. 5586 for USE_GTK.
5522 (make_lispy_event): Check MENU_BAR_EVENT for USE_GTK. 5587 (make_lispy_event): Check MENU_BAR_EVENT for USE_GTK.
5523 5588
@@ -5904,12 +5969,12 @@
5904 Its primary purpose at this time is to initialize the global variable 5969 Its primary purpose at this time is to initialize the global variable
5905 track_mouse_event_fn. 5970 track_mouse_event_fn.
5906 5971
5907 * w32fns.c (w32_wnd_proc): Remove initialization of 5972 * w32fns.c (w32_wnd_proc): Remove initialization of
5908 track_mouse_event_fn from the handler for the WM_SETFOCUS message. 5973 track_mouse_event_fn from the handler for the WM_SETFOCUS message.
5909 5974
5910 * w32fns.c (syms_of_w32fns): Call globals_of_w32fns. 5975 * w32fns.c (syms_of_w32fns): Call globals_of_w32fns.
5911 5976
5912 * w32menu.c (globals_of_w32menu): New function. Used to 5977 * w32menu.c (globals_of_w32menu): New function. Used to
5913 initialize those global variables that must always be initialized 5978 initialize those global variables that must always be initialized
5914 on startup even when the global variable initialized is non zero. 5979 on startup even when the global variable initialized is non zero.
5915 Its primary purpose at this time is to initialize the global 5980 Its primary purpose at this time is to initialize the global
@@ -11096,7 +11161,7 @@
11096 11161
110972001-12-03 Pavel Jan,Am(Bk <Pavel@Janik.cz> 111622001-12-03 Pavel Jan,Am(Bk <Pavel@Janik.cz>
11098 11163
11099 * xdisp.c (syms_of_xdisp): Make `tool-bar-button-relief` an option. 11164 * xdisp.c (syms_of_xdisp): Make `tool-bar-button-relief' an option.
11100 11165
111012001-12-02 Pavel Jan,Am(Bk <Pavel@Janik.cz> 111662001-12-02 Pavel Jan,Am(Bk <Pavel@Janik.cz>
11102 11167
diff --git a/src/buffer.c b/src/buffer.c
index ad1dde93da7..27b12845c50 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1675,8 +1675,9 @@ DEFUN ("pop-to-buffer", Fpop_to_buffer, Spop_to_buffer, 1, 3, 0,
1675 doc: /* Select buffer BUFFER in some window, preferably a different one. 1675 doc: /* Select buffer BUFFER in some window, preferably a different one.
1676If BUFFER is nil, then some other buffer is chosen. 1676If BUFFER is nil, then some other buffer is chosen.
1677If `pop-up-windows' is non-nil, windows can be split to do this. 1677If `pop-up-windows' is non-nil, windows can be split to do this.
1678If optional second arg OTHER-WINDOW is non-nil, insist on finding another 1678If optional second arg OTHER-WINDOW is nil, insist on finding another
1679window even if BUFFER is already visible in the selected window. 1679window even if BUFFER is already visible in the selected window,
1680and ignore `same-window-regexps' and `same-window-buffer-names'.
1680This uses the function `display-buffer' as a subroutine; see the documentation 1681This uses the function `display-buffer' as a subroutine; see the documentation
1681of `display-buffer' for additional customization information. 1682of `display-buffer' for additional customization information.
1682 1683
diff --git a/src/doc.c b/src/doc.c
index 0e22f6d1059..930afc88e23 100644
--- a/src/doc.c
+++ b/src/doc.c
@@ -821,7 +821,7 @@ thus, \\=\\=\\=\\= puts \\=\\= into the output, and \\=\\=\\=\\[ puts \\=\\[ int
821 start = strp; 821 start = strp;
822 start_idx = start - SDATA (string); 822 start_idx = start - SDATA (string);
823 823
824 while ((strp - SDATA (string) < SCHARS (string)) 824 while ((strp - SDATA (string) < SBYTES (string))
825 && *strp != '}' && *strp != '>') 825 && *strp != '}' && *strp != '>')
826 strp++; 826 strp++;
827 827
diff --git a/src/editfns.c b/src/editfns.c
index 9a1ce81f316..51435af0bb2 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -1,5 +1,5 @@
1/* Lisp functions pertaining to editing. 1/* Lisp functions pertaining to editing.
2 Copyright (C) 1985,86,87,89,93,94,95,96,97,98, 1999, 2000, 2001, 02, 2003 2 Copyright (C) 1985,86,87,89,93,94,95,96,97,98,1999,2000,01,02,03,2004
3 Free Software Foundation, Inc. 3 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
@@ -2741,85 +2741,84 @@ DEFUN ("translate-region", Ftranslate_region, Stranslate_region, 3, 3, 0,
2741 doc: /* From START to END, translate characters according to TABLE. 2741 doc: /* From START to END, translate characters according to TABLE.
2742TABLE is a string; the Nth character in it is the mapping 2742TABLE is a string; the Nth character in it is the mapping
2743for the character with code N. 2743for the character with code N.
2744This function does not alter multibyte characters.
2745It returns the number of characters changed. */) 2744It returns the number of characters changed. */)
2746 (start, end, table) 2745 (start, end, table)
2747 Lisp_Object start; 2746 Lisp_Object start;
2748 Lisp_Object end; 2747 Lisp_Object end;
2749 register Lisp_Object table; 2748 register Lisp_Object table;
2750{ 2749{
2751 register int pos_byte, stop; /* Limits of the region. */
2752 register unsigned char *tt; /* Trans table. */ 2750 register unsigned char *tt; /* Trans table. */
2753 register int nc; /* New character. */ 2751 register int nc; /* New character. */
2754 int cnt; /* Number of changes made. */ 2752 int cnt; /* Number of changes made. */
2755 int size; /* Size of translate table. */ 2753 int size; /* Size of translate table. */
2756 int pos; 2754 int pos, pos_byte;
2757 int multibyte = !NILP (current_buffer->enable_multibyte_characters); 2755 int multibyte = !NILP (current_buffer->enable_multibyte_characters);
2756 int string_multibyte;
2758 2757
2759 validate_region (&start, &end); 2758 validate_region (&start, &end);
2760 CHECK_STRING (table); 2759 CHECK_STRING (table);
2761 2760
2762 size = SBYTES (table); 2761 if (multibyte != (SCHARS (table) < SBYTES (table)))
2762 table = (multibyte
2763 ? string_make_multibyte (table)
2764 : string_make_unibyte (table));
2765 string_multibyte = SCHARS (table) < SBYTES (table);
2766
2767 size = SCHARS (table);
2763 tt = SDATA (table); 2768 tt = SDATA (table);
2764 2769
2765 pos_byte = CHAR_TO_BYTE (XINT (start));
2766 stop = CHAR_TO_BYTE (XINT (end));
2767 modify_region (current_buffer, XINT (start), XINT (end));
2768 pos = XINT (start); 2770 pos = XINT (start);
2771 pos_byte = CHAR_TO_BYTE (pos);
2772 modify_region (current_buffer, pos, XINT (end));
2769 2773
2770 cnt = 0; 2774 cnt = 0;
2771 for (; pos_byte < stop; ) 2775 for (; pos < XINT (end); )
2772 { 2776 {
2773 register unsigned char *p = BYTE_POS_ADDR (pos_byte); 2777 register unsigned char *p = BYTE_POS_ADDR (pos_byte);
2774 int len; 2778 unsigned char *str;
2779 int len, str_len;
2775 int oc; 2780 int oc;
2776 int pos_byte_next;
2777 2781
2778 if (multibyte) 2782 if (multibyte)
2779 oc = STRING_CHAR_AND_LENGTH (p, stop - pos_byte, len); 2783 oc = STRING_CHAR_AND_LENGTH (p, MAX_MULTIBYTE_LENGTH, len);
2780 else 2784 else
2781 oc = *p, len = 1; 2785 oc = *p, len = 1;
2782 pos_byte_next = pos_byte + len; 2786 if (oc < size)
2783 if (oc < size && len == 1)
2784 { 2787 {
2785 nc = tt[oc]; 2788 if (string_multibyte)
2789 {
2790 str = tt + string_char_to_byte (table, oc);
2791 nc = STRING_CHAR_AND_LENGTH (str, MAX_MULTIBYTE_LENGTH, str_len);
2792 }
2793 else
2794 {
2795 str = tt + oc;
2796 nc = tt[oc], str_len = 1;
2797 }
2786 if (nc != oc) 2798 if (nc != oc)
2787 { 2799 {
2788 /* Take care of the case where the new character 2800 if (len != str_len)
2789 combines with neighboring bytes. */
2790 if (!ASCII_BYTE_P (nc)
2791 && (CHAR_HEAD_P (nc)
2792 ? ! CHAR_HEAD_P (FETCH_BYTE (pos_byte + 1))
2793 : (pos_byte > BEG_BYTE
2794 && ! ASCII_BYTE_P (FETCH_BYTE (pos_byte - 1)))))
2795 { 2801 {
2796 Lisp_Object string; 2802 Lisp_Object string;
2797 2803
2798 string = make_multibyte_string (tt + oc, 1, 1);
2799 /* This is less efficient, because it moves the gap, 2804 /* This is less efficient, because it moves the gap,
2800 but it handles combining correctly. */ 2805 but it should multibyte characters correctly. */
2801 replace_range (pos, pos + 1, string, 2806 string = make_multibyte_string (str, 1, str_len);
2802 1, 0, 1); 2807 replace_range (pos, pos + 1, string, 1, 0, 1);
2803 pos_byte_next = CHAR_TO_BYTE (pos); 2808 len = str_len;
2804 if (pos_byte_next > pos_byte)
2805 /* Before combining happened. We should not
2806 increment POS. So, to cancel the later
2807 increment of POS, we decrease it now. */
2808 pos--;
2809 else
2810 INC_POS (pos_byte_next);
2811 } 2809 }
2812 else 2810 else
2813 { 2811 {
2814 record_change (pos, 1); 2812 record_change (pos, 1);
2815 *p = nc; 2813 while (str_len-- > 0)
2814 *p++ = *str++;
2816 signal_after_change (pos, 1, 1); 2815 signal_after_change (pos, 1, 1);
2817 update_compositions (pos, pos + 1, CHECK_BORDER); 2816 update_compositions (pos, pos + 1, CHECK_BORDER);
2818 } 2817 }
2819 ++cnt; 2818 ++cnt;
2820 } 2819 }
2821 } 2820 }
2822 pos_byte = pos_byte_next; 2821 pos_byte += len;
2823 pos++; 2822 pos++;
2824 } 2823 }
2825 2824
diff --git a/src/fringe.c b/src/fringe.c
index b14668e8d7e..48a644707c6 100644
--- a/src/fringe.c
+++ b/src/fringe.c
@@ -637,7 +637,10 @@ draw_fringe_bitmap (w, row, left_p)
637 draw_fringe_bitmap_1 (w, row, left_p, overlay, NO_FRINGE_BITMAP); 637 draw_fringe_bitmap_1 (w, row, left_p, overlay, NO_FRINGE_BITMAP);
638 638
639 if (left_p && row->overlay_arrow_p) 639 if (left_p && row->overlay_arrow_p)
640 draw_fringe_bitmap_1 (w, row, 1, 1, OVERLAY_ARROW_BITMAP); 640 draw_fringe_bitmap_1 (w, row, 1, 1,
641 (w->overlay_arrow_bitmap
642 ? w->overlay_arrow_bitmap
643 : OVERLAY_ARROW_BITMAP));
641} 644}
642 645
643 646
@@ -738,7 +741,7 @@ update_window_fringes (w, force_p)
738 { 741 {
739 unsigned indicate_bob_p, indicate_top_line_p; 742 unsigned indicate_bob_p, indicate_top_line_p;
740 unsigned indicate_eob_p, indicate_bottom_line_p; 743 unsigned indicate_eob_p, indicate_bottom_line_p;
741 744
742 row = w->desired_matrix->rows + rn; 745 row = w->desired_matrix->rows + rn;
743 if (!row->enabled_p) 746 if (!row->enabled_p)
744 row = w->current_matrix->rows + rn; 747 row = w->current_matrix->rows + rn;
@@ -747,7 +750,7 @@ update_window_fringes (w, force_p)
747 indicate_top_line_p = row->indicate_top_line_p; 750 indicate_top_line_p = row->indicate_top_line_p;
748 indicate_eob_p = row->indicate_eob_p; 751 indicate_eob_p = row->indicate_eob_p;
749 indicate_bottom_line_p = row->indicate_bottom_line_p; 752 indicate_bottom_line_p = row->indicate_bottom_line_p;
750 753
751 row->indicate_bob_p = row->indicate_top_line_p = 0; 754 row->indicate_bob_p = row->indicate_top_line_p = 0;
752 row->indicate_eob_p = row->indicate_bottom_line_p = 0; 755 row->indicate_eob_p = row->indicate_bottom_line_p = 0;
753 756
@@ -800,10 +803,6 @@ update_window_fringes (w, force_p)
800 left = row->left_user_fringe_bitmap; 803 left = row->left_user_fringe_bitmap;
801 left_face_id = row->left_user_fringe_face_id; 804 left_face_id = row->left_user_fringe_face_id;
802 } 805 }
803#if 0 /* this is now done via an overlay */
804 else if (row->overlay_arrow_p)
805 left = OVERLAY_ARROW_BITMAP;
806#endif
807 else if (row->indicate_bob_p && boundary_pos <= 0) 806 else if (row->indicate_bob_p && boundary_pos <= 0)
808 left = ((row->indicate_eob_p && boundary_pos < 0) 807 left = ((row->indicate_eob_p && boundary_pos < 0)
809 ? LEFT_BRACKET_BITMAP : TOP_LEFT_ANGLE_BITMAP); 808 ? LEFT_BRACKET_BITMAP : TOP_LEFT_ANGLE_BITMAP);
@@ -882,7 +881,7 @@ update_window_fringes (w, force_p)
882} 881}
883 882
884 883
885/* Compute actual fringe widths for frame F. 884/* Compute actual fringe widths for frame F.
886 885
887 If REDRAW is 1, redraw F if the fringe settings was actually 886 If REDRAW is 1, redraw F if the fringe settings was actually
888 modified and F is visible. 887 modified and F is visible.
@@ -1099,7 +1098,7 @@ DEFUN ("define-fringe-bitmap", Fdefine_fringe_bitmap, Sdefine_fringe_bitmap,
1099BITS is either a string or a vector of integers. 1098BITS is either a string or a vector of integers.
1100HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS. 1099HEIGHT is height of bitmap. If HEIGHT is nil, use length of BITS.
1101WIDTH must be an integer between 1 and 16, or nil which defaults to 8. 1100WIDTH must be an integer between 1 and 16, or nil which defaults to 8.
1102Optional forth arg ALIGN may be one of `top', `center', or `bottom', 1101Optional fourth arg ALIGN may be one of `top', `center', or `bottom',
1103indicating the positioning of the bitmap relative to the rows where it 1102indicating the positioning of the bitmap relative to the rows where it
1104is used; the default is to center the bitmap. Fourth arg may also be a 1103is used; the default is to center the bitmap. Fourth arg may also be a
1105list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap 1104list (ALIGN PERIODIC) where PERIODIC non-nil specifies that the bitmap
@@ -1133,7 +1132,7 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
1133 fill2 = fb.height - h - fill1; 1132 fill2 = fb.height - h - fill1;
1134 } 1133 }
1135 } 1134 }
1136 1135
1137 if (NILP (width)) 1136 if (NILP (width))
1138 fb.width = 8; 1137 fb.width = 8;
1139 else 1138 else
@@ -1220,7 +1219,7 @@ Return new bitmap number, or nil of no more free bitmap slots. */)
1220 1219
1221DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face, 1220DEFUN ("set-fringe-bitmap-face", Fset_fringe_bitmap_face, Sset_fringe_bitmap_face,
1222 1, 2, 0, 1221 1, 2, 0,
1223 doc: /* Set face for fringe bitmap FRINGE-ID to FACE. 1222 doc: /* Set face for fringe bitmap FRINGE-ID to FACE.
1224If FACE is nil, reset face to default fringe face. */) 1223If FACE is nil, reset face to default fringe face. */)
1225 (fringe_id, face) 1224 (fringe_id, face)
1226 Lisp_Object fringe_id, face; 1225 Lisp_Object fringe_id, face;
@@ -1247,7 +1246,7 @@ If FACE is nil, reset face to default fringe face. */)
1247 1246
1248DEFUN ("fringe-bitmaps-at-pos", Ffringe_bitmaps_at_pos, Sfringe_bitmaps_at_pos, 1247DEFUN ("fringe-bitmaps-at-pos", Ffringe_bitmaps_at_pos, Sfringe_bitmaps_at_pos,
1249 0, 2, 0, 1248 0, 2, 0,
1250 doc: /* Return fringe bitmaps of row containing position POS in window WINDOW. 1249 doc: /* Return fringe bitmaps of row containing position POS in window WINDOW.
1251If WINDOW is nil, use selected window. If POS is nil, use value of point 1250If WINDOW is nil, use selected window. If POS is nil, use value of point
1252in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT 1251in that window. Return value is a cons (LEFT . RIGHT) where LEFT and RIGHT
1253are the fringe bitmap numbers for the bitmaps in the left and right fringe, 1252are the fringe bitmap numbers for the bitmaps in the left and right fringe,
@@ -1349,7 +1348,7 @@ w32_reset_fringes ()
1349{ 1348{
1350 /* Destroy row bitmaps. */ 1349 /* Destroy row bitmaps. */
1351 int bt; 1350 int bt;
1352 1351
1353 for (bt = NO_FRINGE_BITMAP + 1; bt < max_used_fringe_bitmap; bt++) 1352 for (bt = NO_FRINGE_BITMAP + 1; bt < max_used_fringe_bitmap; bt++)
1354 rif->destroy_fringe_bitmap (bt); 1353 rif->destroy_fringe_bitmap (bt);
1355} 1354}
diff --git a/src/indent.c b/src/indent.c
index 1b3e5847510..32efcbd0cc7 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1199,7 +1199,6 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1199 = (INTEGERP (current_buffer->selective_display) 1199 = (INTEGERP (current_buffer->selective_display)
1200 ? XINT (current_buffer->selective_display) 1200 ? XINT (current_buffer->selective_display)
1201 : !NILP (current_buffer->selective_display) ? -1 : 0); 1201 : !NILP (current_buffer->selective_display) ? -1 : 0);
1202 int prev_hpos = 0;
1203 int selective_rlen 1202 int selective_rlen
1204 = (selective && dp && VECTORP (DISP_INVIS_VECTOR (dp)) 1203 = (selective && dp && VECTORP (DISP_INVIS_VECTOR (dp))
1205 ? XVECTOR (DISP_INVIS_VECTOR (dp))->size : 0); 1204 ? XVECTOR (DISP_INVIS_VECTOR (dp))->size : 0);
@@ -1227,6 +1226,8 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1227 int wide_column_end_hpos = 0; 1226 int wide_column_end_hpos = 0;
1228 int prev_pos; /* Previous buffer position. */ 1227 int prev_pos; /* Previous buffer position. */
1229 int prev_pos_byte; /* Previous buffer position. */ 1228 int prev_pos_byte; /* Previous buffer position. */
1229 int prev_hpos = 0;
1230 int prev_vpos = 0;
1230 int contin_hpos; /* HPOS of last column of continued line. */ 1231 int contin_hpos; /* HPOS of last column of continued line. */
1231 int prev_tab_offset; /* Previous tab offset. */ 1232 int prev_tab_offset; /* Previous tab offset. */
1232 1233
@@ -1275,6 +1276,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1275 pos = prev_pos; 1276 pos = prev_pos;
1276 pos_byte = prev_pos_byte; 1277 pos_byte = prev_pos_byte;
1277 hpos = prev_hpos; 1278 hpos = prev_hpos;
1279 vpos = prev_vpos;
1278 tab_offset = prev_tab_offset; 1280 tab_offset = prev_tab_offset;
1279 } 1281 }
1280 break; 1282 break;
@@ -1384,6 +1386,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1384 if (pos >= next_boundary) 1386 if (pos >= next_boundary)
1385 next_boundary = pos + 1; 1387 next_boundary = pos + 1;
1386 prev_hpos = width; 1388 prev_hpos = width;
1389 prev_vpos = vpos;
1387 prev_tab_offset = tab_offset; 1390 prev_tab_offset = tab_offset;
1388 } 1391 }
1389 } 1392 }
@@ -1416,6 +1419,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1416 pos = prev_pos; 1419 pos = prev_pos;
1417 pos_byte = prev_pos_byte; 1420 pos_byte = prev_pos_byte;
1418 hpos = prev_hpos; 1421 hpos = prev_hpos;
1422 vpos = prev_vpos;
1419 tab_offset = prev_tab_offset; 1423 tab_offset = prev_tab_offset;
1420 1424
1421 /* NOTE on contin_hpos, hpos, and prev_hpos. 1425 /* NOTE on contin_hpos, hpos, and prev_hpos.
@@ -1436,10 +1440,6 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1436 hpos = contin_hpos; 1440 hpos = contin_hpos;
1437 vpos = vpos - 1; 1441 vpos = vpos - 1;
1438 } 1442 }
1439 else if (c == '\n')
1440 /* If previous character is NEWLINE,
1441 set VPOS back to previous line */
1442 vpos = vpos - 1;
1443 break; 1443 break;
1444 } 1444 }
1445 1445
@@ -1457,6 +1457,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1457 pos = prev_pos; 1457 pos = prev_pos;
1458 pos_byte = prev_pos_byte; 1458 pos_byte = prev_pos_byte;
1459 hpos = prev_hpos; 1459 hpos = prev_hpos;
1460 vpos = prev_vpos;
1460 tab_offset = prev_tab_offset; 1461 tab_offset = prev_tab_offset;
1461 } 1462 }
1462 break; 1463 break;
@@ -1465,6 +1466,7 @@ compute_motion (from, fromvpos, fromhpos, did_motion, to, tovpos, tohpos, width,
1465 break; 1466 break;
1466 1467
1467 prev_hpos = hpos; 1468 prev_hpos = hpos;
1469 prev_vpos = vpos;
1468 prev_pos = pos; 1470 prev_pos = pos;
1469 prev_pos_byte = pos_byte; 1471 prev_pos_byte = pos_byte;
1470 wide_column_end_hpos = 0; 1472 wide_column_end_hpos = 0;
diff --git a/src/makefile.w32-in b/src/makefile.w32-in
index 1007e3940b0..0c153b185d8 100644
--- a/src/makefile.w32-in
+++ b/src/makefile.w32-in
@@ -723,6 +723,21 @@ $(BLD)/frame.$(O) : \
723 $(SRC)/w32term.h \ 723 $(SRC)/w32term.h \
724 $(SRC)/window.h 724 $(SRC)/window.h
725 725
726$(BLD)/fringe.$(O) : \
727 $(SRC)/fringe.c \
728 $(EMACS_ROOT)/src/s/ms-w32.h \
729 $(EMACS_ROOT)/src/m/intel386.h \
730 $(EMACS_ROOT)/src/config.h \
731 $(SRC)/atimer.h \
732 $(SRC)/blockinput.h \
733 $(SRC)/buffer.h \
734 $(SRC)/dispextern.h \
735 $(SRC)/frame.h \
736 $(SRC)/systime.h \
737 $(SRC)/w32bdf.h \
738 $(SRC)/w32gui.h \
739 $(SRC)/window.h
740
726$(BLD)/gmalloc.$(O) : \ 741$(BLD)/gmalloc.$(O) : \
727 $(SRC)/gmalloc.c \ 742 $(SRC)/gmalloc.c \
728 $(EMACS_ROOT)/src/s/ms-w32.h \ 743 $(EMACS_ROOT)/src/s/ms-w32.h \
diff --git a/src/s/sol2-6.h b/src/s/sol2-6.h
index a43443e48c2..3ba9ed1f5bd 100644
--- a/src/s/sol2-6.h
+++ b/src/s/sol2-6.h
@@ -7,5 +7,10 @@
7#define UNEXEC unexsol.o 7#define UNEXEC unexsol.o
8#endif 8#endif
9 9
10/* "Dennis McRitchie" <dmcr@Princeton.EDU> reported failures
11 with GNU ld without this. */
12
13#define LD_SWITCH_SYSTEM_TEMACS -znocombreloc
14
10/* arch-tag: 71ea3857-89dc-4395-9623-77964e6ed3ca 15/* arch-tag: 71ea3857-89dc-4395-9623-77964e6ed3ca
11 (do not change this comment) */ 16 (do not change this comment) */
diff --git a/src/w32term.c b/src/w32term.c
index c59dabc27b0..41c188a2414 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -4394,7 +4394,7 @@ w32_read_socket (sd, expected, hold_quit)
4394 4394
4395 if (tool_bar_p 4395 if (tool_bar_p
4396 || (dpyinfo->w32_focus_frame 4396 || (dpyinfo->w32_focus_frame
4397 && f == dpyinfo->w32_focus_frame)) 4397 && f != dpyinfo->w32_focus_frame))
4398 inev.kind = NO_EVENT; 4398 inev.kind = NO_EVENT;
4399 } 4399 }
4400 4400
diff --git a/src/window.c b/src/window.c
index 7419239752a..0192aa4edf6 100644
--- a/src/window.c
+++ b/src/window.c
@@ -281,6 +281,7 @@ make_window ()
281 p->fringes_outside_margins = Qnil; 281 p->fringes_outside_margins = Qnil;
282 p->scroll_bar_width = Qnil; 282 p->scroll_bar_width = Qnil;
283 p->vertical_scroll_bar_type = Qt; 283 p->vertical_scroll_bar_type = Qt;
284 p->overlay_arrow_bitmap = 0;
284 285
285 Vwindow_list = Qnil; 286 Vwindow_list = Qnil;
286 return val; 287 return val;
@@ -3269,9 +3270,10 @@ Returns the window displaying BUFFER.
3269If `display-buffer-reuse-frames' is non-nil, and another frame is currently 3270If `display-buffer-reuse-frames' is non-nil, and another frame is currently
3270displaying BUFFER, then simply raise that frame. 3271displaying BUFFER, then simply raise that frame.
3271 3272
3272The variables `special-display-buffer-names', `special-display-regexps', 3273The variables `special-display-buffer-names',
3273`same-window-buffer-names', and `same-window-regexps' customize how certain 3274`special-display-regexps', `same-window-buffer-names', and
3274buffer names are handled. 3275`same-window-regexps' customize how certain buffer names are handled.
3276The latter two take effect only if NOT-THIS-WINDOW is t.
3275 3277
3276If optional argument FRAME is `visible', search all visible frames. 3278If optional argument FRAME is `visible', search all visible frames.
3277If FRAME is 0, search all visible and iconified frames. 3279If FRAME is 0, search all visible and iconified frames.
diff --git a/src/window.h b/src/window.h
index f45ca39bb93..ef81da43b4d 100644
--- a/src/window.h
+++ b/src/window.h
@@ -254,6 +254,9 @@ struct window
254 /* This is handy for undrawing the cursor. */ 254 /* This is handy for undrawing the cursor. */
255 int phys_cursor_ascent, phys_cursor_height; 255 int phys_cursor_ascent, phys_cursor_height;
256 256
257 /* Alternate overlay-arrow-bitmap in this window. */
258 int overlay_arrow_bitmap;
259
257 /* Non-zero means the cursor is currently displayed. This can be 260 /* Non-zero means the cursor is currently displayed. This can be
258 set to zero by functions overpainting the cursor image. */ 261 set to zero by functions overpainting the cursor image. */
259 unsigned phys_cursor_on_p : 1; 262 unsigned phys_cursor_on_p : 1;
diff --git a/src/xdisp.c b/src/xdisp.c
index 67f21446320..bb7ce740a63 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -403,6 +403,13 @@ int multiple_frames;
403 403
404Lisp_Object Vglobal_mode_string; 404Lisp_Object Vglobal_mode_string;
405 405
406
407/* List of variables (symbols) which hold markers for overlay arrows.
408 The symbols on this list are examined during redisplay to determine
409 where to display overlay arrows. */
410
411Lisp_Object Voverlay_arrow_variable_list;
412
406/* Marker for where to display an arrow on top of the buffer text. */ 413/* Marker for where to display an arrow on top of the buffer text. */
407 414
408Lisp_Object Voverlay_arrow_position; 415Lisp_Object Voverlay_arrow_position;
@@ -411,11 +418,17 @@ Lisp_Object Voverlay_arrow_position;
411 418
412Lisp_Object Voverlay_arrow_string; 419Lisp_Object Voverlay_arrow_string;
413 420
414/* Values of those variables at last redisplay. However, if 421/* Values of those variables at last redisplay are stored as
415 Voverlay_arrow_position is a marker, last_arrow_position is its 422 properties on `overlay-arrow-position' symbol. However, if
423 Voverlay_arrow_position is a marker, last-arrow-position is its
416 numerical position. */ 424 numerical position. */
417 425
418static Lisp_Object last_arrow_position, last_arrow_string; 426Lisp_Object Qlast_arrow_position, Qlast_arrow_string;
427
428/* Alternative overlay-arrow-string and overlay-arrow-bitmap
429 properties on a symbol in overlay-arrow-variable-list. */
430
431Lisp_Object Qoverlay_arrow_string, Qoverlay_arrow_bitmap;
419 432
420/* Like mode-line-format, but for the title bar on a visible frame. */ 433/* Like mode-line-format, but for the title bar on a visible frame. */
421 434
@@ -828,7 +841,8 @@ static struct text_pos display_prop_end P_ ((struct it *, Lisp_Object,
828static int compute_window_start_on_continuation_line P_ ((struct window *)); 841static int compute_window_start_on_continuation_line P_ ((struct window *));
829static Lisp_Object safe_eval_handler P_ ((Lisp_Object)); 842static Lisp_Object safe_eval_handler P_ ((Lisp_Object));
830static void insert_left_trunc_glyphs P_ ((struct it *)); 843static void insert_left_trunc_glyphs P_ ((struct it *));
831static struct glyph_row *get_overlay_arrow_glyph_row P_ ((struct window *)); 844static struct glyph_row *get_overlay_arrow_glyph_row P_ ((struct window *,
845 Lisp_Object));
832static void extend_face_to_end_of_line P_ ((struct it *)); 846static void extend_face_to_end_of_line P_ ((struct it *));
833static int append_space P_ ((struct it *, int)); 847static int append_space P_ ((struct it *, int));
834static int make_cursor_line_fully_visible P_ ((struct window *)); 848static int make_cursor_line_fully_visible P_ ((struct window *));
@@ -9316,6 +9330,153 @@ redisplay ()
9316} 9330}
9317 9331
9318 9332
9333static Lisp_Object
9334overlay_arrow_string_or_property (var, pbitmap)
9335 Lisp_Object var;
9336 int *pbitmap;
9337{
9338 Lisp_Object pstr = Fget (var, Qoverlay_arrow_string);
9339 Lisp_Object bitmap;
9340
9341 if (pbitmap)
9342 {
9343 *pbitmap = 0;
9344 if (bitmap = Fget (var, Qoverlay_arrow_bitmap), INTEGERP (bitmap))
9345 *pbitmap = XINT (bitmap);
9346 }
9347
9348 if (!NILP (pstr))
9349 return pstr;
9350 return Voverlay_arrow_string;
9351}
9352
9353/* Return 1 if there are any overlay-arrows in current_buffer. */
9354static int
9355overlay_arrow_in_current_buffer_p ()
9356{
9357 Lisp_Object vlist;
9358
9359 for (vlist = Voverlay_arrow_variable_list;
9360 CONSP (vlist);
9361 vlist = XCDR (vlist))
9362 {
9363 Lisp_Object var = XCAR (vlist);
9364 Lisp_Object val;
9365
9366 if (!SYMBOLP (var))
9367 continue;
9368 val = find_symbol_value (var);
9369 if (MARKERP (val)
9370 && current_buffer == XMARKER (val)->buffer)
9371 return 1;
9372 }
9373 return 0;
9374}
9375
9376
9377/* Return 1 if any overlay_arrows have moved or overlay-arrow-string
9378 has changed. */
9379
9380static int
9381overlay_arrows_changed_p ()
9382{
9383 Lisp_Object vlist;
9384
9385 for (vlist = Voverlay_arrow_variable_list;
9386 CONSP (vlist);
9387 vlist = XCDR (vlist))
9388 {
9389 Lisp_Object var = XCAR (vlist);
9390 Lisp_Object val, pstr;
9391
9392 if (!SYMBOLP (var))
9393 continue;
9394 val = find_symbol_value (var);
9395 if (!MARKERP (val))
9396 continue;
9397 if (! EQ (COERCE_MARKER (val),
9398 Fget (var, Qlast_arrow_position))
9399 || ! (pstr = overlay_arrow_string_or_property (var, 0),
9400 EQ (pstr, Fget (var, Qlast_arrow_string))))
9401 return 1;
9402 }
9403 return 0;
9404}
9405
9406/* Mark overlay arrows to be updated on next redisplay. */
9407
9408static void
9409update_overlay_arrows (up_to_date)
9410 int up_to_date;
9411{
9412 Lisp_Object vlist;
9413
9414 for (vlist = Voverlay_arrow_variable_list;
9415 CONSP (vlist);
9416 vlist = XCDR (vlist))
9417 {
9418 Lisp_Object var = XCAR (vlist);
9419
9420 if (!SYMBOLP (var))
9421 continue;
9422
9423 if (up_to_date)
9424 {
9425 Lisp_Object val = find_symbol_value (var);
9426 Fput (var, Qlast_arrow_position,
9427 COERCE_MARKER (val));
9428 Fput (var, Qlast_arrow_string,
9429 overlay_arrow_string_or_property (var, 0));
9430 }
9431 else if (up_to_date < 0
9432 || !NILP (Fget (var, Qlast_arrow_position)))
9433 {
9434 Fput (var, Qlast_arrow_position, Qt);
9435 Fput (var, Qlast_arrow_string, Qt);
9436 }
9437 }
9438}
9439
9440
9441/* Return overlay arrow string at row, or nil. */
9442
9443static Lisp_Object
9444overlay_arrow_at_row (f, row, pbitmap)
9445 struct frame *f;
9446 struct glyph_row *row;
9447 int *pbitmap;
9448{
9449 Lisp_Object vlist;
9450
9451 for (vlist = Voverlay_arrow_variable_list;
9452 CONSP (vlist);
9453 vlist = XCDR (vlist))
9454 {
9455 Lisp_Object var = XCAR (vlist);
9456 Lisp_Object val;
9457
9458 if (!SYMBOLP (var))
9459 continue;
9460
9461 val = find_symbol_value (var);
9462
9463 if (MARKERP (val)
9464 && current_buffer == XMARKER (val)->buffer
9465 && (MATRIX_ROW_START_CHARPOS (row) == marker_position (val)))
9466 {
9467 val = overlay_arrow_string_or_property (var, pbitmap);
9468 if (FRAME_WINDOW_P (f))
9469 return Qt;
9470 else if (STRINGP (val))
9471 return val;
9472 break;
9473 }
9474 }
9475
9476 *pbitmap = 0;
9477 return Qnil;
9478}
9479
9319/* Return 1 if point moved out of or into a composition. Otherwise 9480/* Return 1 if point moved out of or into a composition. Otherwise
9320 return 0. PREV_BUF and PREV_PT are the last point buffer and 9481 return 0. PREV_BUF and PREV_PT are the last point buffer and
9321 position. BUF and PT are the current point buffer and position. */ 9482 position. BUF and PT are the current point buffer and position. */
@@ -9595,8 +9756,7 @@ redisplay_internal (preserve_echo_area)
9595 9756
9596 /* If specs for an arrow have changed, do thorough redisplay 9757 /* If specs for an arrow have changed, do thorough redisplay
9597 to ensure we remove any arrow that should no longer exist. */ 9758 to ensure we remove any arrow that should no longer exist. */
9598 if (! EQ (COERCE_MARKER (Voverlay_arrow_position), last_arrow_position) 9759 if (overlay_arrows_changed_p ())
9599 || ! EQ (Voverlay_arrow_string, last_arrow_string))
9600 consider_all_windows_p = windows_or_buffers_changed = 1; 9760 consider_all_windows_p = windows_or_buffers_changed = 1;
9601 9761
9602 /* Normally the message* functions will have already displayed and 9762 /* Normally the message* functions will have already displayed and
@@ -10056,11 +10216,7 @@ redisplay_internal (preserve_echo_area)
10056 CHARPOS (this_line_start_pos) = 0; 10216 CHARPOS (this_line_start_pos) = 0;
10057 10217
10058 /* Let the overlay arrow be updated the next time. */ 10218 /* Let the overlay arrow be updated the next time. */
10059 if (!NILP (last_arrow_position)) 10219 update_overlay_arrows (0);
10060 {
10061 last_arrow_position = Qt;
10062 last_arrow_string = Qt;
10063 }
10064 10220
10065 /* If we pause after scrolling, some rows in the current 10221 /* If we pause after scrolling, some rows in the current
10066 matrices of some windows are not valid. */ 10222 matrices of some windows are not valid. */
@@ -10076,8 +10232,8 @@ redisplay_internal (preserve_echo_area)
10076 consider_all_windows_p is set. */ 10232 consider_all_windows_p is set. */
10077 mark_window_display_accurate_1 (w, 1); 10233 mark_window_display_accurate_1 (w, 1);
10078 10234
10079 last_arrow_position = COERCE_MARKER (Voverlay_arrow_position); 10235 /* Say overlay arrows are up to date. */
10080 last_arrow_string = Voverlay_arrow_string; 10236 update_overlay_arrows (1);
10081 10237
10082 if (FRAME_DISPLAY (sf)->frame_up_to_date_hook != 0) 10238 if (FRAME_DISPLAY (sf)->frame_up_to_date_hook != 0)
10083 FRAME_DISPLAY (sf)->frame_up_to_date_hook (sf); 10239 FRAME_DISPLAY (sf)->frame_up_to_date_hook (sf);
@@ -10273,16 +10429,14 @@ mark_window_display_accurate (window, accurate_p)
10273 10429
10274 if (accurate_p) 10430 if (accurate_p)
10275 { 10431 {
10276 last_arrow_position = COERCE_MARKER (Voverlay_arrow_position); 10432 update_overlay_arrows (1);
10277 last_arrow_string = Voverlay_arrow_string;
10278 } 10433 }
10279 else 10434 else
10280 { 10435 {
10281 /* Force a thorough redisplay the next time by setting 10436 /* Force a thorough redisplay the next time by setting
10282 last_arrow_position and last_arrow_string to t, which is 10437 last_arrow_position and last_arrow_string to t, which is
10283 unequal to any useful value of Voverlay_arrow_... */ 10438 unequal to any useful value of Voverlay_arrow_... */
10284 last_arrow_position = Qt; 10439 update_overlay_arrows (-1);
10285 last_arrow_string = Qt;
10286 } 10440 }
10287} 10441}
10288 10442
@@ -11033,8 +11187,7 @@ try_cursor_movement (window, startp, scroll_step)
11033 && INTEGERP (w->window_end_vpos) 11187 && INTEGERP (w->window_end_vpos)
11034 && XFASTINT (w->window_end_vpos) < w->current_matrix->nrows 11188 && XFASTINT (w->window_end_vpos) < w->current_matrix->nrows
11035 && (FRAME_WINDOW_P (f) 11189 && (FRAME_WINDOW_P (f)
11036 || !MARKERP (Voverlay_arrow_position) 11190 || !overlay_arrow_in_current_buffer_p ()))
11037 || current_buffer != XMARKER (Voverlay_arrow_position)->buffer))
11038 { 11191 {
11039 int this_scroll_margin; 11192 int this_scroll_margin;
11040 struct glyph_row *row = NULL; 11193 struct glyph_row *row = NULL;
@@ -12786,8 +12939,7 @@ try_window_id (w)
12786 GIVE_UP (10); 12939 GIVE_UP (10);
12787 12940
12788 /* Can use this if overlay arrow position and or string have changed. */ 12941 /* Can use this if overlay arrow position and or string have changed. */
12789 if (!EQ (last_arrow_position, COERCE_MARKER (Voverlay_arrow_position)) 12942 if (overlay_arrows_changed_p ())
12790 || !EQ (last_arrow_string, Voverlay_arrow_string))
12791 GIVE_UP (12); 12943 GIVE_UP (12);
12792 12944
12793 12945
@@ -13724,14 +13876,15 @@ usage: (trace-to-stderr STRING &rest OBJECTS) */)
13724 arrow. Only used for non-window-redisplay windows. */ 13876 arrow. Only used for non-window-redisplay windows. */
13725 13877
13726static struct glyph_row * 13878static struct glyph_row *
13727get_overlay_arrow_glyph_row (w) 13879get_overlay_arrow_glyph_row (w, overlay_arrow_string)
13728 struct window *w; 13880 struct window *w;
13881 Lisp_Object overlay_arrow_string;
13729{ 13882{
13730 struct frame *f = XFRAME (WINDOW_FRAME (w)); 13883 struct frame *f = XFRAME (WINDOW_FRAME (w));
13731 struct buffer *buffer = XBUFFER (w->buffer); 13884 struct buffer *buffer = XBUFFER (w->buffer);
13732 struct buffer *old = current_buffer; 13885 struct buffer *old = current_buffer;
13733 const unsigned char *arrow_string = SDATA (Voverlay_arrow_string); 13886 const unsigned char *arrow_string = SDATA (overlay_arrow_string);
13734 int arrow_len = SCHARS (Voverlay_arrow_string); 13887 int arrow_len = SCHARS (overlay_arrow_string);
13735 const unsigned char *arrow_end = arrow_string + arrow_len; 13888 const unsigned char *arrow_end = arrow_string + arrow_len;
13736 const unsigned char *p; 13889 const unsigned char *p;
13737 struct it it; 13890 struct it it;
@@ -13758,7 +13911,7 @@ get_overlay_arrow_glyph_row (w)
13758 13911
13759 /* Get its face. */ 13912 /* Get its face. */
13760 ilisp = make_number (p - arrow_string); 13913 ilisp = make_number (p - arrow_string);
13761 face = Fget_text_property (ilisp, Qface, Voverlay_arrow_string); 13914 face = Fget_text_property (ilisp, Qface, overlay_arrow_string);
13762 it.face_id = compute_char_face (f, it.c, face); 13915 it.face_id = compute_char_face (f, it.c, face);
13763 13916
13764 /* Compute its width, get its glyphs. */ 13917 /* Compute its width, get its glyphs. */
@@ -14197,6 +14350,8 @@ display_line (it)
14197 struct it *it; 14350 struct it *it;
14198{ 14351{
14199 struct glyph_row *row = it->glyph_row; 14352 struct glyph_row *row = it->glyph_row;
14353 int overlay_arrow_bitmap;
14354 Lisp_Object overlay_arrow_string;
14200 14355
14201 /* We always start displaying at hpos zero even if hscrolled. */ 14356 /* We always start displaying at hpos zero even if hscrolled. */
14202 xassert (it->hpos == 0 && it->current_x == 0); 14357 xassert (it->hpos == 0 && it->current_x == 0);
@@ -14592,17 +14747,16 @@ display_line (it)
14592 mark this glyph row as the one containing the overlay arrow. 14747 mark this glyph row as the one containing the overlay arrow.
14593 This is clearly a mess with variable size fonts. It would be 14748 This is clearly a mess with variable size fonts. It would be
14594 better to let it be displayed like cursors under X. */ 14749 better to let it be displayed like cursors under X. */
14595 if (MARKERP (Voverlay_arrow_position) 14750 if (! overlay_arrow_seen
14596 && current_buffer == XMARKER (Voverlay_arrow_position)->buffer 14751 && (overlay_arrow_string
14597 && (MATRIX_ROW_START_CHARPOS (row) 14752 = overlay_arrow_at_row (it->f, row, &overlay_arrow_bitmap),
14598 == marker_position (Voverlay_arrow_position)) 14753 !NILP (overlay_arrow_string)))
14599 && STRINGP (Voverlay_arrow_string)
14600 && ! overlay_arrow_seen)
14601 { 14754 {
14602 /* Overlay arrow in window redisplay is a fringe bitmap. */ 14755 /* Overlay arrow in window redisplay is a fringe bitmap. */
14603 if (!FRAME_WINDOW_P (it->f)) 14756 if (!FRAME_WINDOW_P (it->f))
14604 { 14757 {
14605 struct glyph_row *arrow_row = get_overlay_arrow_glyph_row (it->w); 14758 struct glyph_row *arrow_row
14759 = get_overlay_arrow_glyph_row (it->w, overlay_arrow_string);
14606 struct glyph *glyph = arrow_row->glyphs[TEXT_AREA]; 14760 struct glyph *glyph = arrow_row->glyphs[TEXT_AREA];
14607 struct glyph *arrow_end = glyph + arrow_row->used[TEXT_AREA]; 14761 struct glyph *arrow_end = glyph + arrow_row->used[TEXT_AREA];
14608 struct glyph *p = row->glyphs[TEXT_AREA]; 14762 struct glyph *p = row->glyphs[TEXT_AREA];
@@ -14626,6 +14780,7 @@ display_line (it)
14626 } 14780 }
14627 14781
14628 overlay_arrow_seen = 1; 14782 overlay_arrow_seen = 1;
14783 it->w->overlay_arrow_bitmap = overlay_arrow_bitmap;
14629 row->overlay_arrow_p = 1; 14784 row->overlay_arrow_p = 1;
14630 } 14785 }
14631 14786
@@ -17707,6 +17862,9 @@ produce_image_glyph (it)
17707 if (it->image_id < 0) 17862 if (it->image_id < 0)
17708 { 17863 {
17709 /* Fringe bitmap. */ 17864 /* Fringe bitmap. */
17865 it->ascent = it->phys_ascent = 0;
17866 it->descent = it->phys_descent = 0;
17867 it->pixel_width = 0;
17710 it->nglyphs = 0; 17868 it->nglyphs = 0;
17711 return; 17869 return;
17712 } 17870 }
@@ -21433,10 +21591,15 @@ syms_of_xdisp ()
21433 list_of_error = Fcons (intern ("error"), Qnil); 21591 list_of_error = Fcons (intern ("error"), Qnil);
21434 staticpro (&list_of_error); 21592 staticpro (&list_of_error);
21435 21593
21436 last_arrow_position = Qnil; 21594 Qlast_arrow_position = intern ("last-arrow-position");
21437 last_arrow_string = Qnil; 21595 staticpro (&Qlast_arrow_position);
21438 staticpro (&last_arrow_position); 21596 Qlast_arrow_string = intern ("last-arrow-string");
21439 staticpro (&last_arrow_string); 21597 staticpro (&Qlast_arrow_string);
21598
21599 Qoverlay_arrow_string = intern ("overlay-arrow-string");
21600 staticpro (&Qoverlay_arrow_string);
21601 Qoverlay_arrow_bitmap = intern ("overlay-arrow-bitmap");
21602 staticpro (&Qoverlay_arrow_bitmap);
21440 21603
21441 echo_buffer[0] = echo_buffer[1] = Qnil; 21604 echo_buffer[0] = echo_buffer[1] = Qnil;
21442 staticpro (&echo_buffer[0]); 21605 staticpro (&echo_buffer[0]);
@@ -21500,9 +21663,17 @@ See also `overlay-arrow-string'. */);
21500 Voverlay_arrow_position = Qnil; 21663 Voverlay_arrow_position = Qnil;
21501 21664
21502 DEFVAR_LISP ("overlay-arrow-string", &Voverlay_arrow_string, 21665 DEFVAR_LISP ("overlay-arrow-string", &Voverlay_arrow_string,
21503 doc: /* String to display as an arrow. See also `overlay-arrow-position'. */); 21666 doc: /* String to display as an arrow in non-window frames.
21667See also `overlay-arrow-position'. */);
21504 Voverlay_arrow_string = Qnil; 21668 Voverlay_arrow_string = Qnil;
21505 21669
21670 DEFVAR_LISP ("overlay-arrow-variable-list", &Voverlay_arrow_variable_list,
21671 doc: /* List of variables (symbols) which hold markers for overlay arrows.
21672The symbols on this list are examined during redisplay to determine
21673where to display overlay arrows. */);
21674 Voverlay_arrow_variable_list
21675 = Fcons (intern ("overlay-arrow-position"), Qnil);
21676
21506 DEFVAR_INT ("scroll-step", &scroll_step, 21677 DEFVAR_INT ("scroll-step", &scroll_step,
21507 doc: /* *The number of lines to try scrolling a window by when point moves out. 21678 doc: /* *The number of lines to try scrolling a window by when point moves out.
21508If that fails to bring point back on frame, point is centered instead. 21679If that fails to bring point back on frame, point is centered instead.
diff --git a/src/xfns.c b/src/xfns.c
index 9f21cc98502..b2b16defdbd 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -3762,8 +3762,17 @@ If omitted or nil, that stands for the selected frame's display. */)
3762{ 3762{
3763 struct x_display_info *dpyinfo = check_x_display_info (display); 3763 struct x_display_info *dpyinfo = check_x_display_info (display);
3764 3764
3765 return make_number (DisplayCells (dpyinfo->display, 3765 int nr_planes = DisplayPlanes (dpyinfo->display,
3766 XScreenNumberOfScreen (dpyinfo->screen))); 3766 XScreenNumberOfScreen (dpyinfo->screen));
3767
3768 /* Truncate nr_planes to 24 to avoid integer overflow.
3769 Some displays says 32, but only 24 bits are actually significant.
3770 There are only very few and rare video cards that have more than
3771 24 significant bits. Also 24 bits is more than 16 million colors,
3772 it "should be enough for everyone". */
3773 if (nr_planes > 24) nr_planes = 24;
3774
3775 return make_number (1 << nr_planes);
3767} 3776}
3768 3777
3769DEFUN ("x-server-max-request-size", Fx_server_max_request_size, 3778DEFUN ("x-server-max-request-size", Fx_server_max_request_size,