diff options
author | Phillip Lord <phillip.lord@russet.org.uk> | 2015-11-12 22:01:22 +0000 |
---|---|---|
committer | Phillip Lord <phillip.lord@russet.org.uk> | 2015-11-12 22:01:22 +0000 |
commit | 20aa42e8204f8f0139ba3880cb32ddf88acc9bf4 (patch) | |
tree | f77644c920b0f6a5a2f5849a064c6828c17530b1 /src/cmds.c | |
parent | d2f73db50bec29724cb1324910350ad24420b174 (diff) | |
parent | 44dfa86b7d382b84564d68472da1448d08f48129 (diff) | |
download | emacs-20aa42e8204f8f0139ba3880cb32ddf88acc9bf4.tar.gz emacs-20aa42e8204f8f0139ba3880cb32ddf88acc9bf4.tar.bz2 emacs-20aa42e8204f8f0139ba3880cb32ddf88acc9bf4.zip |
; Merge branch 'fix/no-undo-boundary-on-secondary-buffer-change'
Conflicts:
src/cmds.c
src/keyboard.c
Diffstat (limited to 'src/cmds.c')
-rw-r--r-- | src/cmds.c | 56 |
1 files changed, 14 insertions, 42 deletions
diff --git a/src/cmds.c b/src/cmds.c index 0afc023e681..167ebb74302 100644 --- a/src/cmds.c +++ b/src/cmds.c @@ -218,36 +218,6 @@ to t. */) return Qnil; } -static int nonundocount; - -static void -remove_excessive_undo_boundaries (void) -{ - bool remove_boundary = true; - - if (!EQ (Vthis_command, KVAR (current_kboard, Vlast_command))) - nonundocount = 0; - - if (NILP (Vexecuting_kbd_macro)) - { - if (nonundocount <= 0 || nonundocount >= 20) - { - remove_boundary = false; - nonundocount = 0; - } - nonundocount++; - } - - if (remove_boundary - && CONSP (BVAR (current_buffer, undo_list)) - && NILP (XCAR (BVAR (current_buffer, undo_list))) - /* Only remove auto-added boundaries, not boundaries - added by explicit calls to undo-boundary. */ - && EQ (BVAR (current_buffer, undo_list), last_undo_boundary)) - /* Remove the undo_boundary that was just pushed. */ - bset_undo_list (current_buffer, XCDR (BVAR (current_buffer, undo_list))); -} - DEFUN ("delete-char", Fdelete_char, Sdelete_char, 1, 2, "p\nP", doc: /* Delete the following N characters (previous if N is negative). Optional second arg KILLFLAG non-nil means kill instead (save in kill ring). @@ -263,7 +233,7 @@ because it respects values of `delete-active-region' and `overwrite-mode'. */) CHECK_NUMBER (n); if (eabs (XINT (n)) < 2) - remove_excessive_undo_boundaries (); + call0 (Qundo_auto__amalgamate); pos = PT + XINT (n); if (NILP (killflag)) @@ -309,20 +279,19 @@ At the end, it runs `post-self-insert-hook'. */) error ("Negative repetition argument %"pI"d", XINT (n)); if (XFASTINT (n) < 2) - remove_excessive_undo_boundaries (); + call0 (Qundo_auto__amalgamate); /* Barf if the key that invoked this was not a character. */ if (!CHARACTERP (last_command_event)) bitch_at_user (); - else - { - int character = translate_char (Vtranslation_table_for_input, - XINT (last_command_event)); - int val = internal_self_insert (character, XFASTINT (n)); - if (val == 2) - nonundocount = 0; - frame_make_pointer_invisible (SELECTED_FRAME ()); - } + else { + int character = translate_char (Vtranslation_table_for_input, + XINT (last_command_event)); + int val = internal_self_insert (character, XFASTINT (n)); + if (val == 2) + Fset (Qundo_auto__this_command_amalgamating, Qnil); + frame_make_pointer_invisible (SELECTED_FRAME ()); + } return Qnil; } @@ -525,6 +494,10 @@ internal_self_insert (int c, EMACS_INT n) void syms_of_cmds (void) { + DEFSYM (Qundo_auto__amalgamate, "undo-auto--amalgamate"); + DEFSYM (Qundo_auto__this_command_amalgamating, + "undo-auto--this-command-amalgamating"); + DEFSYM (Qkill_forward_chars, "kill-forward-chars"); /* A possible value for a buffer's overwrite-mode variable. */ @@ -554,7 +527,6 @@ keys_of_cmds (void) { 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"); |