* cmds.c (nonundocount): New global variable.

(keys_of_cmds): Initialize it.
(Fself_insert_command): Use it to combine upto 20 sequential chars
into a single undo entry, just like the Qself_insert_command code in
keyboard.c does.
Call frame_make_pointer_invisible, also like the Qself_insert_command
code in keyboard.c does.
* keyboard.c (command_loop_1): Use the new global nonundocount rather
than its own local replacement for it.
This commit is contained in:
Stefan Monnier 2009-08-12 05:07:48 +00:00
parent cf6e27cf47
commit 1ac9108a3d
3 changed files with 107 additions and 80 deletions

View file

@ -1,12 +1,23 @@
2009-08-12 Stefan Monnier <monnier@iro.umontreal.ca>
* cmds.c (nonundocount): New global variable.
(keys_of_cmds): Initialize it.
(Fself_insert_command): Use it to combine upto 20 sequential chars
into a single undo entry, just like the Qself_insert_command code in
keyboard.c does.
Call frame_make_pointer_invisible, also like the Qself_insert_command
code in keyboard.c does.
* keyboard.c (command_loop_1): Use the new global nonundocount rather
than its own local replacement for it.
2009-08-10 Ken Raeburn <raeburn@raeburn.org>
* fns.c (concat): Don't re-set string length to its current
value.
* fns.c (concat): Don't re-set string length to its current value.
* coding.h (decode_coding_string, encode_coding_string): Use
SBYTES macro.
* coding.h (decode_coding_string, encode_coding_string):
Use SBYTES macro.
* doprnt.c (doprnt_lisp): Unused function deleted.
* doprnt.c (doprnt_lisp): Delete unused function.
(doprnt): Merge with doprnt1, discarding lispstrings code.
* lisp.h (doprnt_lisp): Don't declare.
@ -62,23 +73,21 @@
* nsfont.m (nsfont_draw): Revert 2009-07-15 change.
* nsterm.m (ns_maybe_dumpglyphs_background): Revert 2009-07-15
change.
* nsterm.m (ns_maybe_dumpglyphs_background): Revert 2009-07-15 change.
(ns_get_color): Revert 2009-07-16 change.
2009-07-25 Eli Zaretskii <eliz@gnu.org>
* lread.c (syms_of_lread) <force_load_messages>: New variable.
(Fload): Use it to force load messages, even if NOMESSAGES is
non-nil.
(Fload): Use it to force load messages, even if NOMESSAGES is non-nil.
2009-07-25 Ken Raeburn <raeburn@raeburn.org>
* coding.h (decode_coding_string, encode_coding_string): Use
SCHARS macro.
* coding.h (decode_coding_string, encode_coding_string):
Use SCHARS macro.
* lread.c: Rewrite 2009-07-21 changes.
(load_depth): Deleted.
(load_depth): Delete.
(Qload_in_progress): New variable.
(load_unwind): Don't reference load_depth or load_in_progress.
(Fload): Likewise; specbind Qload_in_progress instead.
@ -104,8 +113,8 @@
2009-07-22 Jason Rumney <jasonr@gnu.org>
* w32fns.c (w32_wnd_proc) [WM_IME_STARTCOMPOSITION]: Position
IME window at cursor (Bug#2570).
* w32fns.c (w32_wnd_proc) [WM_IME_STARTCOMPOSITION]:
Position IME window at cursor (Bug#2570).
(w32_wnd_proc) [WM_IME_CHAR]: Release context when finished.
(globals_of_w32fns): Dynamically load functions required above.
@ -181,16 +190,15 @@
(font_delete_unmatched): Likewise.
(font_list_entities): The return type changed.
(font_select_entity): The format of the second argument changed.
(font_find_for_lface): Adjusted for the above changes. Don't
suppress the checking of C even if the repertory supports it.
(Flist_fonts): Adjusted for the above changes.
(font_find_for_lface): Adjuste for the above changes.
Don't suppress the checking of C even if the repertory supports it.
(Flist_fonts): Adjust for the above changes.
* ftfont.c (ftfont_spec_pattern): New arg langname. Caller
changed.
(ftfont_list): Adjusted for the change of ftfont_spec_pattern.
* ftfont.c (ftfont_spec_pattern): New arg langname. Change caller.
(ftfont_list): Adjust for the change of ftfont_spec_pattern.
Reject a font who has adstyle property that is different from a
langname derived from registry property.
(ftfont_match): Adjusted for the change of ftfont_spec_pattern.
(ftfont_match): Adjust for the change of ftfont_spec_pattern.
2009-07-13 Eli Zaretskii <eliz@gnu.org>
@ -207,10 +215,10 @@
2009-07-11 Eli Zaretskii <eliz@gnu.org>
* dired.c (directory_files_internal_w32_unwind) [WINDOWSNT]: New
function.
(directory_files_internal) [WINDOWSNT]: Bind
w32-get-true-file-attributes to either t or nil, depending whether
* dired.c (directory_files_internal_w32_unwind) [WINDOWSNT]:
New function.
(directory_files_internal) [WINDOWSNT]:
Bind w32-get-true-file-attributes to either t or nil, depending whether
the filesystem of the directory is fast or slow.
* w32.c (logon_network_drive): Don't assume PATH is an absolute
@ -232,8 +240,7 @@
2009-07-09 Eli Zaretskii <eliz@gnu.org>
* w32proc.c (syms_of_ntproc) <w32-get-true-file-attributes>: Doc
fix.
* w32proc.c (syms_of_ntproc) <w32-get-true-file-attributes>: Doc fix.
* w32.c (stat): Treat UNC file names as residing on remote
drives. (Bug#3542)
@ -284,8 +291,7 @@
(multibyte_char_to_unibyte_safe): Likewise.
(Funibyte_char_to_multibyte): Don't check charset_unibyte.
* xdisp.c (get_next_display_element): Decode it->c by
charset_unibyte.
* xdisp.c (get_next_display_element): Decode it->c by charset_unibyte.
(x_produce_glyphs): Likewise.
* .gdbinit (xcharset): Fix the treating $arg0.
@ -345,8 +351,8 @@
(read_avail_input): Call frame_make_pointer_visible.
* frame.c (Vmake_pointer_invisible): New variable.
(frame_make_pointer_invisible, frame_make_pointer_visible): New
functions.
(frame_make_pointer_invisible, frame_make_pointer_visible):
New functions.
(syms_of_frame): DEFVAR make-pointer-invisible, initialize to Qt.
* frame.h: Declare frame_make_pointer_invisible and
@ -365,7 +371,7 @@
* gtkutil.c (xg_frame_set_char_size): Do not set pixel width/height
here or call change_frame_size. Just call flush_and_sync.
(flush_and_sync): Reintroduced.
(flush_and_sync): Reintroduce.
2009-07-01 Jan Djärv <jan.h.d@swipnet.se>
@ -402,8 +408,8 @@
(x_set_font, x_figure_window_size): Do not handle fullscreen specially.
(syms_of_frame): Initialize Qmaximized.
* frame.h (fullscreen_type): Add FULLSCREEN_MAXIMIZED. Declare
Qfullwidth, Qfullheight, Qfullboth, Qmaximized.
* frame.h (fullscreen_type): Add FULLSCREEN_MAXIMIZED.
Declare Qfullwidth, Qfullheight, Qfullboth, Qmaximized.
* xterm.c (handle_one_xevent): Remove call to x_check_fullscreen
for Expose event. Add call to x_check_fullscreen for MapNotify event.
@ -421,8 +427,8 @@
flush_and_sync.
(xg_height_changed): New function.
(xg_create_frame_widgets): Remove call to gtk_widget_set_size_request
and gtk_window_set_policy. Set frame gravity after parsing the geometry
string.
and gtk_window_set_policy. Set frame gravity after parsing the
geometry string.
(xg_update_frame_menubar, free_frame_menubar)
(xg_tool_bar_detach_callback, xg_tool_bar_attach_callback)
(update_frame_tool_bar, free_frame_tool_bar): Call xg_height_changed.
@ -433,8 +439,8 @@
* keyboard.c (decode_keyboard_code): New function.
(tty_read_avail_input): Decode the input bytes if necessary.
* coding.c (setup_coding_system): Initialize
coding->carryover_bytes to 0.
* coding.c (setup_coding_system):
Initialize coding->carryover_bytes to 0.
(Fset_keyboard_coding_system_internal): If CODING-SYSTEM is nil,
use Qno_conversion.
@ -444,8 +450,7 @@
2009-06-30 Chong Yidong <cyd@stupidchicken.com>
* xftfont.c (xftfont_open): Avoid passing NULL argument to
XftLockFace.
* xftfont.c (xftfont_open): Avoid passing NULL argument to XftLockFace.
2009-06-30 Jason Rumney <jasonr@gnu.org>
@ -477,8 +482,8 @@
* xdisp.c (start_display, handle_face_prop)
(move_it_vertically_backward, cursor_row_fully_visible_p)
(redisplay_window, try_window_id, produce_image_glyph): Delete
some #ifdef-ed out code chunks that are now obsolete.
(redisplay_window, try_window_id, produce_image_glyph):
Delete some #ifdef-ed out code chunks that are now obsolete.
* xterm.c (x_update_window_begin, x_new_focus_frame)
(x_scroll_bar_handle_click, handle_one_xevent)
@ -550,8 +555,8 @@
2009-06-23 Jim Meyering <meyering@redhat.com>
* src/ftfont.c (setup_otf_gstring, ftfont_shape_by_flt): Use
xmalloc and xrealloc (not malloc and realloc), so subsequent heap
* src/ftfont.c (setup_otf_gstring, ftfont_shape_by_flt):
Use xmalloc and xrealloc (not malloc and realloc), so subsequent heap
pointer dereferences are guaranteed to be valid.
2009-06-23 Kenichi Handa <handa@m17n.org>
@ -605,8 +610,7 @@
2009-06-21 Chong Yidong <cyd@stupidchicken.com>
* xdisp.c (IT_DISPLAYING_WHITESPACE): Define for
!HAVE_WINDOW_SYSTEM.
* xdisp.c (IT_DISPLAYING_WHITESPACE): Define for !HAVE_WINDOW_SYSTEM.
(move_it_in_display_line_to, move_it_in_display_line_to)
(display_line): Remove #ifdef HAVE_WINDOW_SYSTEM.
@ -635,8 +639,7 @@
2009-06-18 Kenichi Handa <handa@m17n.org>
* coding.c (decode_coding_iso_2022): Check MSB of bytes more
rigidly.
* coding.c (decode_coding_iso_2022): Check MSB of bytes more rigidly.
2009-06-18 Andreas Schwab <aschwab@redhat.com>
@ -760,8 +763,7 @@
2009-06-08 Felix Mueller <felix@enqueue.eu> (tiny change)
* nsterm.m (ns_init_paths): Append path separator to INFOPATH
variable.
* nsterm.m (ns_init_paths): Append path separator to INFOPATH variable.
2009-06-08 Wolfgang Lux <wolfgang.lux@gmail.com> (tiny change)
@ -786,8 +788,8 @@
2009-05-29 Kenichi Handa <handa@m17n.org>
* coding.c (get_translation_table): Check
Venable_character_translation.
* coding.c (get_translation_table):
Check Venable_character_translation.
2009-05-26 David Reitter <david.reitter@gmail.com>
@ -1044,8 +1046,7 @@
* dispnew.c (Fsend_string_to_terminal): Doc fix.
* data.c (Fterminal_local_value, Fset_terminal_local_value): Doc
fixes.
* data.c (Fterminal_local_value, Fset_terminal_local_value): Doc fixes.
* coding.c (Fterminal_coding_system): Doc fix.
@ -1055,15 +1056,15 @@
(Fx_server_vendor, Fx_server_version, Fx_display_screens)
(Fx_display_mm_height, Fx_display_mm_width)
(Fx_display_backing_store, Fx_display_visual_class)
(Fx_display_save_under, Fx_close_connection, Fx_synchronize): Doc
fixes, replacing "terminal id" with "terminal object".
(Fx_display_save_under, Fx_close_connection, Fx_synchronize):
Doc fixes, replacing "terminal id" with "terminal object".
(check_x_display_info): Handle terminal objects instead of
terminal ids.
* term.c (Ftty_display_color_p, Ftty_display_color_cells)
(Ftty_type, Fcontrolling_tty_p, Ftty_no_underline, Fsuspend_tty)
(Fresume_tty, Vsuspend_tty_functions, Vresume_tty_functions): Doc
fixes, replacing "terminal id" with "terminal object".
(Fresume_tty, Vsuspend_tty_functions, Vresume_tty_functions):
Doc fixes, replacing "terminal id" with "terminal object".
2009-04-21 Kenichi Handa <handa@m17n.org>
@ -1072,9 +1073,8 @@
* coding.c (decode_coding_utf_16): Reduce charbuf_end for the
worst case.
(decode_coding_emacs_mule, decode_coding_iso_2022)
(decode_coding_sjis, decode_coding_big5, decode_coding_charset):
Likewise.
(decode_coding_sjis, decode_coding_big5, decode_coding_charset)
(decode_coding_emacs_mule, decode_coding_iso_2022): Likewise.
2009-04-19 Jason Rumney <jasonr@gnu.org>
@ -1094,8 +1094,8 @@
2009-04-19 Jan Djärv <jan.h.d@swipnet.se>
* gtkutil.c (xg_tool_bar_menu_proxy, update_frame_tool_bar): Use
G_CALLBACK instead of GTK_SIGNAL_FUNC which is deprecated.
* gtkutil.c (xg_tool_bar_menu_proxy, update_frame_tool_bar):
Use G_CALLBACK instead of GTK_SIGNAL_FUNC which is deprecated.
(xg_initialize): Use g_type_class_ref instead of gtk_type_class which
is deprecated.
@ -1141,8 +1141,7 @@
2009-04-16 Kenichi Handa <handa@m17n.org>
* xfont.c (xfont_has_char): Special handling of `ja' and `ko'
adstyle.
* xfont.c (xfont_has_char): Special handling of `ja' and `ko' adstyle.
* xftfont.c (xftfont_has_char): Special handling of `ja' and `ko'
adstyle.
@ -1151,8 +1150,8 @@
(enum ftfont_cache_for): New enum.
(fc_charset_table): Undo the previous change.
(ftfont_get_latin1_charset): Delete it.
(ftfont_pattern_entity): Check cache by ftfont_lookup_cache. Set
FONT_SIZE_INDEX of the entity to 0 for a scalable font. For a
(ftfont_pattern_entity): Check cache by ftfont_lookup_cache.
Set FONT_SIZE_INDEX of the entity to 0 for a scalable font. For a
non-scarable font, try to get AVERAGE_WIDTH.
(ftfont_lookup_cache): Argument FOR-FACE is changed to CACHE_FOR.
Change ft_face_cache from a list of a hash-table. Don't check
@ -1160,8 +1159,7 @@
(ftfont_get_fc_charset): Call ftfont_lookup_cache with
FTFONT_CACHE_FOR_CHARET.
(ftfont_get_charset): Undo the previous change.
(ftfont_open): Call ftfont_lookup_cache with
FTFONT_CACHE_FOR_FACE.
(ftfont_open): Call ftfont_lookup_cache with FTFONT_CACHE_FOR_FACE.
(ftfont_close): Likewise.
(ftfont_has_char): Special handling of `ja' and `ko' adstyle.
@ -1220,8 +1218,7 @@
2009-04-13 Kenichi Handa <handa@m17n.org>
* font.c (font_delete_unmatched): Preserve the order of list
elements.
* font.c (font_delete_unmatched): Preserve the order of list elements.
(font_select_entity): Suppress the code to optimize for the same
kind of fonts.
(font_load_for_lface): Get a font that supports at least ASCII
@ -1237,8 +1234,7 @@
Delete iso-8859-1 range from the charset of fonts whose adstyle is
`ko' or `ja'.
(ftfont_get_fc_charset): Call ftfont_lookup_cache with ENTITY.
(ftfont_get_charset): For iso8859-1, call
ftfont_get_latin1_charset.
(ftfont_get_charset): For iso8859-1, call ftfont_get_latin1_charset.
(ftfont_list): Don't refuse a font spec with non-nil `adstyle'
property.
(ftfont_open): Call ftfont_lookup_cache with ENTITY.
@ -1258,8 +1254,7 @@
* dispnew.c (redraw_overlapping_rows): Fix detection of
overlapping for topmost and bottommost rows.
* ftfont.c (ftfont_text_extents): Fix calculation of
metrics->descent.
* ftfont.c (ftfont_text_extents): Fix calculation of metrics->descent.
2009-04-06 Jason Rumney <jasonr@gnu.org>

View file

@ -315,15 +315,42 @@ N was explicitly specified. */)
return value;
}
int nonundocount;
/* Note that there's code in command_loop_1 which typically avoids
calling this. */
DEFUN ("self-insert-command", Fself_insert_command, Sself_insert_command, 1, 1, "p",
doc: /* Insert the character you type.
Whichever character you type to run this command is inserted. */)
Whichever character you type to run this command is inserted.
Before insertion, `expand-abbrev' is executed if the inserted character does
not have word syntax and the previous character in the buffer does.
After insertion, the value of `auto-fill-function' is called if the
`auto-fill-chars' table has a non-nil value for the inserted character. */)
(n)
Lisp_Object n;
{
CHECK_NUMBER (n);
int remove_boundary = 1;
if (!EQ (Vthis_command, current_kboard->Vlast_command))
nonundocount = 0;
if (NILP (Vexecuting_kbd_macro)
&& !EQ (minibuf_window, selected_window))
{
if (nonundocount <= 0 || nonundocount >= 20)
{
remove_boundary = 0;
nonundocount = 0;
}
nonundocount++;
}
if (remove_boundary
&& CONSP (current_buffer->undo_list)
&& NILP (XCAR (current_buffer->undo_list)))
/* Remove the undo_boundary that was just pushed. */
current_buffer->undo_list = XCDR (current_buffer->undo_list);
/* Barf if the key that invoked this was not a character. */
if (!CHARACTERP (last_command_event))
@ -353,9 +380,13 @@ Whichever character you type to run this command is inserted. */)
else
while (XINT (n) > 0)
{
int val;
/* Ok since old and new vals both nonneg */
XSETFASTINT (n, XFASTINT (n) - 1);
internal_self_insert (character, XFASTINT (n) != 0);
val = internal_self_insert (character, XFASTINT (n) != 0);
if (val == 2)
nonundocount = 0;
frame_make_pointer_invisible ();
}
}
@ -611,6 +642,7 @@ keys_of_cmds ()
{
int n;
nonundocount = 0;
initial_define_key (global_map, Ctl ('I'), "self-insert-command");
for (n = 040; n < 0177; n++)
initial_define_key (global_map, n, "self-insert-command");

View file

@ -1519,12 +1519,13 @@ cancel_hourglass_unwind (arg)
}
#endif
extern int nonundocount; /* Declared in cmds.c. */
Lisp_Object
command_loop_1 ()
{
Lisp_Object cmd;
int lose;
int nonundocount;
Lisp_Object keybuf[30];
int i;
int prev_modiff = 0;
@ -1540,7 +1541,6 @@ command_loop_1 ()
waiting_for_input = 0;
cancel_echoing ();
nonundocount = 0;
this_command_key_count = 0;
this_command_key_count_reset = 0;
this_single_command_key_start = 0;
@ -1898,7 +1898,7 @@ command_loop_1 ()
#endif
nonundocount = 0;
if (NILP (current_kboard->Vprefix_arg))
if (NILP (current_kboard->Vprefix_arg)) /* FIXME: Why? --Stef */
Fundo_boundary ();
Fcommand_execute (Vthis_command, Qnil, Qnil, Qnil);