emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: patch: create default error output function


From: Stefan Monnier
Subject: Re: patch: create default error output function
Date: Tue, 05 Nov 2013 15:48:38 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

> As suggested by Stefan in [1] I prepared a patch that creates a new elisp
> function which makes a default value for command-error-function.  This makes
> it possible to use this variable by packages. Patch is against r114884.

Thanks.  Installed (after moving the code a bit, to reduce the size of
the patch).  Also, I installed the patch below on top of it to better
follow the conventions.

> Sometimes it's better to have a ticket in the tracker for a patch for easy
> reference to a discussion from a commit log message. But in gnu they say
> about posting a patch to the list, so I post.

That's OK, but M-x report-emacs-bug is also a good way to do that,
indeed, so it gets a bug number.


        Stefan


PS: My email to address@hidden seems to have trouble
reaching you.  E.g. I get warnings like:

   ... while talking to mx.poczta.onet.pl.:
   >>> DATA
   <<< 450 4.7.1 <address@hidden>: Recipient address rejected: Spf check: 
softfail
   <address@hidden>... Deferred: 450 4.7.1 <address@hidden>: Recipient address 
rejected: Spf check: softfail
   <<< 554 5.5.1 Error: no valid recipients
   Warning: message still undelivered after 4 hours
   Will keep trying until message is 2 days old

PPS: I installed your patch as a "tiny change".  We won't be able to
accept many more contributions from you until you sign some
copyright paperwork.  If you want to sign such paperwork to get it out
of the way, then please send me an email.


=== modified file 'src/ChangeLog'
--- src/ChangeLog       2013-11-05 20:12:39 +0000
+++ src/ChangeLog       2013-11-05 20:13:34 +0000
@@ -1,7 +1,8 @@
 2013-11-05  Jarek Czekalski  <address@hidden>  (tiny change)
 
-       * keyboard.c: new function default-error-output which becomes
-       a default value for command-error-function.
+       * keyboard.c (Fdefault_error_output): New function, extracted from
+       cmd_error_internal.
+       (syms_of_keyboard): Use it for Vcommand_error_function.
 
 2013-11-05  Stefan Monnier  <address@hidden>
 

=== modified file 'src/keyboard.c'
--- src/keyboard.c      2013-11-05 20:12:39 +0000
+++ src/keyboard.c      2013-11-05 20:45:53 +0000
@@ -241,8 +241,6 @@
 
 static Lisp_Object Qecho_area_clear_hook;
 
-static Lisp_Object Qdefault_error_output;
-
 /* Hooks to run before and after each command.  */
 static Lisp_Object Qpre_command_hook;
 static Lisp_Object Qpost_command_hook;
@@ -1074,8 +1072,7 @@
   Vquit_flag = Qnil;
   Vinhibit_quit = Qt;
 
-  /* Use user's specified output function,
-     initially it is our Fdefault_error_output.  */
+  /* Use user's specified output function if any.  */
   if (!NILP (Vcommand_error_function))
     call3 (Vcommand_error_function, data,
           context ? build_string (context) : empty_unibyte_string,
@@ -1084,17 +1081,17 @@
   Vsignaling_function = Qnil;
 }
 
-DEFUN ("default-error-output", Fdefault_error_output,
-       Sdefault_error_output, 3, 3, 0,
-       doc: /* Produce default output for the error message,
-into the messages buffer and the echo area.  */)
+DEFUN ("command-error-default-function", Fcommand_error_default_function,
+       Scommand_error_default_function, 3, 3, 0,
+       doc: /* Produce default output for unhandled error message.
+Default value of `command-error-function'.  */)
   (Lisp_Object data, Lisp_Object context, Lisp_Object signal)
 {
   struct frame *sf = SELECTED_FRAME ();
   const char *sz_context;
 
-  CHECK_STRING(context);
-  sz_context = XSTRING(context)->data;
+  CHECK_STRING (context);
+  sz_context = XSTRING (context)->data;
 
   /* If the window system or terminal frame hasn't been initialized
      yet, or we're not interactive, write the message to stderr and exit.  */
@@ -1126,6 +1123,7 @@
 
       print_error_message (data, Qt, sz_context, signal);
     }
+  return Qnil;
 }
 
 static Lisp_Object command_loop_2 (Lisp_Object);
@@ -11123,7 +11121,7 @@
   defsubr (&Sabort_recursive_edit);
   defsubr (&Sexit_recursive_edit);
   defsubr (&Srecursion_depth);
-  defsubr (&Sdefault_error_output);
+  defsubr (&Scommand_error_default_function);
   defsubr (&Stop_level);
   defsubr (&Sdiscard_input);
   defsubr (&Sopen_dribble_file);
@@ -11602,18 +11600,14 @@
 peculiar kind of quitting.  */);
   Vthrow_on_input = Qnil;
 
-  DEFSYM (Qdefault_error_output, "default-error-output");
   DEFVAR_LISP ("command-error-function", Vcommand_error_function,
-              doc: /* If non-nil, function to output error messages.
-The arguments are the error data, a list of the form
- (SIGNALED-CONDITIONS . SIGNAL-DATA)
-such as just as `condition-case' would bind its variable to,
-the context (a string which normally goes at the start of the message),
-and the Lisp function within which the error was signaled.
-
-This variable is initialized with Emacs default error output function.
-It is suggested that user functions are added using add-function.  */);
-  Vcommand_error_function = Qdefault_error_output;
+              doc: /* Function to output error messages.
+Called with three arguments:
+- the error data, a list of the form (SIGNALED-CONDITION . SIGNAL-DATA)
+  such as what `condition-case' would bind its variable to,
+- the context (a string which normally goes at the start of the message),
+- the Lisp function within which the error was signaled.  */);
+  Vcommand_error_function = intern ("command-error-default-function");
 
   DEFVAR_LISP ("enable-disabled-menus-and-buttons",
               Venable_disabled_menus_and_buttons,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]