comparison src/cmdloop.c @ 219:262b8bb4a523 r20-4b8

Import from CVS: tag r20-4b8
author cvs
date Mon, 13 Aug 2007 10:09:35 +0200
parents 489f57a838ef
children c5d627a313b1
comparison
equal deleted inserted replaced
218:c9f226976f56 219:262b8bb4a523
58 Lisp_Object Qcommand_error; 58 Lisp_Object Qcommand_error;
59 59
60 /* The emergency error handler, before we're ready. */ 60 /* The emergency error handler, before we're ready. */
61 Lisp_Object Qreally_early_error_handler; 61 Lisp_Object Qreally_early_error_handler;
62 62
63 /* Variable defined in Lisp. */
64 Lisp_Object Qerrors_deactivate_region;
65
63 static Lisp_Object command_loop_1 (Lisp_Object dummy); 66 static Lisp_Object command_loop_1 (Lisp_Object dummy);
64 67
65 /* There are two possible command loops -- one written entirely in 68 /* There are two possible command loops -- one written entirely in
66 C and one written mostly in Lisp, except stuff written in C for 69 C and one written mostly in Lisp, except stuff written in C for
67 speed. The advantage of the Lisp command loop is that the user 70 speed. The advantage of the Lisp command loop is that the user
71 static Lisp_Object 74 static Lisp_Object
72 default_error_handler (Lisp_Object data) 75 default_error_handler (Lisp_Object data)
73 { 76 {
74 int speccount = specpdl_depth (); 77 int speccount = specpdl_depth ();
75 78
79 /* None of this is invoked, normally. This code is almost identical
80 to the `command-error' function, except `command-error' does cool
81 tricks with sounds. This function is a fallback, invoked if
82 command-error is unavailable. */
83
76 Fding (Qnil, Qnil, Qnil); 84 Fding (Qnil, Qnil, Qnil);
77 zmacs_deactivate_region (); 85
86 if (!NILP (Fboundp (Qerrors_deactivate_region))
87 && !NILP (Fsymbol_value (Qerrors_deactivate_region)))
88 zmacs_deactivate_region ();
78 Fdiscard_input (); 89 Fdiscard_input ();
79 specbind (Qinhibit_quit, Qt); 90 specbind (Qinhibit_quit, Qt);
80 Vstandard_output = Qt; 91 Vstandard_output = Qt;
81 Vstandard_input = Qt; 92 Vstandard_input = Qt;
82 Vexecuting_macro = Qnil; 93 Vexecuting_macro = Qnil;
94 Fset (intern ("last-error"), data);
83 clear_echo_area (selected_frame (), Qnil, 0); 95 clear_echo_area (selected_frame (), Qnil, 0);
84 data = Fprin1_to_string (data, Qnil); 96 Fdisplay_error (data, Qt);
85 message ("Error: %s", XSTRING_DATA (data));
86 check_quit (); /* make Vquit_flag accurate */ 97 check_quit (); /* make Vquit_flag accurate */
87 Vquit_flag = Qnil; 98 Vquit_flag = Qnil;
88 return (unbind_to (speccount, Qt)); 99 return (unbind_to (speccount, Qt));
89 } 100 }
90 101
580 syms_of_cmdloop (void) 591 syms_of_cmdloop (void)
581 { 592 {
582 defsymbol (&Qcommand_error, "command-error"); 593 defsymbol (&Qcommand_error, "command-error");
583 defsymbol (&Qreally_early_error_handler, "really-early-error-handler"); 594 defsymbol (&Qreally_early_error_handler, "really-early-error-handler");
584 defsymbol (&Qtop_level, "top-level"); 595 defsymbol (&Qtop_level, "top-level");
596 defsymbol (&Qerrors_deactivate_region, "errors-deactivate-region");
585 597
586 #ifndef LISP_COMMAND_LOOP 598 #ifndef LISP_COMMAND_LOOP
587 DEFSUBR (Frecursive_edit); 599 DEFSUBR (Frecursive_edit);
588 #endif 600 #endif
589 DEFSUBR (Freally_early_error_handler); 601 DEFSUBR (Freally_early_error_handler);