mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-10 05:30:45 -08:00
* src/lisp.h (last_undo_boundary): Declare new var.
* src/keyboard.c (command_loop_1): Set it. * src/cmds.c (Fself_insert_command): Use it to only remove boundaries that were auto-added by the command loop. Fixes: debbugs:11774
This commit is contained in:
parent
a4acb88d35
commit
464d5a5e1f
4 changed files with 30 additions and 10 deletions
|
|
@ -1,3 +1,10 @@
|
|||
2012-07-18 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* lisp.h (last_undo_boundary): Declare new var.
|
||||
* keyboard.c (command_loop_1): Set it.
|
||||
* cmds.c (Fself_insert_command): Use it to only remove boundaries that
|
||||
were auto-added by the command loop (bug#11774).
|
||||
|
||||
2012-07-18 Andreas Schwab <schwab@linux-m68k.org>
|
||||
|
||||
* w32font.c (Qsymbol): Remove local definition.
|
||||
|
|
|
|||
|
|
@ -296,7 +296,10 @@ At the end, it runs `post-self-insert-hook'. */)
|
|||
|
||||
if (remove_boundary
|
||||
&& CONSP (BVAR (current_buffer, undo_list))
|
||||
&& NILP (XCAR (BVAR (current_buffer, undo_list))))
|
||||
&& NILP (XCAR (BVAR (current_buffer, undo_list)))
|
||||
/* Only remove auto-added boundaries, not boundaries
|
||||
added be explicit calls to undo-boundary. */
|
||||
&& EQ (BVAR (current_buffer, undo_list), last_undo_boundary))
|
||||
/* Remove the undo_boundary that was just pushed. */
|
||||
BVAR (current_buffer, undo_list) = XCDR (BVAR (current_buffer, undo_list));
|
||||
|
||||
|
|
|
|||
|
|
@ -1318,6 +1318,9 @@ cancel_hourglass_unwind (Lisp_Object arg)
|
|||
}
|
||||
#endif
|
||||
|
||||
/* The last boundary auto-added to buffer-undo-list. */
|
||||
Lisp_Object last_undo_boundary;
|
||||
|
||||
/* FIXME: This is wrong rather than test window-system, we should call
|
||||
a new set-selection, which will then dispatch to x-set-selection, or
|
||||
tty-set-selection, or w32-set-selection, ... */
|
||||
|
|
@ -1565,7 +1568,13 @@ command_loop_1 (void)
|
|||
#endif
|
||||
|
||||
if (NILP (KVAR (current_kboard, Vprefix_arg))) /* FIXME: Why? --Stef */
|
||||
Fundo_boundary ();
|
||||
{
|
||||
Lisp_Object undo = BVAR (current_buffer, undo_list);
|
||||
Fundo_boundary ();
|
||||
last_undo_boundary
|
||||
= (EQ (undo, BVAR (current_buffer, undo_list))
|
||||
? Qnil : BVAR (current_buffer, undo_list));
|
||||
}
|
||||
Fcommand_execute (Vthis_command, Qnil, Qnil, Qnil);
|
||||
|
||||
#ifdef HAVE_WINDOW_SYSTEM
|
||||
|
|
|
|||
17
src/lisp.h
17
src/lisp.h
|
|
@ -2921,7 +2921,7 @@ extern ptrdiff_t find_before_next_newline (ptrdiff_t, ptrdiff_t, ptrdiff_t);
|
|||
extern void syms_of_search (void);
|
||||
extern void clear_regexp_cache (void);
|
||||
|
||||
/* Defined in minibuf.c */
|
||||
/* Defined in minibuf.c. */
|
||||
|
||||
extern Lisp_Object Qcompletion_ignore_case;
|
||||
extern Lisp_Object Vminibuffer_list;
|
||||
|
|
@ -2930,25 +2930,25 @@ extern Lisp_Object get_minibuffer (EMACS_INT);
|
|||
extern void init_minibuf_once (void);
|
||||
extern void syms_of_minibuf (void);
|
||||
|
||||
/* Defined in callint.c */
|
||||
/* Defined in callint.c. */
|
||||
|
||||
extern Lisp_Object Qminus, Qplus;
|
||||
extern Lisp_Object Qwhen;
|
||||
extern Lisp_Object Qcall_interactively, Qmouse_leave_buffer_hook;
|
||||
extern void syms_of_callint (void);
|
||||
|
||||
/* Defined in casefiddle.c */
|
||||
/* Defined in casefiddle.c. */
|
||||
|
||||
extern Lisp_Object Qidentity;
|
||||
extern void syms_of_casefiddle (void);
|
||||
extern void keys_of_casefiddle (void);
|
||||
|
||||
/* Defined in casetab.c */
|
||||
/* Defined in casetab.c. */
|
||||
|
||||
extern void init_casetab_once (void);
|
||||
extern void syms_of_casetab (void);
|
||||
|
||||
/* Defined in keyboard.c */
|
||||
/* Defined in keyboard.c. */
|
||||
|
||||
extern Lisp_Object echo_message_buffer;
|
||||
extern struct kboard *echo_kboard;
|
||||
|
|
@ -2956,6 +2956,7 @@ extern void cancel_echoing (void);
|
|||
extern Lisp_Object Qdisabled, QCfilter;
|
||||
extern Lisp_Object Qup, Qdown, Qbottom;
|
||||
extern Lisp_Object Qtop;
|
||||
extern Lisp_Object last_undo_boundary;
|
||||
extern int input_pending;
|
||||
extern Lisp_Object menu_bar_items (Lisp_Object);
|
||||
extern Lisp_Object tool_bar_items (Lisp_Object, int *);
|
||||
|
|
@ -2976,13 +2977,13 @@ extern void init_keyboard (void);
|
|||
extern void syms_of_keyboard (void);
|
||||
extern void keys_of_keyboard (void);
|
||||
|
||||
/* Defined in indent.c */
|
||||
/* Defined in indent.c. */
|
||||
extern ptrdiff_t current_column (void);
|
||||
extern void invalidate_current_column (void);
|
||||
extern int indented_beyond_p (ptrdiff_t, ptrdiff_t, EMACS_INT);
|
||||
extern void syms_of_indent (void);
|
||||
|
||||
/* Defined in frame.c */
|
||||
/* Defined in frame.c. */
|
||||
extern Lisp_Object Qonly;
|
||||
extern Lisp_Object Qvisible;
|
||||
extern void store_frame_param (struct frame *, Lisp_Object, Lisp_Object);
|
||||
|
|
@ -2995,7 +2996,7 @@ extern Lisp_Object frame_buffer_predicate (Lisp_Object);
|
|||
extern void frames_discard_buffer (Lisp_Object);
|
||||
extern void syms_of_frame (void);
|
||||
|
||||
/* Defined in emacs.c */
|
||||
/* Defined in emacs.c. */
|
||||
extern char **initial_argv;
|
||||
extern int initial_argc;
|
||||
#if defined (HAVE_X_WINDOWS) || defined (HAVE_NS)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue