From: Jarek Czekalski <jarekczek@poczta.onet.pl>
To: emacs-devel@gnu.org
Subject: patch: create default error output function
Date: Fri, 01 Nov 2013 21:18:25 +0100 [thread overview]
Message-ID: <52740C91.3000305@poczta.onet.pl> (raw)
[-- Attachment #1: Type: text/plain, Size: 695 bytes --]
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.
Please review and comment my first Emacs patch. I couldn't find any
guide for submitting patches, so I based it on my intuition and
experience from previous projects, mainly jEdit.
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.
Thanks,
Jarek
[1] http://lists.gnu.org/archive/html/emacs-devel/2013-10/msg00807.html
[-- Attachment #2: cmd_err_1_04.txt --]
[-- Type: text/plain, Size: 5133 bytes --]
=== modified file 'ChangeLog'
--- ChangeLog 2013-10-31 21:39:10 +0000
+++ ChangeLog 2013-11-01 19:36:58 +0000
@@ -1,3 +1,8 @@
+2013-11-01 Jarek Czekalski <jarekczek@poczta.onet.pl>
+
+ * keyboard.c: new function default-error-output which becomes
+ a default value for command-error-function.
+
2013-10-31 Glenn Morris <rgm@gnu.org>
* configure.ac: Use [!...] rather than [^...], for ksh. (Bug#15769)
=== modified file 'src/keyboard.c'
--- src/keyboard.c 2013-10-29 21:05:35 +0000
+++ src/keyboard.c 2013-11-01 19:46:51 +0000
@@ -241,6 +241,8 @@
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;
@@ -1053,35 +1055,21 @@
return make_number (0);
}
-/* Take actions on handling an error. DATA is the data that describes
- the error.
-
- CONTEXT is a C-string containing ASCII characters only which
- describes the context in which the error happened. If we need to
- generalize CONTEXT to allow multibyte characters, make it a Lisp
- string. */
-
-void
-cmd_error_internal (Lisp_Object data, const char *context)
+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. */)
+ (Lisp_Object data, Lisp_Object context, Lisp_Object signal)
{
struct frame *sf = SELECTED_FRAME ();
-
- /* The immediate context is not interesting for Quits,
- since they are asynchronous. */
- if (EQ (XCAR (data), Qquit))
- Vsignaling_function = Qnil;
-
- Vquit_flag = Qnil;
- Vinhibit_quit = Qt;
-
- /* 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,
- Vsignaling_function);
+ const char *sz_context;
+
+ 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. */
- else if (!sf->glyphs_initialized_p
+ if (!sf->glyphs_initialized_p
/* The initial frame is a special non-displaying frame. It
will be current in daemon mode when there are no frames
to display, and in non-daemon mode before the real frame
@@ -1096,7 +1084,7 @@
|| noninteractive)
{
print_error_message (data, Qexternal_debugging_output,
- context, Vsignaling_function);
+ sz_context, signal);
Fterpri (Qexternal_debugging_output);
Fkill_emacs (make_number (-1));
}
@@ -1107,8 +1095,35 @@
message_log_maybe_newline ();
bitch_at_user ();
- print_error_message (data, Qt, context, Vsignaling_function);
+ print_error_message (data, Qt, sz_context, signal);
}
+}
+
+/* Take actions on handling an error. DATA is the data that describes
+ the error.
+
+ CONTEXT is a C-string containing ASCII characters only which
+ describes the context in which the error happened. If we need to
+ generalize CONTEXT to allow multibyte characters, make it a Lisp
+ string. */
+
+void
+cmd_error_internal (Lisp_Object data, const char *context)
+{
+ Lisp_Object Vcontext;
+ /* The immediate context is not interesting for Quits,
+ since they are asynchronous. */
+ if (EQ (XCAR (data), Qquit))
+ Vsignaling_function = Qnil;
+
+ Vquit_flag = Qnil;
+ Vinhibit_quit = Qt;
+ Vcontext = context ? build_string (context) : empty_unibyte_string;
+
+ /* Use user's specified output function,
+ initially it is our Fdefault_error_output. */
+ if (!NILP (Vcommand_error_function))
+ call3 (Vcommand_error_function, data, Vcontext, Vsignaling_function);
Vsignaling_function = Qnil;
}
@@ -11108,6 +11123,7 @@
defsubr (&Sabort_recursive_edit);
defsubr (&Sexit_recursive_edit);
defsubr (&Srecursion_depth);
+ defsubr (&Sdefault_error_output);
defsubr (&Stop_level);
defsubr (&Sdiscard_input);
defsubr (&Sopen_dribble_file);
@@ -11586,14 +11602,18 @@
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. */);
- Vcommand_error_function = Qnil;
+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;
DEFVAR_LISP ("enable-disabled-menus-and-buttons",
Venable_disabled_menus_and_buttons,
next reply other threads:[~2013-11-01 20:18 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-01 20:18 Jarek Czekalski [this message]
2013-11-02 10:41 ` patch: create default error output function Xue Fuqiao
2013-11-02 10:49 ` Xue Fuqiao
2013-11-05 20:48 ` Stefan Monnier
2013-11-05 21:03 ` Jarek Czekalski
2013-11-06 3:13 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52740C91.3000305@poczta.onet.pl \
--to=jarekczek@poczta.onet.pl \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.