diff options
| author | Karoly Lorentey | 2006-03-12 04:51:49 +0000 |
|---|---|---|
| committer | Karoly Lorentey | 2006-03-12 04:51:49 +0000 |
| commit | a6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2 (patch) | |
| tree | ab087c9b03ec98c1648cb02b4ee49096a1052e44 /src | |
| parent | 33780b9521e3a416283b46dcd7e3ebb84bbffd67 (diff) | |
| parent | 8cf1c5a44266bbd0f9919e854deee1d7361facd1 (diff) | |
| download | emacs-a6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2.tar.gz emacs-a6b6d0863c1b96e14ba3a2d1b9c941fbbcc8adf2.zip | |
Merged from emacs@sv.gnu.org
Patches applied:
* emacs@sv.gnu.org/emacs--devo--0--patch-144
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-145
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-146
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-147
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-148
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-149
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-150
Update from CVS
* emacs@sv.gnu.org/emacs--devo--0--patch-151
Merge from gnus--rel--5.10
* emacs@sv.gnu.org/emacs--devo--0--patch-152
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-56
Update from CVS
* emacs@sv.gnu.org/gnus--rel--5.10--patch-57
Copy/update icons from Gnus trunk
git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-530
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 107 | ||||
| -rw-r--r-- | src/alloc.c | 12 | ||||
| -rw-r--r-- | src/coding.c | 2 | ||||
| -rw-r--r-- | src/eval.c | 26 | ||||
| -rw-r--r-- | src/keymap.c | 2 | ||||
| -rw-r--r-- | src/lisp.h | 8 | ||||
| -rw-r--r-- | src/macterm.c | 14 | ||||
| -rw-r--r-- | src/mem-limits.h | 86 | ||||
| -rw-r--r-- | src/process.c | 2 | ||||
| -rw-r--r-- | src/vm-limit.c | 208 | ||||
| -rw-r--r-- | src/w32fns.c | 5 | ||||
| -rw-r--r-- | src/w32term.c | 2 | ||||
| -rw-r--r-- | src/window.c | 23 | ||||
| -rw-r--r-- | src/xdisp.c | 2 | ||||
| -rw-r--r-- | src/xfns.c | 1 | ||||
| -rw-r--r-- | src/xterm.c | 19 |
16 files changed, 333 insertions, 186 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index db10f46024b..389538b1617 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,9 +1,95 @@ | |||
| 1 | 2006-03-11 Luc Teirlinck <teirllm@auburn.edu> | ||
| 2 | |||
| 3 | * window.c: Rename preserve_y to window_scroll_pixel_based_preserve_y. | ||
| 4 | (window_scroll_pixel_based, syms_of_window): Adapt to above change. | ||
| 5 | |||
| 6 | 2006-03-11 Eli Zaretskii <eliz@gnu.org> | ||
| 7 | |||
| 8 | * w32fns.c (w32_wnd_proc): Ignore middle and extra button events | ||
| 9 | if a menu is already active (the menubar_active flag is on). | ||
| 10 | |||
| 11 | 2006-03-11 David Ponce <david@dponce.com> | ||
| 12 | |||
| 13 | * xfns.c (x_create_tip_frame): Preserve received parms by copying | ||
| 14 | them. | ||
| 15 | |||
| 16 | 2006-03-11 Eli Zaretskii <eliz@gnu.org> | ||
| 17 | |||
| 18 | * w32term.c: Add x_fully_uncatch_errors and x_catching_errors to | ||
| 19 | the list of unused display error handling functions. | ||
| 20 | |||
| 21 | * eval.c (unwind_to_catch): Call x_fully_uncatch_errors only if | ||
| 22 | HAVE_X_WINDOWS. | ||
| 23 | (internal_condition_case, internal_condition_case_1) | ||
| 24 | (internal_condition_case_2): Call x_catching_errors only if | ||
| 25 | HAVE_X_WINDOWS. | ||
| 26 | |||
| 27 | * vm-limit.c [HAVE_GETRLIMIT]: Don't define unconditionally. | ||
| 28 | Don't include sys/resource.h unless defined. | ||
| 29 | |||
| 30 | 2006-03-11 Richard Stallman <rms@gnu.org> | ||
| 31 | |||
| 32 | * keymap.c (describe_map): Shorten string to indicate shadowed binding. | ||
| 33 | |||
| 34 | * vm-limit.c (get_lim_data, lim_data, data_space_start): | ||
| 35 | Moved from mem-limits.h. | ||
| 36 | (enum warnlevel): New data type. | ||
| 37 | (check_memory_limits): Rewrite the logic about warnings. | ||
| 38 | Use standard `struct rlimit'. Check return values for nonsense. | ||
| 39 | (memory_warnings): Always clear lim_data. | ||
| 40 | |||
| 41 | * mem-limits.h (get_lim_data, lim_data, data_space_start): | ||
| 42 | Moved to vm-limit.c. | ||
| 43 | |||
| 44 | * xterm.c (x_fully_uncatch_errors, x_catching_errors): New functions. | ||
| 45 | |||
| 46 | * eval.c (unwind_to_catch): Call x_fully_uncatch_errors. | ||
| 47 | (internal_condition_case_1, internal_condition_case_2): | ||
| 48 | Abort if within unclosed x_catch_errors. | ||
| 49 | |||
| 50 | 2006-03-11 Romain Francoise <romain@orebokech.com> | ||
| 51 | |||
| 52 | * process.c (Vprocess_adaptive_read_buffering): Doc fix. | ||
| 53 | |||
| 54 | 2006-03-11 Giorgos Keramidas <keramida@ceid.upatras.gr> (tiny change) | ||
| 55 | |||
| 56 | * lisp.h: Remove duplicate prototypes. Make the prototype of | ||
| 57 | getloadavg be conditioned on HAVE_GETLOADAVG being undefined. | ||
| 58 | |||
| 59 | 2006-03-11 Eli Zaretskii <eliz@gnu.org> | ||
| 60 | |||
| 61 | * xterm.c (x_draw_hollow_cursor): Subtract 1 from the last | ||
| 62 | argument of XDrawRectangle. | ||
| 63 | |||
| 64 | * xdisp.c (get_phys_cursor_geometry): Don't decrease height by 1. | ||
| 65 | |||
| 66 | * macterm.c (mac_draw_rectangle): Don't add 1 to width and height. | ||
| 67 | (x_draw_glyph_string_foreground) | ||
| 68 | (x_draw_composite_glyph_string_foreground) | ||
| 69 | (x_draw_image_foreground): Don't subtract 1 from width and height | ||
| 70 | arguments to mac_draw_rectangle. | ||
| 71 | (x_draw_hollow_cursor): Add 1 to w->phys_cursor_width. | ||
| 72 | |||
| 73 | 2006-03-10 Kim F. Storm <storm@cua.dk> | ||
| 74 | |||
| 75 | * alloc.c (USE_POSIX_MEMALIGN): Fix last change. | ||
| 76 | |||
| 77 | 2006-03-09 Stefan Monnier <monnier@iro.umontreal.ca> | ||
| 78 | |||
| 79 | * alloc.c (USE_POSIX_MEMALIGN): New macro. | ||
| 80 | (ABLOCKS_BASE, lisp_align_malloc, lisp_align_free): Use it. | ||
| 81 | |||
| 82 | 2006-03-09 Kenichi Handa <handa@m17n.org> | ||
| 83 | |||
| 84 | * coding.c (DECODE_EMACS_MULE_COMPOSITION_CHAR): Fix decoding | ||
| 85 | ASCII component of a composition. | ||
| 86 | |||
| 1 | 2006-03-08 Luc Teirlinck <teirllm@auburn.edu> | 87 | 2006-03-08 Luc Teirlinck <teirllm@auburn.edu> |
| 2 | 88 | ||
| 3 | * window.c: Declare preserve_y as a static global variable. | 89 | * window.c: Declare preserve_y as a static global variable. |
| 4 | (window_scroll_pixel_based): No longer declare preserve_y; | 90 | (window_scroll_pixel_based): No longer declare preserve_y; |
| 5 | it is global now. | 91 | it is global now. |
| 6 | (syms_of_window): set preserve_y to -1. | 92 | (syms_of_window): Set preserve_y to -1. |
| 7 | 93 | ||
| 8 | 2006-03-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> | 94 | 2006-03-08 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
| 9 | 95 | ||
| @@ -23,10 +109,10 @@ | |||
| 23 | (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH): New defines. | 109 | (MAC_AQUA_SMALL_VERTICAL_SCROLL_BAR_WIDTH): New defines. |
| 24 | 110 | ||
| 25 | * macfns.c (x_default_scroll_bar_color_parameter) | 111 | * macfns.c (x_default_scroll_bar_color_parameter) |
| 26 | (x_set_scroll_bar_foreground, x_set_scroll_bar_background): Remove | 112 | (x_set_scroll_bar_foreground, x_set_scroll_bar_background): |
| 27 | unnecessary prototypes. | 113 | Remove unnecessary prototypes. |
| 28 | (x_set_scroll_bar_default_width): Use | 114 | (x_set_scroll_bar_default_width): |
| 29 | MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH. | 115 | Use MAC_AQUA_VERTICAL_SCROLL_BAR_WIDTH. |
| 30 | (mac_set_scroll_bar_width): New function. | 116 | (mac_set_scroll_bar_width): New function. |
| 31 | (mac_frame_parm_handlers): Set it as handler for scroll-bar-width. | 117 | (mac_frame_parm_handlers): Set it as handler for scroll-bar-width. |
| 32 | 118 | ||
| @@ -38,7 +124,7 @@ | |||
| 38 | (mac_handle_command_event, mac_handle_window_event) | 124 | (mac_handle_command_event, mac_handle_window_event) |
| 39 | (mac_handle_mouse_event): Check error code of GetEventParameter. | 125 | (mac_handle_mouse_event): Check error code of GetEventParameter. |
| 40 | (convert_fn_keycode) [MAC_OSX]: Likewise. | 126 | (convert_fn_keycode) [MAC_OSX]: Likewise. |
| 41 | 127 | ||
| 42 | 2006-03-05 Andreas Schwab <schwab@suse.de> | 128 | 2006-03-05 Andreas Schwab <schwab@suse.de> |
| 43 | 129 | ||
| 44 | * xselect.c (x_catch_errors_unwind): Fix missing return value. | 130 | * xselect.c (x_catch_errors_unwind): Fix missing return value. |
| @@ -52,9 +138,9 @@ | |||
| 52 | lines, by distributing the rows evenly over the tool-bar screen area. | 138 | lines, by distributing the rows evenly over the tool-bar screen area. |
| 53 | (Vtool_bar_border): New variable. | 139 | (Vtool_bar_border): New variable. |
| 54 | (syms_of_xdisp): DEFVAR_LISP it. | 140 | (syms_of_xdisp): DEFVAR_LISP it. |
| 55 | (display_tool_bar_line): Add HEIGHT arg for desired row height. Make | 141 | (display_tool_bar_line): Add HEIGHT arg for desired row height. |
| 56 | tool-bar row the desired height. Use default face for border below | 142 | Make tool-bar row the desired height. Use default face for border |
| 57 | tool-bar. | 143 | below tool-bar. |
| 58 | (tool_bar_lines_needed): Add N_ROWS arg. Use it to return number of | 144 | (tool_bar_lines_needed): Add N_ROWS arg. Use it to return number of |
| 59 | actual tool-bar rows. | 145 | actual tool-bar rows. |
| 60 | (redisplay_tool_bar): Calculate f->n_tool_bar_rows initially. | 146 | (redisplay_tool_bar): Calculate f->n_tool_bar_rows initially. |
| @@ -81,8 +167,7 @@ | |||
| 81 | 167 | ||
| 82 | 2006-02-26 Chong Yidong <cyd@stupidchicken.com> | 168 | 2006-02-26 Chong Yidong <cyd@stupidchicken.com> |
| 83 | 169 | ||
| 84 | * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary | 170 | * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary argument. |
| 85 | argument. | ||
| 86 | 171 | ||
| 87 | * xterm.c: (x_load_font, x_term_init, XTmouse_position) | 172 | * xterm.c: (x_load_font, x_term_init, XTmouse_position) |
| 88 | (handle_one_xevent, x_connection_closed, x_list_fonts): No arg for | 173 | (handle_one_xevent, x_connection_closed, x_list_fonts): No arg for |
diff --git a/src/alloc.c b/src/alloc.c index 74c3c66173a..259143ffad8 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -885,6 +885,12 @@ lisp_free (block) | |||
| 885 | /* The entry point is lisp_align_malloc which returns blocks of at most */ | 885 | /* The entry point is lisp_align_malloc which returns blocks of at most */ |
| 886 | /* BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */ | 886 | /* BLOCK_BYTES and guarantees they are aligned on a BLOCK_ALIGN boundary. */ |
| 887 | 887 | ||
| 888 | /* Use posix_memalloc if the system has it and we're using the system's | ||
| 889 | malloc (because our gmalloc.c routines don't have posix_memalign although | ||
| 890 | its memalloc could be used). */ | ||
| 891 | #if defined (HAVE_POSIX_MEMALIGN) && defined (SYSTEM_MALLOC) | ||
| 892 | #define USE_POSIX_MEMALIGN 1 | ||
| 893 | #endif | ||
| 888 | 894 | ||
| 889 | /* BLOCK_ALIGN has to be a power of 2. */ | 895 | /* BLOCK_ALIGN has to be a power of 2. */ |
| 890 | #define BLOCK_ALIGN (1 << 10) | 896 | #define BLOCK_ALIGN (1 << 10) |
| @@ -950,7 +956,7 @@ struct ablocks | |||
| 950 | #define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase) | 956 | #define ABLOCKS_BUSY(abase) ((abase)->blocks[0].abase) |
| 951 | 957 | ||
| 952 | /* Pointer to the (not necessarily aligned) malloc block. */ | 958 | /* Pointer to the (not necessarily aligned) malloc block. */ |
| 953 | #ifdef HAVE_POSIX_MEMALIGN | 959 | #ifdef USE_POSIX_MEMALIGN |
| 954 | #define ABLOCKS_BASE(abase) (abase) | 960 | #define ABLOCKS_BASE(abase) (abase) |
| 955 | #else | 961 | #else |
| 956 | #define ABLOCKS_BASE(abase) \ | 962 | #define ABLOCKS_BASE(abase) \ |
| @@ -991,7 +997,7 @@ lisp_align_malloc (nbytes, type) | |||
| 991 | mallopt (M_MMAP_MAX, 0); | 997 | mallopt (M_MMAP_MAX, 0); |
| 992 | #endif | 998 | #endif |
| 993 | 999 | ||
| 994 | #ifdef HAVE_POSIX_MEMALIGN | 1000 | #ifdef USE_POSIX_MEMALIGN |
| 995 | { | 1001 | { |
| 996 | int err = posix_memalign (&base, BLOCK_ALIGN, ABLOCKS_BYTES); | 1002 | int err = posix_memalign (&base, BLOCK_ALIGN, ABLOCKS_BYTES); |
| 997 | if (err) | 1003 | if (err) |
| @@ -1107,7 +1113,7 @@ lisp_align_free (block) | |||
| 1107 | } | 1113 | } |
| 1108 | eassert ((aligned & 1) == aligned); | 1114 | eassert ((aligned & 1) == aligned); |
| 1109 | eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1)); | 1115 | eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1)); |
| 1110 | #ifdef HAVE_POSIX_MEMALIGN | 1116 | #ifdef USE_POSIX_MEMALIGN |
| 1111 | eassert ((unsigned long)ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0); | 1117 | eassert ((unsigned long)ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0); |
| 1112 | #endif | 1118 | #endif |
| 1113 | free (ABLOCKS_BASE (abase)); | 1119 | free (ABLOCKS_BASE (abase)); |
diff --git a/src/coding.c b/src/coding.c index 2d5618649d1..26d47da9317 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -731,7 +731,7 @@ detect_coding_emacs_mule (src, src_end, multibytep) | |||
| 731 | c = -1; \ | 731 | c = -1; \ |
| 732 | else \ | 732 | else \ |
| 733 | { \ | 733 | { \ |
| 734 | c -= 0xA0; \ | 734 | c -= 0x80; \ |
| 735 | *p++ = c; \ | 735 | *p++ = c; \ |
| 736 | } \ | 736 | } \ |
| 737 | } \ | 737 | } \ |
diff --git a/src/eval.c b/src/eval.c index a84948981f4..86ee384896c 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -1259,6 +1259,12 @@ unwind_to_catch (catch, value) | |||
| 1259 | } | 1259 | } |
| 1260 | while (! last_time); | 1260 | while (! last_time); |
| 1261 | 1261 | ||
| 1262 | #if HAVE_X_WINDOWS | ||
| 1263 | /* If x_catch_errors was done, turn it off now. | ||
| 1264 | (First we give unbind_to a chance to do that.) */ | ||
| 1265 | x_fully_uncatch_errors (); | ||
| 1266 | #endif | ||
| 1267 | |||
| 1262 | byte_stack_list = catch->byte_stack; | 1268 | byte_stack_list = catch->byte_stack; |
| 1263 | gcprolist = catch->gcpro; | 1269 | gcprolist = catch->gcpro; |
| 1264 | #ifdef DEBUG_GCPRO | 1270 | #ifdef DEBUG_GCPRO |
| @@ -1435,8 +1441,10 @@ internal_condition_case (bfun, handlers, hfun) | |||
| 1435 | struct catchtag c; | 1441 | struct catchtag c; |
| 1436 | struct handler h; | 1442 | struct handler h; |
| 1437 | 1443 | ||
| 1438 | #if 0 /* We now handle interrupt_input_blocked properly. | 1444 | /* Since Fsignal will close off all calls to x_catch_errors, |
| 1439 | What we still do not handle is exiting a signal handler. */ | 1445 | we will get the wrong results if some are not closed now. */ |
| 1446 | #if HAVE_X_WINDOWS | ||
| 1447 | if (x_catching_errors ()) | ||
| 1440 | abort (); | 1448 | abort (); |
| 1441 | #endif | 1449 | #endif |
| 1442 | 1450 | ||
| @@ -1481,6 +1489,13 @@ internal_condition_case_1 (bfun, arg, handlers, hfun) | |||
| 1481 | struct catchtag c; | 1489 | struct catchtag c; |
| 1482 | struct handler h; | 1490 | struct handler h; |
| 1483 | 1491 | ||
| 1492 | /* Since Fsignal will close off all calls to x_catch_errors, | ||
| 1493 | we will get the wrong results if some are not closed now. */ | ||
| 1494 | #if HAVE_X_WINDOWS | ||
| 1495 | if (x_catching_errors ()) | ||
| 1496 | abort (); | ||
| 1497 | #endif | ||
| 1498 | |||
| 1484 | c.tag = Qnil; | 1499 | c.tag = Qnil; |
| 1485 | c.val = Qnil; | 1500 | c.val = Qnil; |
| 1486 | c.backlist = backtrace_list; | 1501 | c.backlist = backtrace_list; |
| @@ -1525,6 +1540,13 @@ internal_condition_case_2 (bfun, nargs, args, handlers, hfun) | |||
| 1525 | struct catchtag c; | 1540 | struct catchtag c; |
| 1526 | struct handler h; | 1541 | struct handler h; |
| 1527 | 1542 | ||
| 1543 | /* Since Fsignal will close off all calls to x_catch_errors, | ||
| 1544 | we will get the wrong results if some are not closed now. */ | ||
| 1545 | #if HAVE_X_WINDOWS | ||
| 1546 | if (x_catching_errors ()) | ||
| 1547 | abort (); | ||
| 1548 | #endif | ||
| 1549 | |||
| 1528 | c.tag = Qnil; | 1550 | c.tag = Qnil; |
| 1529 | c.val = Qnil; | 1551 | c.val = Qnil; |
| 1530 | c.backlist = backtrace_list; | 1552 | c.backlist = backtrace_list; |
diff --git a/src/keymap.c b/src/keymap.c index ca8edab122b..fc7b23f6302 100644 --- a/src/keymap.c +++ b/src/keymap.c | |||
| @@ -3364,7 +3364,7 @@ describe_map (map, prefix, elt_describer, partial, shadow, | |||
| 3364 | if (vect[i].shadowed) | 3364 | if (vect[i].shadowed) |
| 3365 | { | 3365 | { |
| 3366 | SET_PT (PT - 1); | 3366 | SET_PT (PT - 1); |
| 3367 | insert_string (" (binding currently shadowed)"); | 3367 | insert_string (" (shadowed)"); |
| 3368 | SET_PT (PT + 1); | 3368 | SET_PT (PT + 1); |
| 3369 | } | 3369 | } |
| 3370 | } | 3370 | } |
diff --git a/src/lisp.h b/src/lisp.h index 4cca3a60cad..efc8a8f19de 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -2732,7 +2732,6 @@ EXFUN (Fbobp, 0); | |||
| 2732 | EXFUN (Fformat, MANY); | 2732 | EXFUN (Fformat, MANY); |
| 2733 | EXFUN (Fmessage, MANY); | 2733 | EXFUN (Fmessage, MANY); |
| 2734 | extern Lisp_Object format2 P_ ((char *, Lisp_Object, Lisp_Object)); | 2734 | extern Lisp_Object format2 P_ ((char *, Lisp_Object, Lisp_Object)); |
| 2735 | extern Lisp_Object make_buffer_string P_ ((int, int, int)); | ||
| 2736 | EXFUN (Fbuffer_substring, 2); | 2735 | EXFUN (Fbuffer_substring, 2); |
| 2737 | EXFUN (Fbuffer_string, 0); | 2736 | EXFUN (Fbuffer_string, 0); |
| 2738 | extern Lisp_Object save_excursion_save P_ ((void)); | 2737 | extern Lisp_Object save_excursion_save P_ ((void)); |
| @@ -2751,7 +2750,6 @@ extern Lisp_Object make_buffer_string P_ ((int, int, int)); | |||
| 2751 | extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int)); | 2750 | extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int)); |
| 2752 | extern void init_editfns P_ ((void)); | 2751 | extern void init_editfns P_ ((void)); |
| 2753 | extern void syms_of_editfns P_ ((void)); | 2752 | extern void syms_of_editfns P_ ((void)); |
| 2754 | EXFUN (Fcurrent_message, 0); | ||
| 2755 | extern Lisp_Object Vinhibit_field_text_motion; | 2753 | extern Lisp_Object Vinhibit_field_text_motion; |
| 2756 | EXFUN (Fconstrain_to_field, 5); | 2754 | EXFUN (Fconstrain_to_field, 5); |
| 2757 | EXFUN (Ffield_string, 1); | 2755 | EXFUN (Ffield_string, 1); |
| @@ -2849,7 +2847,6 @@ extern Lisp_Object close_file_unwind P_ ((Lisp_Object)); | |||
| 2849 | extern void report_file_error P_ ((const char *, Lisp_Object)); | 2847 | extern void report_file_error P_ ((const char *, Lisp_Object)); |
| 2850 | extern int internal_delete_file P_ ((Lisp_Object)); | 2848 | extern int internal_delete_file P_ ((Lisp_Object)); |
| 2851 | extern void syms_of_fileio P_ ((void)); | 2849 | extern void syms_of_fileio P_ ((void)); |
| 2852 | EXFUN (Fmake_temp_name, 1); | ||
| 2853 | extern void init_fileio_once P_ ((void)); | 2850 | extern void init_fileio_once P_ ((void)); |
| 2854 | extern Lisp_Object make_temp_name P_ ((Lisp_Object, int)); | 2851 | extern Lisp_Object make_temp_name P_ ((Lisp_Object, int)); |
| 2855 | EXFUN (Fmake_symbolic_link, 3); | 2852 | EXFUN (Fmake_symbolic_link, 3); |
| @@ -3202,8 +3199,10 @@ EXFUN (Fset_fontset_font, 4); | |||
| 3202 | /* Defined in xfaces.c */ | 3199 | /* Defined in xfaces.c */ |
| 3203 | extern void syms_of_xfaces P_ ((void)); | 3200 | extern void syms_of_xfaces P_ ((void)); |
| 3204 | 3201 | ||
| 3202 | #ifndef HAVE_GETLOADAVG | ||
| 3205 | /* Defined in getloadavg.c */ | 3203 | /* Defined in getloadavg.c */ |
| 3206 | extern int getloadavg P_ ((double *, int)); | 3204 | extern int getloadavg P_ ((double *, int)); |
| 3205 | #endif | ||
| 3207 | 3206 | ||
| 3208 | #ifdef HAVE_X_WINDOWS | 3207 | #ifdef HAVE_X_WINDOWS |
| 3209 | /* Defined in xfns.c */ | 3208 | /* Defined in xfns.c */ |
| @@ -3224,9 +3223,6 @@ extern void syms_of_xselect P_ ((void)); | |||
| 3224 | /* Defined in xterm.c */ | 3223 | /* Defined in xterm.c */ |
| 3225 | extern void syms_of_xterm P_ ((void)); | 3224 | extern void syms_of_xterm P_ ((void)); |
| 3226 | 3225 | ||
| 3227 | /* Defined in getloadavg.c */ | ||
| 3228 | extern int getloadavg P_ ((double [], int)); | ||
| 3229 | |||
| 3230 | #ifdef MSDOS | 3226 | #ifdef MSDOS |
| 3231 | /* Defined in msdos.c */ | 3227 | /* Defined in msdos.c */ |
| 3232 | EXFUN (Fmsdos_downcase_filename, 1); | 3228 | EXFUN (Fmsdos_downcase_filename, 1); |
diff --git a/src/macterm.c b/src/macterm.c index 7f682515f43..9252d3bd914 100644 --- a/src/macterm.c +++ b/src/macterm.c | |||
| @@ -598,7 +598,7 @@ mac_draw_rectangle (f, gc, x, y, width, height) | |||
| 598 | SetPortWindowPort (FRAME_MAC_WINDOW (f)); | 598 | SetPortWindowPort (FRAME_MAC_WINDOW (f)); |
| 599 | 599 | ||
| 600 | RGBForeColor (GC_FORE_COLOR (gc)); | 600 | RGBForeColor (GC_FORE_COLOR (gc)); |
| 601 | SetRect (&r, x, y, x + width + 1, y + height + 1); | 601 | SetRect (&r, x, y, x + width, y + height); |
| 602 | 602 | ||
| 603 | mac_begin_clip (gc); | 603 | mac_begin_clip (gc); |
| 604 | FrameRect (&r); /* using foreground color of gc */ | 604 | FrameRect (&r); /* using foreground color of gc */ |
| @@ -2436,7 +2436,7 @@ x_draw_glyph_string_foreground (s) | |||
| 2436 | { | 2436 | { |
| 2437 | struct glyph *g = s->first_glyph + i; | 2437 | struct glyph *g = s->first_glyph + i; |
| 2438 | mac_draw_rectangle (s->f, s->gc, x, s->y, | 2438 | mac_draw_rectangle (s->f, s->gc, x, s->y, |
| 2439 | g->pixel_width - 1, s->height - 1); | 2439 | g->pixel_width, s->height); |
| 2440 | x += g->pixel_width; | 2440 | x += g->pixel_width; |
| 2441 | } | 2441 | } |
| 2442 | } | 2442 | } |
| @@ -2515,7 +2515,7 @@ x_draw_composite_glyph_string_foreground (s) | |||
| 2515 | { | 2515 | { |
| 2516 | if (s->gidx == 0) | 2516 | if (s->gidx == 0) |
| 2517 | mac_draw_rectangle (s->f, s->gc, x, s->y, | 2517 | mac_draw_rectangle (s->f, s->gc, x, s->y, |
| 2518 | s->width - 1, s->height - 1); | 2518 | s->width, s->height); |
| 2519 | } | 2519 | } |
| 2520 | else | 2520 | else |
| 2521 | { | 2521 | { |
| @@ -3068,15 +3068,15 @@ x_draw_image_foreground (s) | |||
| 3068 | int r = s->img->relief; | 3068 | int r = s->img->relief; |
| 3069 | if (r < 0) r = -r; | 3069 | if (r < 0) r = -r; |
| 3070 | mac_draw_rectangle (s->f, s->gc, x - r, y - r, | 3070 | mac_draw_rectangle (s->f, s->gc, x - r, y - r, |
| 3071 | s->slice.width + r*2 - 1, | 3071 | s->slice.width + r*2, |
| 3072 | s->slice.height + r*2 - 1); | 3072 | s->slice.height + r*2); |
| 3073 | } | 3073 | } |
| 3074 | } | 3074 | } |
| 3075 | } | 3075 | } |
| 3076 | else | 3076 | else |
| 3077 | /* Draw a rectangle if image could not be loaded. */ | 3077 | /* Draw a rectangle if image could not be loaded. */ |
| 3078 | mac_draw_rectangle (s->f, s->gc, x, y, | 3078 | mac_draw_rectangle (s->f, s->gc, x, y, |
| 3079 | s->slice.width - 1, s->slice.height - 1); | 3079 | s->slice.width, s->slice.height); |
| 3080 | } | 3080 | } |
| 3081 | 3081 | ||
| 3082 | 3082 | ||
| @@ -5245,7 +5245,7 @@ x_draw_hollow_cursor (w, row) | |||
| 5245 | /* Compute frame-relative coordinates for phys cursor. */ | 5245 | /* Compute frame-relative coordinates for phys cursor. */ |
| 5246 | x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); | 5246 | x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
| 5247 | y = get_phys_cursor_geometry (w, row, cursor_glyph, &h); | 5247 | y = get_phys_cursor_geometry (w, row, cursor_glyph, &h); |
| 5248 | wd = w->phys_cursor_width; | 5248 | wd = w->phys_cursor_width + 1; |
| 5249 | 5249 | ||
| 5250 | /* The foreground of cursor_gc is typically the same as the normal | 5250 | /* The foreground of cursor_gc is typically the same as the normal |
| 5251 | background color, which can cause the cursor box to be invisible. */ | 5251 | background color, which can cause the cursor box to be invisible. */ |
diff --git a/src/mem-limits.h b/src/mem-limits.h index 292293b2f98..45dabca3ac5 100644 --- a/src/mem-limits.h +++ b/src/mem-limits.h | |||
| @@ -112,91 +112,5 @@ extern char etext; | |||
| 112 | #endif /* not _LIBC */ | 112 | #endif /* not _LIBC */ |
| 113 | 113 | ||
| 114 | 114 | ||
| 115 | /* start of data space; can be changed by calling malloc_init */ | ||
| 116 | static POINTER data_space_start; | ||
| 117 | |||
| 118 | /* Number of bytes of writable memory we can expect to be able to get */ | ||
| 119 | static unsigned long lim_data; | ||
| 120 | |||
| 121 | #ifdef NO_LIM_DATA | ||
| 122 | static void | ||
| 123 | get_lim_data () | ||
| 124 | { | ||
| 125 | lim_data = -1; | ||
| 126 | } | ||
| 127 | #else /* not NO_LIM_DATA */ | ||
| 128 | |||
| 129 | #ifdef USG | ||
| 130 | |||
| 131 | static void | ||
| 132 | get_lim_data () | ||
| 133 | { | ||
| 134 | extern long ulimit (); | ||
| 135 | |||
| 136 | lim_data = -1; | ||
| 137 | |||
| 138 | /* Use the ulimit call, if we seem to have it. */ | ||
| 139 | #if !defined (ULIMIT_BREAK_VALUE) || defined (GNU_LINUX) | ||
| 140 | lim_data = ulimit (3, 0); | ||
| 141 | #endif | ||
| 142 | |||
| 143 | /* If that didn't work, just use the macro's value. */ | ||
| 144 | #ifdef ULIMIT_BREAK_VALUE | ||
| 145 | if (lim_data == -1) | ||
| 146 | lim_data = ULIMIT_BREAK_VALUE; | ||
| 147 | #endif | ||
| 148 | |||
| 149 | lim_data -= (long) data_space_start; | ||
| 150 | } | ||
| 151 | |||
| 152 | #else /* not USG */ | ||
| 153 | #ifdef WINDOWSNT | ||
| 154 | |||
| 155 | static void | ||
| 156 | get_lim_data () | ||
| 157 | { | ||
| 158 | extern unsigned long reserved_heap_size; | ||
| 159 | lim_data = reserved_heap_size; | ||
| 160 | } | ||
| 161 | |||
| 162 | #else | ||
| 163 | #if !defined (BSD4_2) && !defined (__osf__) | ||
| 164 | |||
| 165 | #ifdef MSDOS | ||
| 166 | void | ||
| 167 | get_lim_data () | ||
| 168 | { | ||
| 169 | _go32_dpmi_meminfo info; | ||
| 170 | |||
| 171 | _go32_dpmi_get_free_memory_information (&info); | ||
| 172 | lim_data = info.available_memory; | ||
| 173 | } | ||
| 174 | #else /* not MSDOS */ | ||
| 175 | static void | ||
| 176 | get_lim_data () | ||
| 177 | { | ||
| 178 | lim_data = vlimit (LIM_DATA, -1); | ||
| 179 | } | ||
| 180 | #endif /* not MSDOS */ | ||
| 181 | |||
| 182 | #else /* BSD4_2 */ | ||
| 183 | |||
| 184 | static void | ||
| 185 | get_lim_data () | ||
| 186 | { | ||
| 187 | struct rlimit XXrlimit; | ||
| 188 | |||
| 189 | getrlimit (RLIMIT_DATA, &XXrlimit); | ||
| 190 | #ifdef RLIM_INFINITY | ||
| 191 | lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */ | ||
| 192 | #else | ||
| 193 | lim_data = XXrlimit.rlim_cur; /* soft limit */ | ||
| 194 | #endif | ||
| 195 | } | ||
| 196 | #endif /* BSD4_2 */ | ||
| 197 | #endif /* not WINDOWSNT */ | ||
| 198 | #endif /* not USG */ | ||
| 199 | #endif /* not NO_LIM_DATA */ | ||
| 200 | |||
| 201 | /* arch-tag: fe39244e-e54f-4208-b7aa-02556f7841c5 | 115 | /* arch-tag: fe39244e-e54f-4208-b7aa-02556f7841c5 |
| 202 | (do not change this comment) */ | 116 | (do not change this comment) */ |
diff --git a/src/process.c b/src/process.c index 99f27733918..a82932ba57b 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -6983,7 +6983,7 @@ On some systems, when Emacs reads the output from a subprocess, the output data | |||
| 6983 | is read in very small blocks, potentially resulting in very poor performance. | 6983 | is read in very small blocks, potentially resulting in very poor performance. |
| 6984 | This behavior can be remedied to some extent by setting this variable to a | 6984 | This behavior can be remedied to some extent by setting this variable to a |
| 6985 | non-nil value, as it will automatically delay reading from such processes, to | 6985 | non-nil value, as it will automatically delay reading from such processes, to |
| 6986 | allowing them to produce more output before Emacs tries to read it. | 6986 | allow them to produce more output before Emacs tries to read it. |
| 6987 | If the value is t, the delay is reset after each write to the process; any other | 6987 | If the value is t, the delay is reset after each write to the process; any other |
| 6988 | non-nil value means that the delay is not reset on write. | 6988 | non-nil value means that the delay is not reset on write. |
| 6989 | The variable takes effect when `start-process' is called. */); | 6989 | The variable takes effect when `start-process' is called. */); |
diff --git a/src/vm-limit.c b/src/vm-limit.c index 48d13c323ae..cadfb4cc95a 100644 --- a/src/vm-limit.c +++ b/src/vm-limit.c | |||
| @@ -44,13 +44,102 @@ typedef void *POINTER; | |||
| 44 | 2 -- 85% warning already issued. | 44 | 2 -- 85% warning already issued. |
| 45 | 3 -- 95% warning issued; keep warning frequently. | 45 | 3 -- 95% warning issued; keep warning frequently. |
| 46 | */ | 46 | */ |
| 47 | static int warnlevel; | 47 | enum warnlevel { not_warned, warned_75, warned_85, warned_95 }; |
| 48 | |||
| 49 | static enum warnlevel warnlevel; | ||
| 48 | 50 | ||
| 49 | /* Function to call to issue a warning; | 51 | /* Function to call to issue a warning; |
| 50 | 0 means don't issue them. */ | 52 | 0 means don't issue them. */ |
| 51 | static void (*warn_function) (); | 53 | static void (*warn_function) (); |
| 52 | 54 | ||
| 53 | /* Get more memory space, complaining if we're near the end. */ | 55 | /* Start of data space; can be changed by calling malloc_init. */ |
| 56 | static POINTER data_space_start; | ||
| 57 | |||
| 58 | /* Number of bytes of writable memory we can expect to be able to get. */ | ||
| 59 | static unsigned long lim_data; | ||
| 60 | |||
| 61 | |||
| 62 | #ifdef NO_LIM_DATA | ||
| 63 | static void | ||
| 64 | get_lim_data () | ||
| 65 | { | ||
| 66 | lim_data = -1; | ||
| 67 | } | ||
| 68 | #else /* not NO_LIM_DATA */ | ||
| 69 | |||
| 70 | #ifdef USG | ||
| 71 | |||
| 72 | static void | ||
| 73 | get_lim_data () | ||
| 74 | { | ||
| 75 | extern long ulimit (); | ||
| 76 | |||
| 77 | lim_data = -1; | ||
| 78 | |||
| 79 | /* Use the ulimit call, if we seem to have it. */ | ||
| 80 | #if !defined (ULIMIT_BREAK_VALUE) || defined (GNU_LINUX) | ||
| 81 | lim_data = ulimit (3, 0); | ||
| 82 | #endif | ||
| 83 | |||
| 84 | /* If that didn't work, just use the macro's value. */ | ||
| 85 | #ifdef ULIMIT_BREAK_VALUE | ||
| 86 | if (lim_data == -1) | ||
| 87 | lim_data = ULIMIT_BREAK_VALUE; | ||
| 88 | #endif | ||
| 89 | |||
| 90 | lim_data -= (long) data_space_start; | ||
| 91 | } | ||
| 92 | |||
| 93 | #else /* not USG */ | ||
| 94 | #ifdef WINDOWSNT | ||
| 95 | |||
| 96 | static void | ||
| 97 | get_lim_data () | ||
| 98 | { | ||
| 99 | extern unsigned long reserved_heap_size; | ||
| 100 | lim_data = reserved_heap_size; | ||
| 101 | } | ||
| 102 | |||
| 103 | #else | ||
| 104 | #if !defined (BSD4_2) && !defined (__osf__) | ||
| 105 | |||
| 106 | #ifdef MSDOS | ||
| 107 | void | ||
| 108 | get_lim_data () | ||
| 109 | { | ||
| 110 | _go32_dpmi_meminfo info; | ||
| 111 | |||
| 112 | _go32_dpmi_get_free_memory_information (&info); | ||
| 113 | lim_data = info.available_memory; | ||
| 114 | } | ||
| 115 | #else /* not MSDOS */ | ||
| 116 | static void | ||
| 117 | get_lim_data () | ||
| 118 | { | ||
| 119 | lim_data = vlimit (LIM_DATA, -1); | ||
| 120 | } | ||
| 121 | #endif /* not MSDOS */ | ||
| 122 | |||
| 123 | #else /* BSD4_2 */ | ||
| 124 | |||
| 125 | static void | ||
| 126 | get_lim_data () | ||
| 127 | { | ||
| 128 | struct rlimit XXrlimit; | ||
| 129 | |||
| 130 | getrlimit (RLIMIT_DATA, &XXrlimit); | ||
| 131 | #ifdef RLIM_INFINITY | ||
| 132 | lim_data = XXrlimit.rlim_cur & RLIM_INFINITY; /* soft limit */ | ||
| 133 | #else | ||
| 134 | lim_data = XXrlimit.rlim_cur; /* soft limit */ | ||
| 135 | #endif | ||
| 136 | } | ||
| 137 | #endif /* BSD4_2 */ | ||
| 138 | #endif /* not WINDOWSNT */ | ||
| 139 | #endif /* not USG */ | ||
| 140 | #endif /* not NO_LIM_DATA */ | ||
| 141 | |||
| 142 | /* Verify amount of memory available, complaining if we're near the end. */ | ||
| 54 | 143 | ||
| 55 | static void | 144 | static void |
| 56 | check_memory_limits () | 145 | check_memory_limits () |
| @@ -64,14 +153,19 @@ check_memory_limits () | |||
| 64 | register POINTER cp; | 153 | register POINTER cp; |
| 65 | unsigned long five_percent; | 154 | unsigned long five_percent; |
| 66 | unsigned long data_size; | 155 | unsigned long data_size; |
| 156 | enum warnlevel new_warnlevel; | ||
| 67 | 157 | ||
| 68 | #ifdef HAVE_GETRLIMIT | 158 | #ifdef HAVE_GETRLIMIT |
| 69 | struct rlimit { | 159 | struct rlimit rlimit; |
| 70 | rlim_t rlim_cur; | ||
| 71 | rlim_t rlim_max; | ||
| 72 | } rlimit; | ||
| 73 | 160 | ||
| 74 | getrlimit (RLIMIT_DATA, &rlimit); | 161 | getrlimit (RLIMIT_AS, &rlimit); |
| 162 | |||
| 163 | if (RLIM_INFINITY == rlimit.rlim_max) | ||
| 164 | return; | ||
| 165 | |||
| 166 | /* This is a nonsensical case, but it happens -- rms. */ | ||
| 167 | if (rlimit.rlim_cur > rlimit.rlim_max) | ||
| 168 | return; | ||
| 75 | 169 | ||
| 76 | five_percent = rlimit.rlim_max / 20; | 170 | five_percent = rlimit.rlim_max / 20; |
| 77 | data_size = rlimit.rlim_cur; | 171 | data_size = rlimit.rlim_cur; |
| @@ -93,57 +187,61 @@ check_memory_limits () | |||
| 93 | 187 | ||
| 94 | #endif /* not HAVE_GETRLIMIT */ | 188 | #endif /* not HAVE_GETRLIMIT */ |
| 95 | 189 | ||
| 96 | if (warn_function) | 190 | if (!warn_function) |
| 97 | switch (warnlevel) | 191 | return; |
| 98 | { | 192 | |
| 99 | case 0: | 193 | /* What level of warning does current memory usage demand? */ |
| 100 | if (data_size > five_percent * 15) | 194 | if (data_size > five_percent * 19) |
| 101 | { | 195 | new_warnlevel = warned_95; |
| 102 | warnlevel++; | 196 | else if (data_size > five_percent * 17) |
| 103 | (*warn_function) ("Warning: past 75% of memory limit"); | 197 | new_warnlevel = warned_85; |
| 104 | } | 198 | else if (data_size > five_percent * 15) |
| 105 | break; | 199 | new_warnlevel = warned_75; |
| 106 | 200 | else | |
| 107 | case 1: | 201 | new_warnlevel = not_warned; |
| 108 | if (data_size > five_percent * 17) | 202 | |
| 109 | { | 203 | /* If we have gone up a level, give the appropriate warning. */ |
| 110 | warnlevel++; | 204 | if (new_warnlevel > warnlevel || new_warnlevel == warned_95) |
| 111 | (*warn_function) ("Warning: past 85% of memory limit"); | 205 | { |
| 112 | } | 206 | warnlevel = new_warnlevel; |
| 113 | break; | 207 | switch (warnlevel) |
| 114 | 208 | { | |
| 115 | case 2: | 209 | case warned_75: |
| 116 | if (data_size > five_percent * 19) | 210 | (*warn_function) ("Warning: past 75% of memory limit"); |
| 117 | { | 211 | break; |
| 118 | warnlevel++; | 212 | |
| 119 | (*warn_function) ("Warning: past 95% of memory limit"); | 213 | case warned_85: |
| 120 | } | 214 | (*warn_function) ("Warning: past 85% of memory limit"); |
| 121 | break; | 215 | break; |
| 122 | 216 | ||
| 123 | default: | 217 | case warned_95: |
| 124 | (*warn_function) ("Warning: past acceptable memory limits"); | 218 | (*warn_function) ("Warning: past 95% of memory limit"); |
| 125 | break; | 219 | } |
| 126 | } | 220 | } |
| 127 | 221 | /* Handle going down in usage levels, with some hysteresis. */ | |
| 128 | /* If we go down below 70% full, issue another 75% warning | 222 | else |
| 129 | when we go up again. */ | 223 | { |
| 130 | if (data_size < five_percent * 14) | 224 | /* If we go down below 70% full, issue another 75% warning |
| 131 | warnlevel = 0; | 225 | when we go up again. */ |
| 132 | /* If we go down below 80% full, issue another 85% warning | 226 | if (data_size < five_percent * 14) |
| 133 | when we go up again. */ | 227 | warnlevel = not_warned; |
| 134 | else if (warnlevel > 1 && data_size < five_percent * 16) | 228 | /* If we go down below 80% full, issue another 85% warning |
| 135 | warnlevel = 1; | 229 | when we go up again. */ |
| 136 | /* If we go down below 90% full, issue another 95% warning | 230 | else if (warnlevel > warned_75 && data_size < five_percent * 16) |
| 137 | when we go up again. */ | 231 | warnlevel = warned_75; |
| 138 | else if (warnlevel > 2 && data_size < five_percent * 18) | 232 | /* If we go down below 90% full, issue another 95% warning |
| 139 | warnlevel = 2; | 233 | when we go up again. */ |
| 234 | else if (warnlevel > warned_85 && data_size < five_percent * 18) | ||
| 235 | warnlevel = warned_85; | ||
| 236 | } | ||
| 140 | 237 | ||
| 141 | if (EXCEEDS_LISP_PTR (cp)) | 238 | if (EXCEEDS_LISP_PTR (cp)) |
| 142 | (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); | 239 | (*warn_function) ("Warning: memory in use exceeds lisp pointer size"); |
| 143 | } | 240 | } |
| 144 | 241 | ||
| 145 | /* Cause reinitialization based on job parameters; | 242 | /* Enable memory usage warnings. |
| 146 | also declare where the end of pure storage is. */ | 243 | START says where the end of pure storage is. |
| 244 | WARNFUN specifies the function to call to issue a warning. */ | ||
| 147 | 245 | ||
| 148 | void | 246 | void |
| 149 | memory_warnings (start, warnfun) | 247 | memory_warnings (start, warnfun) |
| @@ -160,10 +258,8 @@ memory_warnings (start, warnfun) | |||
| 160 | warn_function = warnfun; | 258 | warn_function = warnfun; |
| 161 | __after_morecore_hook = check_memory_limits; | 259 | __after_morecore_hook = check_memory_limits; |
| 162 | 260 | ||
| 163 | #ifdef WINDOWSNT | ||
| 164 | /* Force data limit to be recalculated on each run. */ | 261 | /* Force data limit to be recalculated on each run. */ |
| 165 | lim_data = 0; | 262 | lim_data = 0; |
| 166 | #endif | ||
| 167 | } | 263 | } |
| 168 | 264 | ||
| 169 | /* arch-tag: eab04eda-1f69-447a-8d9f-95f0a3983ca5 | 265 | /* arch-tag: eab04eda-1f69-447a-8d9f-95f0a3983ca5 |
diff --git a/src/w32fns.c b/src/w32fns.c index 34450fd5219..c116c51603b 100644 --- a/src/w32fns.c +++ b/src/w32fns.c | |||
| @@ -3250,6 +3250,11 @@ w32_wnd_proc (hwnd, msg, wParam, lParam) | |||
| 3250 | BOOL up; | 3250 | BOOL up; |
| 3251 | int button; | 3251 | int button; |
| 3252 | 3252 | ||
| 3253 | /* Ignore middle and extra buttons as long as the menu is active. */ | ||
| 3254 | f = x_window_to_frame (dpyinfo, hwnd); | ||
| 3255 | if (f && f->output_data.w32->menubar_active) | ||
| 3256 | return 0; | ||
| 3257 | |||
| 3253 | if (parse_button (msg, HIWORD (wParam), &button, &up)) | 3258 | if (parse_button (msg, HIWORD (wParam), &button, &up)) |
| 3254 | { | 3259 | { |
| 3255 | if (up) ReleaseCapture (); | 3260 | if (up) ReleaseCapture (); |
diff --git a/src/w32term.c b/src/w32term.c index 0017d2a5c86..bd04f0cb4b5 100644 --- a/src/w32term.c +++ b/src/w32term.c | |||
| @@ -5236,6 +5236,8 @@ x_error_catcher (display, error) | |||
| 5236 | x_catch_errors (dpy) | 5236 | x_catch_errors (dpy) |
| 5237 | x_catch_errors_unwind (old_val) | 5237 | x_catch_errors_unwind (old_val) |
| 5238 | x_check_errors (dpy, format) | 5238 | x_check_errors (dpy, format) |
| 5239 | x_fully_uncatch_errors () | ||
| 5240 | x_catching_errors () | ||
| 5239 | x_had_errors_p (dpy) | 5241 | x_had_errors_p (dpy) |
| 5240 | x_clear_errors (dpy) | 5242 | x_clear_errors (dpy) |
| 5241 | x_uncatch_errors (dpy, count) | 5243 | x_uncatch_errors (dpy, count) |
diff --git a/src/window.c b/src/window.c index bc9a956994a..23a4eb98e4b 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -219,7 +219,7 @@ int window_deletion_count; | |||
| 219 | 219 | ||
| 220 | /* Used by the function window_scroll_pixel_based */ | 220 | /* Used by the function window_scroll_pixel_based */ |
| 221 | 221 | ||
| 222 | static int preserve_y; | 222 | static int window_scroll_pixel_based_preserve_y; |
| 223 | 223 | ||
| 224 | #if 0 /* This isn't used anywhere. */ | 224 | #if 0 /* This isn't used anywhere. */ |
| 225 | /* Nonzero means we can split a frame even if it is "unsplittable". */ | 225 | /* Nonzero means we can split a frame even if it is "unsplittable". */ |
| @@ -4797,17 +4797,17 @@ window_scroll_pixel_based (window, n, whole, noerror) | |||
| 4797 | calls to scroll-up or scroll-down. This avoids the | 4797 | calls to scroll-up or scroll-down. This avoids the |
| 4798 | possibility of point becoming "stuck" on a tall line when | 4798 | possibility of point becoming "stuck" on a tall line when |
| 4799 | scrolling by one line. */ | 4799 | scrolling by one line. */ |
| 4800 | if (preserve_y < 0 | 4800 | if (window_scroll_pixel_based_preserve_y < 0 |
| 4801 | || (current_kboard->Vlast_command != Qscroll_up | 4801 | || (current_kboard->Vlast_command != Qscroll_up |
| 4802 | && current_kboard->Vlast_command != Qscroll_down)) | 4802 | && current_kboard->Vlast_command != Qscroll_down)) |
| 4803 | { | 4803 | { |
| 4804 | start_display (&it, w, start); | 4804 | start_display (&it, w, start); |
| 4805 | move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS); | 4805 | move_it_to (&it, PT, -1, -1, -1, MOVE_TO_POS); |
| 4806 | preserve_y = it.current_y; | 4806 | window_scroll_pixel_based_preserve_y = it.current_y; |
| 4807 | } | 4807 | } |
| 4808 | } | 4808 | } |
| 4809 | else | 4809 | else |
| 4810 | preserve_y = -1; | 4810 | window_scroll_pixel_based_preserve_y = -1; |
| 4811 | 4811 | ||
| 4812 | /* Move iterator it from start the specified distance forward or | 4812 | /* Move iterator it from start the specified distance forward or |
| 4813 | backward. The result is the new window start. */ | 4813 | backward. The result is the new window start. */ |
| @@ -4937,12 +4937,13 @@ window_scroll_pixel_based (window, n, whole, noerror) | |||
| 4937 | || EQ (Vscroll_preserve_screen_position, Qt))) | 4937 | || EQ (Vscroll_preserve_screen_position, Qt))) |
| 4938 | /* We found PT at a legitimate height. Leave it alone. */ | 4938 | /* We found PT at a legitimate height. Leave it alone. */ |
| 4939 | ; | 4939 | ; |
| 4940 | else if (preserve_y >= 0) | 4940 | else if (window_scroll_pixel_based_preserve_y >= 0) |
| 4941 | { | 4941 | { |
| 4942 | /* If we have a header line, take account of it. | 4942 | /* If we have a header line, take account of it. |
| 4943 | This is necessary because we set it.current_y to 0, above. */ | 4943 | This is necessary because we set it.current_y to 0, above. */ |
| 4944 | move_it_to (&it, -1, -1, | 4944 | move_it_to (&it, -1, -1, |
| 4945 | preserve_y - (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 ), | 4945 | window_scroll_pixel_based_preserve_y |
| 4946 | - (WINDOW_WANTS_HEADER_LINE_P (w) ? 1 : 0 ), | ||
| 4946 | -1, MOVE_TO_Y); | 4947 | -1, MOVE_TO_Y); |
| 4947 | SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); | 4948 | SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); |
| 4948 | } | 4949 | } |
| @@ -4963,7 +4964,8 @@ window_scroll_pixel_based (window, n, whole, noerror) | |||
| 4963 | int charpos, bytepos; | 4964 | int charpos, bytepos; |
| 4964 | int partial_p; | 4965 | int partial_p; |
| 4965 | 4966 | ||
| 4966 | /* Save our position, for the preserve_y case. */ | 4967 | /* Save our position, for the |
| 4968 | window_scroll_pixel_based_preserve_y case. */ | ||
| 4967 | charpos = IT_CHARPOS (it); | 4969 | charpos = IT_CHARPOS (it); |
| 4968 | bytepos = IT_BYTEPOS (it); | 4970 | bytepos = IT_BYTEPOS (it); |
| 4969 | 4971 | ||
| @@ -4993,14 +4995,15 @@ window_scroll_pixel_based (window, n, whole, noerror) | |||
| 4993 | || EQ (Vscroll_preserve_screen_position, Qt))) | 4995 | || EQ (Vscroll_preserve_screen_position, Qt))) |
| 4994 | /* We found PT before we found the display margin, so PT is ok. */ | 4996 | /* We found PT before we found the display margin, so PT is ok. */ |
| 4995 | ; | 4997 | ; |
| 4996 | else if (preserve_y >= 0) | 4998 | else if (window_scroll_pixel_based_preserve_y >= 0) |
| 4997 | { | 4999 | { |
| 4998 | SET_TEXT_POS_FROM_MARKER (start, w->start); | 5000 | SET_TEXT_POS_FROM_MARKER (start, w->start); |
| 4999 | start_display (&it, w, start); | 5001 | start_display (&it, w, start); |
| 5000 | /* It would be wrong to subtract CURRENT_HEADER_LINE_HEIGHT | 5002 | /* It would be wrong to subtract CURRENT_HEADER_LINE_HEIGHT |
| 5001 | here because we called start_display again and did not | 5003 | here because we called start_display again and did not |
| 5002 | alter it.current_y this time. */ | 5004 | alter it.current_y this time. */ |
| 5003 | move_it_to (&it, -1, -1, preserve_y, -1, MOVE_TO_Y); | 5005 | move_it_to (&it, -1, -1, window_scroll_pixel_based_preserve_y, -1, |
| 5006 | MOVE_TO_Y); | ||
| 5004 | SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); | 5007 | SET_PT_BOTH (IT_CHARPOS (it), IT_BYTEPOS (it)); |
| 5005 | } | 5008 | } |
| 5006 | else | 5009 | else |
| @@ -7027,7 +7030,7 @@ syms_of_window () | |||
| 7027 | minibuf_selected_window = Qnil; | 7030 | minibuf_selected_window = Qnil; |
| 7028 | staticpro (&minibuf_selected_window); | 7031 | staticpro (&minibuf_selected_window); |
| 7029 | 7032 | ||
| 7030 | preserve_y = -1; | 7033 | window_scroll_pixel_based_preserve_y = -1; |
| 7031 | 7034 | ||
| 7032 | DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function, | 7035 | DEFVAR_LISP ("temp-buffer-show-function", &Vtemp_buffer_show_function, |
| 7033 | doc: /* Non-nil means call as function to display a help buffer. | 7036 | doc: /* Non-nil means call as function to display a help buffer. |
diff --git a/src/xdisp.c b/src/xdisp.c index a645efd38a2..7bdda29fb0f 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -2020,7 +2020,7 @@ get_phys_cursor_geometry (w, row, glyph, heightp) | |||
| 2020 | } | 2020 | } |
| 2021 | } | 2021 | } |
| 2022 | 2022 | ||
| 2023 | *heightp = h - 1; | 2023 | *heightp = h; |
| 2024 | return WINDOW_TO_FRAME_PIXEL_Y (w, y); | 2024 | return WINDOW_TO_FRAME_PIXEL_Y (w, y); |
| 2025 | } | 2025 | } |
| 2026 | 2026 | ||
diff --git a/src/xfns.c b/src/xfns.c index d3067e00fe8..f2d5530a39c 100644 --- a/src/xfns.c +++ b/src/xfns.c | |||
| @@ -4610,6 +4610,7 @@ unwind_create_tip_frame (frame) | |||
| 4610 | return deleted; | 4610 | return deleted; |
| 4611 | } | 4611 | } |
| 4612 | 4612 | ||
| 4613 | parms = Fcopy_alist (parms); | ||
| 4613 | 4614 | ||
| 4614 | /* Create a frame for a tooltip on the display described by DPYINFO. | 4615 | /* Create a frame for a tooltip on the display described by DPYINFO. |
| 4615 | PARMS is a list of frame parameters. TEXT is the string to | 4616 | PARMS is a list of frame parameters. TEXT is the string to |
diff --git a/src/xterm.c b/src/xterm.c index 0d19cf029b5..80b8c914f5b 100644 --- a/src/xterm.c +++ b/src/xterm.c | |||
| @@ -7193,7 +7193,7 @@ x_draw_hollow_cursor (w, row) | |||
| 7193 | 7193 | ||
| 7194 | /* Set clipping, draw the rectangle, and reset clipping again. */ | 7194 | /* Set clipping, draw the rectangle, and reset clipping again. */ |
| 7195 | x_clip_to_row (w, row, TEXT_AREA, gc); | 7195 | x_clip_to_row (w, row, TEXT_AREA, gc); |
| 7196 | XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h); | 7196 | XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h - 1); |
| 7197 | XSetClipMask (dpy, gc, None); | 7197 | XSetClipMask (dpy, gc, None); |
| 7198 | } | 7198 | } |
| 7199 | 7199 | ||
| @@ -7604,6 +7604,23 @@ x_clear_errors (dpy) | |||
| 7604 | x_error_message->string[0] = 0; | 7604 | x_error_message->string[0] = 0; |
| 7605 | } | 7605 | } |
| 7606 | 7606 | ||
| 7607 | /* Close off all unclosed x_catch_errors calls. */ | ||
| 7608 | |||
| 7609 | void | ||
| 7610 | x_fully_uncatch_errors () | ||
| 7611 | { | ||
| 7612 | while (x_error_message) | ||
| 7613 | x_uncatch_errors (); | ||
| 7614 | } | ||
| 7615 | |||
| 7616 | /* Nonzero if x_catch_errors has been done and not yet canceled. */ | ||
| 7617 | |||
| 7618 | int | ||
| 7619 | x_catching_errors () | ||
| 7620 | { | ||
| 7621 | return x_error_message != 0; | ||
| 7622 | } | ||
| 7623 | |||
| 7607 | #if 0 | 7624 | #if 0 |
| 7608 | static unsigned int x_wire_count; | 7625 | static unsigned int x_wire_count; |
| 7609 | x_trace_wire () | 7626 | x_trace_wire () |