From cbb59342310c395a04b5dc85454938167793dd96 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Fri, 8 Apr 2011 11:37:15 -0400 Subject: [PATCH] Remove internal_with_output_to_temp_buffer, replacing sole user with Lisp. * lisp/help.el (help-form-show): New function, to be called from C. Put help-form output in a buffer named differently than *Help*. * src/keyboard.c (read_char): Call Lisp function help-form-show, instead of using internal_with_output_to_temp_buffer. (Qhelp_form_show): New var. * src/lisp.h (internal_with_output_to_temp_buffer): Remove prototype. * src/print.c (internal_with_output_to_temp_buffer): Function deleted. --- lisp/ChangeLog | 5 +++++ lisp/help.el | 9 +++++++++ src/ChangeLog | 10 ++++++++++ src/keyboard.c | 10 ++++++---- src/lisp.h | 2 -- src/print.c | 23 ----------------------- src/window.c | 3 --- 7 files changed, 30 insertions(+), 32 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 6dfcbdbcdc7..d17c98103a0 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-04-08 Chong Yidong + + * help.el (help-form-show): New function, to be called from C. + Put help-form output in a buffer named differently than *Help*. + 2011-04-08 Eli Zaretskii * files.el (file-size-human-readable): New function. diff --git a/lisp/help.el b/lisp/help.el index e148e5ef6ab..b7f46a02155 100644 --- a/lisp/help.el +++ b/lisp/help.el @@ -1256,6 +1256,15 @@ Select help window if the actual value of the user option ;; Reset `help-window' to nil to avoid confusing future calls of ;; `help-mode-finish' with plain `with-output-to-temp-buffer'. (setq help-window nil)))) + +;; Called from C, on encountering `help-char' when reading a char. +;; Don't print to *Help*; that would clobber Help history. +(defun help-form-show () + "Display the output of a non-nil `help-form'." + (let ((msg (eval help-form))) + (if (stringp msg) + (with-output-to-temp-buffer " *Char Help*" + (princ msg))))) (provide 'help) diff --git a/src/ChangeLog b/src/ChangeLog index 3e4100878c4..e74643be30a 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,13 @@ +2011-04-08 Chong Yidong + + * keyboard.c (read_char): Call Lisp function help-form-show, + instead of using internal_with_output_to_temp_buffer. + (Qhelp_form_show): New var. + + * print.c (internal_with_output_to_temp_buffer): Function deleted. + + * lisp.h (internal_with_output_to_temp_buffer): Remove prototype. + 2011-04-06 Chong Yidong * process.c (Flist_processes): Removed to Lisp. diff --git a/src/keyboard.c b/src/keyboard.c index ae4fddb2c89..70bd47181b1 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -260,6 +260,8 @@ Lisp_Object Qdeferred_action_function; Lisp_Object Qinput_method_exit_on_first_char; Lisp_Object Qinput_method_use_echo_area; +Lisp_Object Qhelp_form_show; + /* File in which we write all commands we read. */ FILE *dribble; @@ -3095,10 +3097,7 @@ read_char (int commandflag, int nmaps, Lisp_Object *maps, Lisp_Object prev_event = Fcons (Fcurrent_window_configuration (Qnil), help_form_saved_window_configs); record_unwind_protect (read_char_help_form_unwind, Qnil); - - tem0 = Feval (Vhelp_form, Qnil); - if (STRINGP (tem0)) - internal_with_output_to_temp_buffer ("*Help*", print_help, tem0); + call0 (Qhelp_form_show); cancel_echoing (); do @@ -11602,6 +11601,9 @@ syms_of_keyboard (void) Qinput_method_use_echo_area = intern_c_string ("input-method-use-echo-area"); staticpro (&Qinput_method_use_echo_area); + Qhelp_form_show = intern_c_string ("help-form-show"); + staticpro (&Qhelp_form_show); + Fset (Qinput_method_exit_on_first_char, Qnil); Fset (Qinput_method_use_echo_area, Qnil); diff --git a/src/lisp.h b/src/lisp.h index f3016d521d1..250c0d807ac 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -2775,8 +2775,6 @@ extern Lisp_Object Qprint_escape_newlines; extern void write_string (const char *, int); extern void print_error_message (Lisp_Object, Lisp_Object, const char *, Lisp_Object); -extern Lisp_Object internal_with_output_to_temp_buffer - (const char *, Lisp_Object (*) (Lisp_Object), Lisp_Object); #define FLOAT_TO_STRING_BUFSIZE 350 extern void float_to_string (char *, double); extern void syms_of_print (void); diff --git a/src/print.c b/src/print.c index c076e1ec973..f68f04ac5fa 100644 --- a/src/print.c +++ b/src/print.c @@ -520,29 +520,6 @@ temp_output_buffer_setup (const char *bufname) specbind (Qstandard_output, buf); } - -/* FIXME: Use Lisp's with-output-to-temp-buffer instead! */ -Lisp_Object -internal_with_output_to_temp_buffer (const char *bufname, Lisp_Object (*function) (Lisp_Object), Lisp_Object args) -{ - int count = SPECPDL_INDEX (); - Lisp_Object buf, val; - struct gcpro gcpro1; - - GCPRO1 (args); - record_unwind_protect (Fset_buffer, Fcurrent_buffer ()); - temp_output_buffer_setup (bufname); - buf = Vstandard_output; - UNGCPRO; - - val = (*function) (args); - - GCPRO1 (val); - temp_output_buffer_show (buf); - UNGCPRO; - - return unbind_to (count, val); -} static void print (Lisp_Object obj, register Lisp_Object printcharfun, int escapeflag); static void print_preprocess (Lisp_Object obj); diff --git a/src/window.c b/src/window.c index 5ca46dd3316..d023f9a29cd 100644 --- a/src/window.c +++ b/src/window.c @@ -3664,9 +3664,6 @@ temp_output_buffer_show (register Lisp_Object buf) BEGV = BEG; ZV = Z; SET_PT (BEG); -#if 0 /* rms: there should be no reason for this. */ - XBUFFER (buf)->prevent_redisplay_optimizations_p = 1; -#endif set_buffer_internal (old); if (!NILP (Vtemp_buffer_show_function)) -- 2.39.2