aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMiles Bader2006-01-25 07:10:04 +0000
committerMiles Bader2006-01-25 07:10:04 +0000
commitb2ba4dcba149f845bf7fcf15b6cede6a6cbcc336 (patch)
treed9ca500b0501201584dbab3b74a83d1ba7e374c9 /src
parent90fc2bc59774318b3db7c3642df00a1297f6b7ff (diff)
parent7347faa822b5ea177df5b2ed7a2b7d79194f0bcc (diff)
downloademacs-b2ba4dcba149f845bf7fcf15b6cede6a6cbcc336.tar.gz
emacs-b2ba4dcba149f845bf7fcf15b6cede6a6cbcc336.zip
Revision: emacs@sv.gnu.org/emacs--unicode--0--patch-7
Merge from emacs--devo--0 Patches applied: * emacs--devo--0 (patch 4-14) - Update from CVS - Merge from gnus--rel--5.10 * gnus--rel--5.10 (base, patch 1-7) - tag of miles@gnu.org--gnu-2005/gnus--rel--5.10--patch-187 - Update from CVS - Merge from emacs--devo--0 * miles@gnu.org--gnu-2005/gnus--rel--5.10 (patch 187) - Update from CVS
Diffstat (limited to 'src')
-rw-r--r--src/.gdbinit27
-rw-r--r--src/ChangeLog140
-rw-r--r--src/alloc.c23
-rw-r--r--src/dired.c10
-rw-r--r--src/keyboard.c16
-rw-r--r--src/keymap.c6
-rw-r--r--src/lread.c8
-rw-r--r--src/minibuf.c3
-rw-r--r--src/puresize.h2
-rw-r--r--src/regex.c9
-rw-r--r--src/s/irix6-5.h4
-rw-r--r--src/w32.c18
-rw-r--r--src/xdisp.c44
-rw-r--r--src/xterm.c57
14 files changed, 268 insertions, 99 deletions
diff --git a/src/.gdbinit b/src/.gdbinit
index 6573b86f5da..7c04aae8a78 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -789,18 +789,21 @@ set args -geometry 80x40+0+0
789 789
790# People get bothered when they see messages about non-existent functions... 790# People get bothered when they see messages about non-existent functions...
791xgetptr Vsystem_type 791xgetptr Vsystem_type
792set $tem = (struct Lisp_Symbol *) $ptr 792# $ptr is NULL in temacs
793xgetptr $tem->xname 793if ($ptr != 0)
794set $tem = (struct Lisp_String *) $ptr 794 set $tem = (struct Lisp_Symbol *) $ptr
795set $tem = (char *) $tem->data 795 xgetptr $tem->xname
796 796 set $tem = (struct Lisp_String *) $ptr
797# Don't let abort actually run, as it will make stdio stop working and 797 set $tem = (char *) $tem->data
798# therefore the `pr' command above as well. 798
799if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd' 799 # Don't let abort actually run, as it will make stdio stop working and
800 # The windows-nt build replaces abort with its own function. 800 # therefore the `pr' command above as well.
801 break w32_abort 801 if $tem[0] == 'w' && $tem[1] == 'i' && $tem[2] == 'n' && $tem[3] == 'd'
802else 802 # The windows-nt build replaces abort with its own function.
803 break abort 803 break w32_abort
804 else
805 break abort
806 end
804end 807end
805 808
806# x_error_quitter is defined only on X. But window-system is set up 809# x_error_quitter is defined only on X. But window-system is set up
diff --git a/src/ChangeLog b/src/ChangeLog
index 607492c5608..0a77c8fff3b 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,91 @@
12006-01-24 Stefan Monnier <monnier@iro.umontreal.ca>
2
3 * regex.c (IMMEDIATE_QUIT_CHECK): Use it with SYNC_INPUT as well.
4 (re_match_2_internal) <on_failure_jump, on_failure_jump_smart>:
5 Don't check for quit, since any loop will go through fail or jump.
6
72006-01-24 Chong Yidong <cyd@stupidchicken.com>
8
9 * alloc.c (allocate_string_data): Update next_free immediately, to
10 reduce risk of memory clobberage.
11
122006-01-24 L$,1 q(Brentey K,Aa(Broly <lorentey@elte.hu>
13
14 * xdisp.c (handle_invisible_prop): Set it->position to fix cursor
15 display when point moves across an ellipsis. If there are
16 adjacent invisible texts, don't lose the second one's ellipsis.
17 (x_produce_glyphs): Doc fix.
18
192006-01-23 Stefan Monnier <monnier@iro.umontreal.ca>
20
21 * xterm.c (x_catch_errors_unwind): Yet another int/Lisp_Object mixup.
22
232006-01-23 Kim F. Storm <storm@cua.dk>
24
25 * xdisp.c (handle_single_display_spec): Fix handling of space
26 property on char from string: set *position rather than
27 it->current.pos.
28 (produce_stretch_glyph): Reduce width of stretch glyphs so they
29 don't get wider than the window (unless truncate-lines is on).
30
312006-01-22 Stefan Monnier <monnier@iro.umontreal.ca>
32
33 * xterm.c: Avoid allocating Lisp data from a signal handler.
34 (x_error_message): New var to replace x_error_message_string.
35 (x_error_catcher, x_catch_errors, x_catch_errors_unwind)
36 (x_check_errors, x_had_errors_p, x_clear_errors, x_error_handler)
37 (syms_of_xterm): Use it instead of x_error_message_string.
38
39 * alloc.c (lisp_align_free): Add an assertion.
40 (make_interval, allocate_string, make_float, Fcons, Fmake_symbol)
41 (allocate_misc): If ENABLE_CHECKING is on, check we're not called from
42 a signal handler.
43
442006-01-21 Luc Teirlinck <teirllm@auburn.edu>
45
46 * dired.c (syms_of_dired) <completion-ignored-extensions>: Doc fix.
47
482006-01-21 Romain Francoise <romain@orebokech.com>
49
50 * xdisp.c (get_window_cursor_type): Fix last change.
51 Update copyright year.
52
532006-01-20 Eli Zaretskii <eliz@gnu.org>
54
55 * lread.c (Fload): Don't leak the file descriptor returned by
56 openp if we are going to signal an error.
57
58 * w32.c (sys_close): If FD is outside [0..MAXDESC) limits, pass it
59 directly to _close.
60 (sys_dup): Protect against new_fd larger than fd_info[] can handle.
61 (sys_read): If FD is outside [0..MAXDESC) limits, pass it directly
62 to _read.
63 (sys_write): If FD is outside [0..MAXDESC) limits, pass it
64 directly to _write.
65
66 * .gdbinit: Don't dereference Vsystem_type's Lisp_Symbol pointer
67 if it is NULL.
68
692006-01-20 Kenichi Handa <handa@m17n.org>
70
71 * puresize.h (BASE_PURESIZE): Increment to 1190000.
72
732006-01-19 Chong Yidong <cyd@stupidchicken.com>
74
75 * xdisp.c (get_window_cursor_type): Use cursor type specified by
76 the selected buffer for the echo area too.
77
782006-01-19 Richard M. Stallman <rms@gnu.org>
79
80 * keymap.c (Fmap_keymap): Doc fix.
81
82 * s/irix6-5.h (GC_SETJMP_WORKS, GC_MARK_STACK): New definitions.
83
84 * keyboard.c (echo_char): Don't omit the space between first two
85 echoed chars.
86
87 * minibuf.c (read_minibuf): Fix previous change.
88
12006-01-19 Kenichi Handa <handa@m17n.org> 892006-01-19 Kenichi Handa <handa@m17n.org>
2 90
3 * xterm.c (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF. 91 * xterm.c (handle_one_xevent): Handle keysyms 0x1000000..0x10000FF.
@@ -571,7 +659,7 @@
571 * w32fns.c (w32_abort) [__GNUC__]: Add instructions for attaching 659 * w32fns.c (w32_abort) [__GNUC__]: Add instructions for attaching
572 GDB to the abort dialog. 660 GDB to the abort dialog.
573 661
5742005-12-09 Kyotaro HORIGUCHI <horiguti@meadowy.org> (tiny change) 6622005-12-09 Kyotaro HORIGUCHI <horiguti@meadowy.org> (tiny change)
575 663
576 * indent.c (Fvertical_motion): Force move if starting on 664 * indent.c (Fvertical_motion): Force move if starting on
577 stretch glyph. 665 stretch glyph.
@@ -825,7 +913,7 @@
825 913
826 * s/darwin.h (LIBS_CARBON) [!HAVE_CARBON]: Remove `-framework Carbon'. 914 * s/darwin.h (LIBS_CARBON) [!HAVE_CARBON]: Remove `-framework Carbon'.
827 915
8282005-11-11 David Reitter <david.reitter@gmail.com> 9162005-11-11 David Reitter <david.reitter@gmail.com>
829 917
830 * macterm.c (syms_of_macterm): Remove macCtrlKey, macShiftKey, 918 * macterm.c (syms_of_macterm): Remove macCtrlKey, macShiftKey,
831 macMetaKey, macAltKey. Introduce Qctrl, Qmeta, 919 macMetaKey, macAltKey. Introduce Qctrl, Qmeta,
@@ -857,7 +945,7 @@
857 ignore_overlay_strings_at_pos_p if dpvec came from an overlay 945 ignore_overlay_strings_at_pos_p if dpvec came from an overlay
858 string, so we skip those overlay strings at current pos. 946 string, so we skip those overlay strings at current pos.
859 947
8602005-11-10 Lars Hansen <larsh@soem.dk> 9482005-11-10 Lars Hansen <larsh@soem.dk>
861 949
862 * fileio.c (file-regular-p): Doc fix. 950 * fileio.c (file-regular-p): Doc fix.
863 951
@@ -968,7 +1056,7 @@
968 1056
969 * xdisp.c (display_line): Restore it->current_x and call 1057 * xdisp.c (display_line): Restore it->current_x and call
970 extend_face_to_end_of_line when last glyph doesn't fit on line. 1058 extend_face_to_end_of_line when last glyph doesn't fit on line.
971 (set_glyph_string_background_width): Remove specific tests here 1059 (set_glyph_string_background_width): Remove specific tests here
972 to see if face background should extend to end of line. Simplify. 1060 to see if face background should extend to end of line. Simplify.
973 1061
9742005-10-30 Richard M. Stallman <rms@gnu.org> 10622005-10-30 Richard M. Stallman <rms@gnu.org>
@@ -1570,7 +1658,7 @@
1570 1658
1571 * dispextern.h (fatal): Delete prototype. 1659 * dispextern.h (fatal): Delete prototype.
1572 1660
1573 * systime.h: (make_time): Prototype moved from ... 1661 * systime.h (make_time): Prototype moved from ...
1574 * editfns.c (make_time): ... here. 1662 * editfns.c (make_time): ... here.
1575 1663
1576 * editfns.c: Move systime.h include after lisp.h. 1664 * editfns.c: Move systime.h include after lisp.h.
@@ -1804,9 +1892,9 @@
1804 get_current_dir_name. 1892 get_current_dir_name.
1805 (get_current_dir_name): Remove prototype. 1893 (get_current_dir_name): Remove prototype.
1806 1894
1807 * xsmfns.c: (get_current_dir_name): Remove prototype. 1895 * xsmfns.c (get_current_dir_name): Remove prototype.
1808 1896
1809 * lisp.h: (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]: 1897 * lisp.h (get_current_dir_name) [!HAVE_GET_CURRENT_DIR_NAME]:
1810 Add prototype. 1898 Add prototype.
1811 1899
1812 * sysdep.c [WINDOWSNT]: Add prototype for getwd. 1900 * sysdep.c [WINDOWSNT]: Add prototype for getwd.
@@ -2497,7 +2585,7 @@
2497 2585
2498 * window.c (window_scroll_pixel_based, window_scroll_line_based): 2586 * window.c (window_scroll_pixel_based, window_scroll_line_based):
2499 Handle `scroll-preserve-screen-position' non-nil, non-t specially. 2587 Handle `scroll-preserve-screen-position' non-nil, non-t specially.
2500 (syms_of_window): <scroll-preserve-screen-position>: Doc fix. 2588 (syms_of_window) <scroll-preserve-screen-position>: Doc fix.
2501 2589
25022005-07-02 Juri Linkov <juri@jurta.org> 25902005-07-02 Juri Linkov <juri@jurta.org>
2503 2591
@@ -7120,7 +7208,7 @@
7120 7208
7121 * config.in: Rebuild. 7209 * config.in: Rebuild.
7122 7210
7123 * Makefile.in: Run setarch i386 ./temacs if exec-shield is present. 7211 * Makefile.in: Run setarch i386 ./temacs if exec-shield is present.
7124 7212
71252004-09-18 Stefan Monnier <monnier@iro.umontreal.ca> 72132004-09-18 Stefan Monnier <monnier@iro.umontreal.ca>
7126 7214
@@ -7700,7 +7788,7 @@
7700 7788
7701 * buffer.c (Fswitch_to_buffer, Fpop_to_buffer): Doc fixes. 7789 * buffer.c (Fswitch_to_buffer, Fpop_to_buffer): Doc fixes.
7702 7790
7703 * window.c (Fwindow_buffer, Fother_window, Fget_lru_window) 7791 * window.c (Fwindow_buffer, Fother_window, Fget_lru_window)
7704 (Fget_largest_window, Fget_buffer_window, Fdelete_windows_on) 7792 (Fget_largest_window, Fget_buffer_window, Fdelete_windows_on)
7705 (Freplace_buffer_in_windows, Fset_window_buffer) 7793 (Freplace_buffer_in_windows, Fset_window_buffer)
7706 (Fselect-window, Fdisplay-buffer, Fsplit_window): Doc fixes. 7794 (Fselect-window, Fdisplay-buffer, Fsplit_window): Doc fixes.
@@ -9353,7 +9441,7 @@
9353 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p) 9441 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
9354 (make_image, free_image, prepare_image_for_display, image_ascent) 9442 (make_image, free_image, prepare_image_for_display, image_ascent)
9355 (four_corners_best, image_background, image_background_transparent) 9443 (four_corners_best, image_background, image_background_transparent)
9356 (x_clear_image_1, x_clear_image, x_alloc_image_color) 9444 (x_clear_image_1, x_clear_image, x_alloc_image_color)
9357 (make_image_cache, free_image_cache, clear_image_cache) 9445 (make_image_cache, free_image_cache, clear_image_cache)
9358 (Fclear_image_cache, postprocess_image, lookup_image, cache_image) 9446 (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
9359 (forall_images_in_image_cache, x_create_x_image_and_pixmap) 9447 (forall_images_in_image_cache, x_create_x_image_and_pixmap)
@@ -9391,7 +9479,7 @@
9391 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p) 9479 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
9392 (make_image, free_image, prepare_image_for_display, image_ascent) 9480 (make_image, free_image, prepare_image_for_display, image_ascent)
9393 (four_corners_best, image_background, image_background_transparent) 9481 (four_corners_best, image_background, image_background_transparent)
9394 (x_clear_image_1, x_clear_image, x_alloc_image_color) 9482 (x_clear_image_1, x_clear_image, x_alloc_image_color)
9395 (make_image_cache, free_image_cache, clear_image_cache) 9483 (make_image_cache, free_image_cache, clear_image_cache)
9396 (Fclear_image_cache, postprocess_image, lookup_image, cache_image) 9484 (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
9397 (forall_images_in_image_cache, x_create_x_image_and_pixmap) 9485 (forall_images_in_image_cache, x_create_x_image_and_pixmap)
@@ -9423,7 +9511,7 @@
9423 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p) 9511 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
9424 (make_image, free_image, prepare_image_for_display, image_ascent) 9512 (make_image, free_image, prepare_image_for_display, image_ascent)
9425 (four_corners_best, image_background, image_background_transparent) 9513 (four_corners_best, image_background, image_background_transparent)
9426 (x_clear_image_1, x_clear_image, x_alloc_image_color) 9514 (x_clear_image_1, x_clear_image, x_alloc_image_color)
9427 (make_image_cache, free_image_cache, clear_image_cache) 9515 (make_image_cache, free_image_cache, clear_image_cache)
9428 (Fclear_image_cache, postprocess_image, lookup_image, cache_image) 9516 (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
9429 (forall_images_in_image_cache, x_create_x_image_and_pixmap) 9517 (forall_images_in_image_cache, x_create_x_image_and_pixmap)
@@ -9453,7 +9541,7 @@
9453 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p) 9541 (parse_image_spec, image_spec_value, Fimage_size, Fimage_mask_p)
9454 (make_image, free_image, prepare_image_for_display, image_ascent) 9542 (make_image, free_image, prepare_image_for_display, image_ascent)
9455 (four_corners_best, image_background, image_background_transparent) 9543 (four_corners_best, image_background, image_background_transparent)
9456 (x_clear_image_1, x_clear_image, x_alloc_image_color) 9544 (x_clear_image_1, x_clear_image, x_alloc_image_color)
9457 (make_image_cache, free_image_cache, clear_image_cache) 9545 (make_image_cache, free_image_cache, clear_image_cache)
9458 (Fclear_image_cache, postprocess_image, lookup_image, cache_image) 9546 (Fclear_image_cache, postprocess_image, lookup_image, cache_image)
9459 (forall_images_in_image_cache, x_create_x_image_and_pixmap) 9547 (forall_images_in_image_cache, x_create_x_image_and_pixmap)
@@ -10228,7 +10316,7 @@
10228 (Fx_change_window_property): Add declaration of parameters type and 10316 (Fx_change_window_property): Add declaration of parameters type and
10229 format. Remove unused variable cons. 10317 format. Remove unused variable cons.
10230 10318
10231 * xselect.c: Include stdio,h. 10319 * xselect.c: Include stdio.h.
10232 10320
102332004-02-05 Kenichi Handa <handa@m17n.org> 103212004-02-05 Kenichi Handa <handa@m17n.org>
10234 10322
@@ -11861,7 +11949,7 @@
11861 11949
118622003-07-13 Terje Rosten <terjeros@phys.ntnu.no> 119502003-07-13 Terje Rosten <terjeros@phys.ntnu.no>
11863 11951
11864 * xterm.c (x_bitmap_icon,x_wm_set_icon_pixmap): Modify to add mask, 11952 * xterm.c (x_bitmap_icon, x_wm_set_icon_pixmap): Modify to add mask,
11865 and use the Gtk+ function gtk_window_icon_from_file if available. 11953 and use the Gtk+ function gtk_window_icon_from_file if available.
11866 11954
11867 * xfns.c (x_bitmap_mask, x_create_bitmap_mask): New functions to 11955 * xfns.c (x_bitmap_mask, x_create_bitmap_mask): New functions to
@@ -16440,7 +16528,7 @@
164402002-09-08 Kim F. Storm <storm@cua.dk> 165282002-09-08 Kim F. Storm <storm@cua.dk>
16441 16529
16442 * macros.c (executing_macro_index): Change type to EMACS_INT. 16530 * macros.c (executing_macro_index): Change type to EMACS_INT.
16443 (syms_of_macros): DEFVAR_INT it (needed by kmacro). 16531 (syms_of_macros): DEFVAR_INT it (needed by kmacro).
16444 16532
16445 * macros.h (executing_macro_index): Change type to EMACS_INT. 16533 * macros.h (executing_macro_index): Change type to EMACS_INT.
16446 16534
@@ -18928,10 +19016,10 @@
18928 Intern and staticpro QCtype and Qdatagram. 19016 Intern and staticpro QCtype and Qdatagram.
18929 (syms_of_process) [!subprocess]: Intern and staticpro QCtype. 19017 (syms_of_process) [!subprocess]: Intern and staticpro QCtype.
18930 19018
18931 * xfns.c: (QCtype): Remove duplicate declaration and 19019 * xfns.c (QCtype): Remove duplicate declaration and
18932 initialization (is now declared in process.c). 19020 initialization (is now declared in process.c).
18933 19021
18934 * w32fns.c: (QCtype): Remove duplicate declaration and 19022 * w32fns.c (QCtype): Remove duplicate declaration and
18935 initialization (is now declared in process.c). 19023 initialization (is now declared in process.c).
18936 19024
189372002-03-21 Richard M. Stallman <rms@gnu.org> 190252002-03-21 Richard M. Stallman <rms@gnu.org>
@@ -19046,7 +19134,7 @@
19046 Doc fix: Member kill_without_query is inverse of query-on-exit flag. 19134 Doc fix: Member kill_without_query is inverse of query-on-exit flag.
19047 19135
19048 * process.c (Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily) 19136 * process.c (Qlocal, QCname, QCbuffer, QChost, QCservice, QCfamily)
19049 (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery,QCstop) 19137 (QClocal, QCremote, QCserver, QCdatagram, QCnowait, QCnoquery, QCstop)
19050 (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature): 19138 (QCcoding, QCoptions, QCfilter, QCsentinel, QClog, QCfeature):
19051 New variables. 19139 New variables.
19052 (NETCONN1_P): New macro. 19140 (NETCONN1_P): New macro.
@@ -19376,7 +19464,7 @@
19376 19464
193772002-02-28 Kim F. Storm <storm@cua.dk> 194652002-02-28 Kim F. Storm <storm@cua.dk>
19378 19466
19379 * window.c: (minibuf_selected_window): Renamed from 19467 * window.c (minibuf_selected_window): Renamed from
19380 Vminibuf_selected_window. Users changed. 19468 Vminibuf_selected_window. Users changed.
19381 (syms_of_window): Staticpro it. 19469 (syms_of_window): Staticpro it.
19382 19470
@@ -19386,14 +19474,14 @@
19386 which is similar to Vminibuf_scroll_window, but which is only set 19474 which is similar to Vminibuf_scroll_window, but which is only set
19387 on entry to the minibuffer (from a non-minibuffer window): 19475 on entry to the minibuffer (from a non-minibuffer window):
19388 19476
19389 * window.c: (Vminibuf_selected_window): New variable. 19477 * window.c (Vminibuf_selected_window): New variable.
19390 (struct save_window_data): New member minibuf_selected_window. 19478 (struct save_window_data): New member minibuf_selected_window.
19391 (Fset_window_configuration): Restore Vminibuf_selected_window. 19479 (Fset_window_configuration): Restore Vminibuf_selected_window.
19392 (Fcurrent_window_configuration): Save Vminibuf_selected_window. 19480 (Fcurrent_window_configuration): Save Vminibuf_selected_window.
19393 Set minibuf_scroll_window member to nil if minibuf_level is 0. 19481 Set minibuf_scroll_window member to nil if minibuf_level is 0.
19394 (compare_window_configurations): Compare minibuf_selected_window. 19482 (compare_window_configurations): Compare minibuf_selected_window.
19395 19483
19396 * window.h: (Vminibuf_selected_window): Declare extern. 19484 * window.h (Vminibuf_selected_window): Declare extern.
19397 19485
19398 * minibuf.c (read_minibuf): Set Vminibuf_selected_window on first 19486 * minibuf.c (read_minibuf): Set Vminibuf_selected_window on first
19399 entry to minibuffer or on entry from a non-minibuffer window. 19487 entry to minibuffer or on entry from a non-minibuffer window.
@@ -19519,7 +19607,7 @@
19519 19607
195202002-02-22 Eli Zaretskii <eliz@is.elta.co.il> 196082002-02-22 Eli Zaretskii <eliz@is.elta.co.il>
19521 19609
19522 Support for ICCCM Extended Segments in X selections: 19610 Support for ICCCM Extended Segments in X selections:
19523 19611
19524 * xselect.c <Qcompound_text_no_extensions>: New variable. 19612 * xselect.c <Qcompound_text_no_extensions>: New variable.
19525 (syms_of_xselect): Intern and staticpro it. 19613 (syms_of_xselect): Intern and staticpro it.
@@ -19673,7 +19761,7 @@
19673 19761
196742002-02-13 Kim F. Storm <storm@cua.dk> 197622002-02-13 Kim F. Storm <storm@cua.dk>
19675 19763
19676 * window.c: (Vmode_line_in_non_selected_windows): Removed. 19764 * window.c (Vmode_line_in_non_selected_windows): Removed.
19677 (mode_line_in_non_selected_windows): New variable. 19765 (mode_line_in_non_selected_windows): New variable.
19678 (syms_of_window): DEFVAR_BOOL it. 19766 (syms_of_window): DEFVAR_BOOL it.
19679 19767
@@ -19704,7 +19792,7 @@
19704 19792
197052002-02-11 Kim F. Storm <storm@cua.dk> 197932002-02-11 Kim F. Storm <storm@cua.dk>
19706 19794
19707 * window.c: (Vmode_line_in_non_selected_windows): New variable. 19795 * window.c (Vmode_line_in_non_selected_windows): New variable.
19708 (syms_of_window): DEFVAR_LISP it. 19796 (syms_of_window): DEFVAR_LISP it.
19709 19797
19710 * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3): New macro. 19798 * dispextern.h (CURRENT_MODE_LINE_FACE_ID_3): New macro.
diff --git a/src/alloc.c b/src/alloc.c
index 1ef8f97b040..48065382480 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1,6 +1,6 @@
1/* Storage allocation and gc for GNU Emacs Lisp interpreter. 1/* Storage allocation and gc for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999, 2 Copyright (C) 1985, 1986, 1988, 1993, 1994, 1995, 1997, 1998, 1999,
3 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 3 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
6 6
@@ -1105,6 +1105,9 @@ lisp_align_free (block)
1105 } 1105 }
1106 eassert ((aligned & 1) == aligned); 1106 eassert ((aligned & 1) == aligned);
1107 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1)); 1107 eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1108#ifdef HAVE_POSIX_MEMALIGN
1109 eassert ((unsigned long)ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1110#endif
1108 free (ABLOCKS_BASE (abase)); 1111 free (ABLOCKS_BASE (abase));
1109 } 1112 }
1110 UNBLOCK_INPUT; 1113 UNBLOCK_INPUT;
@@ -1419,6 +1422,8 @@ make_interval ()
1419{ 1422{
1420 INTERVAL val; 1423 INTERVAL val;
1421 1424
1425 eassert (!handling_signal);
1426
1422 if (interval_free_list) 1427 if (interval_free_list)
1423 { 1428 {
1424 val = interval_free_list; 1429 val = interval_free_list;
@@ -1837,6 +1842,8 @@ allocate_string ()
1837{ 1842{
1838 struct Lisp_String *s; 1843 struct Lisp_String *s;
1839 1844
1845 eassert (!handling_signal);
1846
1840 /* If the free-list is empty, allocate a new string_block, and 1847 /* If the free-list is empty, allocate a new string_block, and
1841 add all the Lisp_Strings in it to the free-list. */ 1848 add all the Lisp_Strings in it to the free-list. */
1842 if (string_free_list == NULL) 1849 if (string_free_list == NULL)
@@ -1971,6 +1978,8 @@ allocate_string_data (s, nchars, nbytes)
1971 old_nbytes = GC_STRING_BYTES (s); 1978 old_nbytes = GC_STRING_BYTES (s);
1972 1979
1973 data = b->next_free; 1980 data = b->next_free;
1981 b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA);
1982
1974 data->string = s; 1983 data->string = s;
1975 s->data = SDATA_DATA (data); 1984 s->data = SDATA_DATA (data);
1976#ifdef GC_CHECK_STRING_BYTES 1985#ifdef GC_CHECK_STRING_BYTES
@@ -1983,7 +1992,6 @@ allocate_string_data (s, nchars, nbytes)
1983 bcopy (string_overrun_cookie, (char *) data + needed, 1992 bcopy (string_overrun_cookie, (char *) data + needed,
1984 GC_STRING_OVERRUN_COOKIE_SIZE); 1993 GC_STRING_OVERRUN_COOKIE_SIZE);
1985#endif 1994#endif
1986 b->next_free = (struct sdata *) ((char *) data + needed + GC_STRING_EXTRA);
1987 1995
1988 /* If S had already data assigned, mark that as free by setting its 1996 /* If S had already data assigned, mark that as free by setting its
1989 string back-pointer to null, and recording the size of the data 1997 string back-pointer to null, and recording the size of the data
@@ -2552,6 +2560,8 @@ make_float (float_value)
2552{ 2560{
2553 register Lisp_Object val; 2561 register Lisp_Object val;
2554 2562
2563 eassert (!handling_signal);
2564
2555 if (float_free_list) 2565 if (float_free_list)
2556 { 2566 {
2557 /* We use the data field for chaining the free list 2567 /* We use the data field for chaining the free list
@@ -2671,6 +2681,8 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0,
2671{ 2681{
2672 register Lisp_Object val; 2682 register Lisp_Object val;
2673 2683
2684 eassert (!handling_signal);
2685
2674 if (cons_free_list) 2686 if (cons_free_list)
2675 { 2687 {
2676 /* We use the cdr for chaining the free list 2688 /* We use the cdr for chaining the free list
@@ -2852,6 +2864,9 @@ allocate_vectorlike (len, type)
2852 UNBLOCK_INPUT; 2864 UNBLOCK_INPUT;
2853#endif 2865#endif
2854 2866
2867 /* This gets triggered by code which I haven't bothered to fix. --Stef */
2868 /* eassert (!handling_signal); */
2869
2855 nbytes = sizeof *p + (len - 1) * sizeof p->contents[0]; 2870 nbytes = sizeof *p + (len - 1) * sizeof p->contents[0];
2856 p = (struct Lisp_Vector *) lisp_malloc (nbytes, type); 2871 p = (struct Lisp_Vector *) lisp_malloc (nbytes, type);
2857 2872
@@ -3102,6 +3117,8 @@ Its value and function definition are void, and its property list is nil. */)
3102 3117
3103 CHECK_STRING (name); 3118 CHECK_STRING (name);
3104 3119
3120 eassert (!handling_signal);
3121
3105 if (symbol_free_list) 3122 if (symbol_free_list)
3106 { 3123 {
3107 XSETSYMBOL (val, symbol_free_list); 3124 XSETSYMBOL (val, symbol_free_list);
@@ -3182,6 +3199,8 @@ allocate_misc ()
3182{ 3199{
3183 Lisp_Object val; 3200 Lisp_Object val;
3184 3201
3202 eassert (!handling_signal);
3203
3185 if (marker_free_list) 3204 if (marker_free_list)
3186 { 3205 {
3187 XSETMISC (val, marker_free_list); 3206 XSETMISC (val, marker_free_list);
diff --git a/src/dired.c b/src/dired.c
index eca05cde0db..650600b278e 100644
--- a/src/dired.c
+++ b/src/dired.c
@@ -1037,11 +1037,11 @@ syms_of_dired ()
1037#endif /* VMS */ 1037#endif /* VMS */
1038 1038
1039 DEFVAR_LISP ("completion-ignored-extensions", &Vcompletion_ignored_extensions, 1039 DEFVAR_LISP ("completion-ignored-extensions", &Vcompletion_ignored_extensions,
1040 doc: /* *Completion ignores filenames ending in any string in this list. 1040 doc: /* Completion ignores file names ending in any string in this list.
1041Directories are ignored if they match any string in this list which 1041It does not ignore them if all possible completions end in one of
1042ends in a slash. 1042these strings or when displaying a list of completions.
1043This variable does not affect lists of possible completions, 1043It ignores directory names if they match any string in this list which
1044but does affect the commands that actually do completions. */); 1044ends in a slash. */);
1045 Vcompletion_ignored_extensions = Qnil; 1045 Vcompletion_ignored_extensions = Qnil;
1046} 1046}
1047 1047
diff --git a/src/keyboard.c b/src/keyboard.c
index 07a0deaf828..8434dbe1d7a 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -790,6 +790,8 @@ echo_char (c)
790 else 790 else
791 echo_string = concat2 (echo_string, build_string (" ")); 791 echo_string = concat2 (echo_string, build_string (" "));
792 } 792 }
793 else if (STRINGP (echo_string))
794 echo_string = concat2 (echo_string, build_string (" "));
793 795
794 current_kboard->echo_string 796 current_kboard->echo_string
795 = concat2 (echo_string, make_string (buffer, ptr - buffer)); 797 = concat2 (echo_string, make_string (buffer, ptr - buffer));
@@ -820,16 +822,16 @@ echo_dash ()
820 /* Do nothing if we have already put a dash at the end. */ 822 /* Do nothing if we have already put a dash at the end. */
821 if (SCHARS (current_kboard->echo_string) > 1) 823 if (SCHARS (current_kboard->echo_string) > 1)
822 { 824 {
823 Lisp_Object last_char, prev_char, idx; 825 Lisp_Object last_char, prev_char, idx;
824 826
825 idx = make_number (SCHARS (current_kboard->echo_string) - 2); 827 idx = make_number (SCHARS (current_kboard->echo_string) - 2);
826 prev_char = Faref (current_kboard->echo_string, idx); 828 prev_char = Faref (current_kboard->echo_string, idx);
827 829
828 idx = make_number (SCHARS (current_kboard->echo_string) - 1); 830 idx = make_number (SCHARS (current_kboard->echo_string) - 1);
829 last_char = Faref (current_kboard->echo_string, idx); 831 last_char = Faref (current_kboard->echo_string, idx);
830 832
831 if (XINT (last_char) == '-' && XINT (prev_char) != ' ') 833 if (XINT (last_char) == '-' && XINT (prev_char) != ' ')
832 return; 834 return;
833 } 835 }
834 836
835 /* Put a dash at the end of the buffer temporarily, 837 /* Put a dash at the end of the buffer temporarily,
diff --git a/src/keymap.c b/src/keymap.c
index 07bf957cdca..31f80a2593a 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -718,8 +718,10 @@ map_keymap_call (key, val, fun, dummy)
718} 718}
719 719
720DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 3, 0, 720DEFUN ("map-keymap", Fmap_keymap, Smap_keymap, 2, 3, 0,
721 doc: /* Call FUNCTION for every binding in KEYMAP. 721 doc: /* Call FUNCTION once for each binding in KEYMAP.
722FUNCTION is called with two arguments: the event and its binding. 722FUNCTION is called with two arguments: the event that is bound, and
723the definition it is bound to.
724
723If KEYMAP has a parent, the parent's bindings are included as well. 725If KEYMAP has a parent, the parent's bindings are included as well.
724This works recursively: if the parent has itself a parent, then the 726This works recursively: if the parent has itself a parent, then the
725grandparent's bindings are also included and so on. 727grandparent's bindings are also included and so on.
diff --git a/src/lread.c b/src/lread.c
index 7a4437350b1..c035b529ce2 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -982,8 +982,12 @@ Return t if file exists. */)
982 if (!NILP (Fequal (found, XCAR (tem)))) 982 if (!NILP (Fequal (found, XCAR (tem))))
983 count++; 983 count++;
984 if (count > 3) 984 if (count > 3)
985 Fsignal (Qerror, Fcons (build_string ("Recursive load"), 985 {
986 Fcons (found, Vloads_in_progress))); 986 if (fd >= 0)
987 emacs_close (fd);
988 Fsignal (Qerror, Fcons (build_string ("Recursive load"),
989 Fcons (found, Vloads_in_progress)));
990 }
987 record_unwind_protect (record_load_unwind, Vloads_in_progress); 991 record_unwind_protect (record_load_unwind, Vloads_in_progress);
988 Vloads_in_progress = Fcons (found, Vloads_in_progress); 992 Vloads_in_progress = Fcons (found, Vloads_in_progress);
989 } 993 }
diff --git a/src/minibuf.c b/src/minibuf.c
index 9c7542ad090..79b3041c3b2 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -653,7 +653,8 @@ read_minibuf (map, initial, prompt, backup_n, expflag,
653 Lisp_Object root_window = Fframe_root_window (frame); 653 Lisp_Object root_window = Fframe_root_window (frame);
654 Lisp_Object mini_window = XWINDOW (root_window)->next; 654 Lisp_Object mini_window = XWINDOW (root_window)->next;
655 655
656 if (! NILP (mini_window) && !NILP (Fwindow_minibuffer_p (mini_window))) 656 if (! NILP (mini_window) && ! EQ (mini_window, minibuf_window)
657 && !NILP (Fwindow_minibuffer_p (mini_window)))
657 Fset_window_buffer (mini_window, empty_minibuf, Qnil); 658 Fset_window_buffer (mini_window, empty_minibuf, Qnil);
658 } 659 }
659 660
diff --git a/src/puresize.h b/src/puresize.h
index f82c705265b..e46ca103d7d 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -42,7 +42,7 @@ Boston, MA 02110-1301, USA. */
42#endif 42#endif
43 43
44#ifndef BASE_PURESIZE 44#ifndef BASE_PURESIZE
45#define BASE_PURESIZE (1180000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA) 45#define BASE_PURESIZE (1190000 + SYSTEM_PURESIZE_EXTRA + SITELOAD_PURESIZE_EXTRA)
46#endif 46#endif
47 47
48/* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */ 48/* Increase BASE_PURESIZE by a ratio depending on the machine's word size. */
diff --git a/src/regex.c b/src/regex.c
index 412fd1d524d..3548ad3c048 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -3,7 +3,7 @@
3 internationalization features.) 3 internationalization features.)
4 4
5 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 5 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
6 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 6 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
7 7
8 This program is free software; you can redistribute it and/or modify 8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by 9 it under the terms of the GNU General Public License as published by
@@ -1899,8 +1899,9 @@ typedef struct
1899/* The next available element. */ 1899/* The next available element. */
1900#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail]) 1900#define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
1901 1901
1902/* Explicit quit checking is only used on NTemacs. */ 1902/* Explicit quit checking is only used on NTemacs and whenever we
1903#if defined WINDOWSNT && defined emacs && defined QUIT 1903 use polling to process input events. */
1904#if defined emacs && (defined WINDOWSNT || defined SYNC_INPUT) && defined QUIT
1904extern int immediate_quit; 1905extern int immediate_quit;
1905# define IMMEDIATE_QUIT_CHECK \ 1906# define IMMEDIATE_QUIT_CHECK \
1906 do { \ 1907 do { \
@@ -5770,7 +5771,6 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
5770 the repetition text and either the following jump or 5771 the repetition text and either the following jump or
5771 pop_failure_jump back to this on_failure_jump. */ 5772 pop_failure_jump back to this on_failure_jump. */
5772 case on_failure_jump: 5773 case on_failure_jump:
5773 IMMEDIATE_QUIT_CHECK;
5774 EXTRACT_NUMBER_AND_INCR (mcnt, p); 5774 EXTRACT_NUMBER_AND_INCR (mcnt, p);
5775 DEBUG_PRINT3 ("EXECUTING on_failure_jump %d (to %p):\n", 5775 DEBUG_PRINT3 ("EXECUTING on_failure_jump %d (to %p):\n",
5776 mcnt, p + mcnt); 5776 mcnt, p + mcnt);
@@ -5786,7 +5786,6 @@ re_match_2_internal (bufp, string1, size1, string2, size2, pos, regs, stop)
5786 then we can use a non-backtracking loop based on 5786 then we can use a non-backtracking loop based on
5787 on_failure_keep_string_jump instead of on_failure_jump. */ 5787 on_failure_keep_string_jump instead of on_failure_jump. */
5788 case on_failure_jump_smart: 5788 case on_failure_jump_smart:
5789 IMMEDIATE_QUIT_CHECK;
5790 EXTRACT_NUMBER_AND_INCR (mcnt, p); 5789 EXTRACT_NUMBER_AND_INCR (mcnt, p);
5791 DEBUG_PRINT3 ("EXECUTING on_failure_jump_smart %d (to %p).\n", 5790 DEBUG_PRINT3 ("EXECUTING on_failure_jump_smart %d (to %p).\n",
5792 mcnt, p + mcnt); 5791 mcnt, p + mcnt);
diff --git a/src/s/irix6-5.h b/src/s/irix6-5.h
index c1cc42a8c0e..9df3e0a2ef6 100644
--- a/src/s/irix6-5.h
+++ b/src/s/irix6-5.h
@@ -33,5 +33,9 @@
33 33
34#undef TIOCSIGSEND /* defined in usg5-4.h */ 34#undef TIOCSIGSEND /* defined in usg5-4.h */
35 35
36/* Tested on Irix 6.5. SCM worked on earlier versions. */
37#define GC_SETJMP_WORKS 1
38#define GC_MARK_STACK GC_MAKE_GCPROS_NOOPS
39
36/* arch-tag: d7ad9ec2-54ad-4b2f-adf2-0070c5c63e83 40/* arch-tag: d7ad9ec2-54ad-4b2f-adf2-0070c5c63e83
37 (do not change this comment) */ 41 (do not change this comment) */
diff --git a/src/w32.c b/src/w32.c
index 9a51233527d..9860a6cc353 100644
--- a/src/w32.c
+++ b/src/w32.c
@@ -3426,13 +3426,13 @@ sys_close (int fd)
3426{ 3426{
3427 int rc; 3427 int rc;
3428 3428
3429 if (fd < 0 || fd >= MAXDESC) 3429 if (fd < 0)
3430 { 3430 {
3431 errno = EBADF; 3431 errno = EBADF;
3432 return -1; 3432 return -1;
3433 } 3433 }
3434 3434
3435 if (fd_info[fd].cp) 3435 if (fd < MAXDESC && fd_info[fd].cp)
3436 { 3436 {
3437 child_process * cp = fd_info[fd].cp; 3437 child_process * cp = fd_info[fd].cp;
3438 3438
@@ -3474,7 +3474,7 @@ sys_close (int fd)
3474 because socket handles are fully fledged kernel handles. */ 3474 because socket handles are fully fledged kernel handles. */
3475 rc = _close (fd); 3475 rc = _close (fd);
3476 3476
3477 if (rc == 0) 3477 if (rc == 0 && fd < MAXDESC)
3478 fd_info[fd].flags = 0; 3478 fd_info[fd].flags = 0;
3479 3479
3480 return rc; 3480 return rc;
@@ -3486,7 +3486,7 @@ sys_dup (int fd)
3486 int new_fd; 3486 int new_fd;
3487 3487
3488 new_fd = _dup (fd); 3488 new_fd = _dup (fd);
3489 if (new_fd >= 0) 3489 if (new_fd >= 0 && new_fd < MAXDESC)
3490 { 3490 {
3491 /* duplicate our internal info as well */ 3491 /* duplicate our internal info as well */
3492 fd_info[new_fd] = fd_info[fd]; 3492 fd_info[new_fd] = fd_info[fd];
@@ -3641,13 +3641,13 @@ sys_read (int fd, char * buffer, unsigned int count)
3641 DWORD waiting; 3641 DWORD waiting;
3642 char * orig_buffer = buffer; 3642 char * orig_buffer = buffer;
3643 3643
3644 if (fd < 0 || fd >= MAXDESC) 3644 if (fd < 0)
3645 { 3645 {
3646 errno = EBADF; 3646 errno = EBADF;
3647 return -1; 3647 return -1;
3648 } 3648 }
3649 3649
3650 if (fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) 3650 if (fd < MAXDESC && fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET))
3651 { 3651 {
3652 child_process *cp = fd_info[fd].cp; 3652 child_process *cp = fd_info[fd].cp;
3653 3653
@@ -3785,13 +3785,13 @@ sys_write (int fd, const void * buffer, unsigned int count)
3785{ 3785{
3786 int nchars; 3786 int nchars;
3787 3787
3788 if (fd < 0 || fd >= MAXDESC) 3788 if (fd < 0)
3789 { 3789 {
3790 errno = EBADF; 3790 errno = EBADF;
3791 return -1; 3791 return -1;
3792 } 3792 }
3793 3793
3794 if (fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET)) 3794 if (fd < MAXDESC && fd_info[fd].flags & (FILE_PIPE | FILE_SOCKET))
3795 { 3795 {
3796 if ((fd_info[fd].flags & FILE_WRITE) == 0) 3796 if ((fd_info[fd].flags & FILE_WRITE) == 0)
3797 { 3797 {
@@ -3833,7 +3833,7 @@ sys_write (int fd, const void * buffer, unsigned int count)
3833 } 3833 }
3834 3834
3835#ifdef HAVE_SOCKETS 3835#ifdef HAVE_SOCKETS
3836 if (fd_info[fd].flags & FILE_SOCKET) 3836 if (fd < MAXDESC && fd_info[fd].flags & FILE_SOCKET)
3837 { 3837 {
3838 unsigned long nblock = 0; 3838 unsigned long nblock = 0;
3839 if (winsock_lib == NULL) abort (); 3839 if (winsock_lib == NULL) abort ();
diff --git a/src/xdisp.c b/src/xdisp.c
index 3af661108d8..8b1b6f59cf2 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -1,7 +1,7 @@
1/* Display generation from window structure and buffer text. 1/* Display generation from window structure and buffer text.
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995, 2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 1994, 1995,
3 1997, 1998, 1999, 2000, 2001, 2002, 2003, 3 1997, 1998, 1999, 2000, 2001, 2002, 2003,
4 2004, 2005 Free Software Foundation, Inc. 4 2004, 2005, 2006 Free Software Foundation, Inc.
5 5
6This file is part of GNU Emacs. 6This file is part of GNU Emacs.
7 7
@@ -3617,6 +3617,11 @@ handle_invisible_prop (it)
3617 skip starting with next_stop. */ 3617 skip starting with next_stop. */
3618 if (invis_p) 3618 if (invis_p)
3619 IT_CHARPOS (*it) = next_stop; 3619 IT_CHARPOS (*it) = next_stop;
3620
3621 /* If there are adjacent invisible texts, don't lose the
3622 second one's ellipsis. */
3623 if (invis_p == 2)
3624 display_ellipsis_p = 1;
3620 } 3625 }
3621 while (invis_p); 3626 while (invis_p);
3622 3627
@@ -3637,7 +3642,23 @@ handle_invisible_prop (it)
3637 it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p; 3642 it->stack[it->sp - 1].display_ellipsis_p = display_ellipsis_p;
3638 } 3643 }
3639 else if (display_ellipsis_p) 3644 else if (display_ellipsis_p)
3640 setup_for_ellipsis (it, 0); 3645 {
3646 /* Make sure that the glyphs of the ellipsis will get
3647 correct `charpos' values. If we would not update
3648 it->position here, the glyphs would belong to the
3649 last visible character _before_ the invisible
3650 text, which confuses `set_cursor_from_row'.
3651
3652 We use the last invisible position instead of the
3653 first because this way the cursor is always drawn on
3654 the first "." of the ellipsis, whenever PT is inside
3655 the invisible text. Otherwise the cursor would be
3656 placed _after_ the ellipsis when the point is after the
3657 first invisible character. */
3658 it->position.charpos = IT_CHARPOS (*it) - 1;
3659 it->position.bytepos = CHAR_TO_BYTE (it->position.charpos);
3660 setup_for_ellipsis (it, 0);
3661 }
3641 } 3662 }
3642 } 3663 }
3643 3664
@@ -4151,7 +4172,7 @@ handle_single_display_spec (it, spec, object, position,
4151 { 4172 {
4152 it->method = GET_FROM_STRETCH; 4173 it->method = GET_FROM_STRETCH;
4153 it->object = value; 4174 it->object = value;
4154 it->current.pos = it->position = start_pos; 4175 *position = it->position = start_pos;
4155 } 4176 }
4156#ifdef HAVE_WINDOW_SYSTEM 4177#ifdef HAVE_WINDOW_SYSTEM
4157 else 4178 else
@@ -19772,6 +19793,10 @@ produce_stretch_glyph (it)
19772 else 19793 else
19773 ascent = (height * FONT_BASE (font)) / FONT_HEIGHT (font); 19794 ascent = (height * FONT_BASE (font)) / FONT_HEIGHT (font);
19774 19795
19796 if (width > 0 && !it->truncate_lines_p
19797 && it->current_x + width > it->last_visible_x)
19798 width = it->last_visible_x - it->current_x - 1;
19799
19775 if (width > 0 && height > 0 && it->glyph_row) 19800 if (width > 0 && height > 0 && it->glyph_row)
19776 { 19801 {
19777 Lisp_Object object = it->stack[it->sp - 1].string; 19802 Lisp_Object object = it->stack[it->sp - 1].string;
@@ -19912,8 +19937,8 @@ calc_line_height_property (it, val, font, boff, override)
19912 19937
19913/* RIF: 19938/* RIF:
19914 Produce glyphs/get display metrics for the display element IT is 19939 Produce glyphs/get display metrics for the display element IT is
19915 loaded with. See the description of struct display_iterator in 19940 loaded with. See the description of struct it in dispextern.h
19916 dispextern.h for an overview of struct display_iterator. */ 19941 for an overview of struct it. */
19917 19942
19918void 19943void
19919x_produce_glyphs (it) 19944x_produce_glyphs (it)
@@ -20913,8 +20938,13 @@ get_window_cursor_type (w, glyph, width, active_cursor)
20913 { 20938 {
20914 if (w == XWINDOW (echo_area_window)) 20939 if (w == XWINDOW (echo_area_window))
20915 { 20940 {
20916 *width = FRAME_CURSOR_WIDTH (f); 20941 if (EQ (b->cursor_type, Qt) || NILP (b->cursor_type))
20917 return FRAME_DESIRED_CURSOR (f); 20942 {
20943 *width = FRAME_CURSOR_WIDTH (f);
20944 return FRAME_DESIRED_CURSOR (f);
20945 }
20946 else
20947 return get_specified_cursor_type (b->cursor_type, width);
20918 } 20948 }
20919 20949
20920 *active_cursor = 0; 20950 *active_cursor = 0;
diff --git a/src/xterm.c b/src/xterm.c
index f52ff6133fe..0d1ea7636f2 100644
--- a/src/xterm.c
+++ b/src/xterm.c
@@ -1,6 +1,6 @@
1/* X Communication module for terminals which understand the X protocol. 1/* X Communication module for terminals which understand the X protocol.
2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2 Copyright (C) 1989, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
3 2002, 2003, 2004, 2005 Free Software Foundation, Inc. 3 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
4 4
5This file is part of GNU Emacs. 5This file is part of GNU Emacs.
6 6
@@ -7438,7 +7438,12 @@ x_text_icon (f, icon_name)
7438/* If non-nil, this should be a string. 7438/* If non-nil, this should be a string.
7439 It means catch X errors and store the error message in this string. */ 7439 It means catch X errors and store the error message in this string. */
7440 7440
7441static Lisp_Object x_error_message_string; 7441struct x_error_message_stack {
7442 char string[X_ERROR_MESSAGE_SIZE];
7443 Display *dpy;
7444 struct x_error_message_stack *prev;
7445};
7446static struct x_error_message_stack *x_error_message;
7442 7447
7443/* An X error handler which stores the error message in 7448/* An X error handler which stores the error message in
7444 x_error_message_string. This is called from x_error_handler if 7449 x_error_message_string. This is called from x_error_handler if
@@ -7450,7 +7455,7 @@ x_error_catcher (display, error)
7450 XErrorEvent *error; 7455 XErrorEvent *error;
7451{ 7456{
7452 XGetErrorText (display, error->error_code, 7457 XGetErrorText (display, error->error_code,
7453 SDATA (x_error_message_string), 7458 x_error_message->string,
7454 X_ERROR_MESSAGE_SIZE); 7459 X_ERROR_MESSAGE_SIZE);
7455} 7460}
7456 7461
@@ -7475,16 +7480,23 @@ x_catch_errors (dpy)
7475 Display *dpy; 7480 Display *dpy;
7476{ 7481{
7477 int count = SPECPDL_INDEX (); 7482 int count = SPECPDL_INDEX ();
7483 struct x_error_message_stack *data = malloc (sizeof (*data));
7484 Lisp_Object dummy;
7485#ifdef ENABLE_CHECKING
7486 dummy = make_number ((EMACS_INT)dpy + (EMACS_INT)x_error_message);
7487#else
7488 dummy = Qnil;
7489#endif
7478 7490
7479 /* Make sure any errors from previous requests have been dealt with. */ 7491 /* Make sure any errors from previous requests have been dealt with. */
7480 XSync (dpy, False); 7492 XSync (dpy, False);
7481 7493
7482 record_unwind_protect (x_catch_errors_unwind, 7494 data->dpy = dpy;
7483 Fcons (make_save_value (dpy, 0), 7495 data->string[0] = 0;
7484 x_error_message_string)); 7496 data->prev = x_error_message;
7497 x_error_message = data;
7485 7498
7486 x_error_message_string = make_uninit_string (X_ERROR_MESSAGE_SIZE); 7499 record_unwind_protect (x_catch_errors_unwind, dummy);
7487 SSET (x_error_message_string, 0, 0);
7488 7500
7489 return count; 7501 return count;
7490} 7502}
@@ -7492,11 +7504,11 @@ x_catch_errors (dpy)
7492/* Unbind the binding that we made to check for X errors. */ 7504/* Unbind the binding that we made to check for X errors. */
7493 7505
7494static Lisp_Object 7506static Lisp_Object
7495x_catch_errors_unwind (old_val) 7507x_catch_errors_unwind (dummy)
7496 Lisp_Object old_val; 7508 Lisp_Object dummy;
7497{ 7509{
7498 Lisp_Object first = XCAR (old_val); 7510 Display *dpy = x_error_message->dpy;
7499 Display *dpy = XSAVE_VALUE (first)->pointer; 7511 struct x_error_message_stack *tmp;
7500 7512
7501 /* The display may have been closed before this function is called. 7513 /* The display may have been closed before this function is called.
7502 Check if it is still open before calling XSync. */ 7514 Check if it is still open before calling XSync. */
@@ -7507,7 +7519,13 @@ x_catch_errors_unwind (old_val)
7507 UNBLOCK_INPUT; 7519 UNBLOCK_INPUT;
7508 } 7520 }
7509 7521
7510 x_error_message_string = XCDR (old_val); 7522 tmp = x_error_message;
7523 x_error_message = x_error_message->prev;
7524 free (tmp);
7525
7526 eassert (EQ (dummy,
7527 make_number ((EMACS_INT)dpy + (EMACS_INT)x_error_message)));
7528
7511 return Qnil; 7529 return Qnil;
7512} 7530}
7513 7531
@@ -7523,8 +7541,8 @@ x_check_errors (dpy, format)
7523 /* Make sure to catch any errors incurred so far. */ 7541 /* Make sure to catch any errors incurred so far. */
7524 XSync (dpy, False); 7542 XSync (dpy, False);
7525 7543
7526 if (SREF (x_error_message_string, 0)) 7544 if (x_error_message->string[0])
7527 error (format, SDATA (x_error_message_string)); 7545 error (format, x_error_message->string);
7528} 7546}
7529 7547
7530/* Nonzero if we had any X protocol errors 7548/* Nonzero if we had any X protocol errors
@@ -7537,7 +7555,7 @@ x_had_errors_p (dpy)
7537 /* Make sure to catch any errors incurred so far. */ 7555 /* Make sure to catch any errors incurred so far. */
7538 XSync (dpy, False); 7556 XSync (dpy, False);
7539 7557
7540 return SREF (x_error_message_string, 0) != 0; 7558 return x_error_message->string[0] != 0;
7541} 7559}
7542 7560
7543/* Forget about any errors we have had, since we did x_catch_errors on DPY. */ 7561/* Forget about any errors we have had, since we did x_catch_errors on DPY. */
@@ -7546,7 +7564,7 @@ void
7546x_clear_errors (dpy) 7564x_clear_errors (dpy)
7547 Display *dpy; 7565 Display *dpy;
7548{ 7566{
7549 SSET (x_error_message_string, 0, 0); 7567 x_error_message->string[0] = 0;
7550} 7568}
7551 7569
7552/* Stop catching X protocol errors and let them make Emacs die. 7570/* Stop catching X protocol errors and let them make Emacs die.
@@ -7728,7 +7746,7 @@ x_error_handler (display, error)
7728 Display *display; 7746 Display *display;
7729 XErrorEvent *error; 7747 XErrorEvent *error;
7730{ 7748{
7731 if (! NILP (x_error_message_string)) 7749 if (x_error_message)
7732 x_error_catcher (display, error); 7750 x_error_catcher (display, error);
7733 else 7751 else
7734 x_error_quitter (display, error); 7752 x_error_quitter (display, error);
@@ -10970,8 +10988,7 @@ x_initialize ()
10970void 10988void
10971syms_of_xterm () 10989syms_of_xterm ()
10972{ 10990{
10973 staticpro (&x_error_message_string); 10991 x_error_message = NULL;
10974 x_error_message_string = Qnil;
10975 10992
10976 staticpro (&x_display_name_list); 10993 staticpro (&x_display_name_list);
10977 x_display_name_list = Qnil; 10994 x_display_name_list = Qnil;