annotate src/cmdloop.c @ 5167:e374ea766cc1

clean up, rearrange allocation statistics code -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-03-21 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (assert_proper_sizing): * alloc.c (c_readonly): * alloc.c (malloced_storage_size): * alloc.c (fixed_type_block_overhead): * alloc.c (lisp_object_storage_size): * alloc.c (inc_lrecord_stats): * alloc.c (dec_lrecord_stats): * alloc.c (pluralize_word): * alloc.c (object_memory_usage_stats): * alloc.c (Fobject_memory_usage): * alloc.c (compute_memusage_stats_length): * alloc.c (disksave_object_finalization_1): * alloc.c (Fgarbage_collect): * mc-alloc.c: * mc-alloc.c (mc_alloced_storage_size): * mc-alloc.h: No functionality change here. Collect the allocations-statistics code that was scattered throughout alloc.c into one place. Add remaining section headings so that all sections have headings clearly identifying the start of the section and its purpose. Expose mc_alloced_storage_size() even when not MEMORY_USAGE_STATS; this fixes build problems and is related to the export of lisp_object_storage_size() and malloced_storage_size() when non-MEMORY_USAGE_STATS in the previous change set.
author Ben Wing <ben@xemacs.org>
date Sun, 21 Mar 2010 04:41:49 -0500
parents 838630c0734f
children 308d34e9f07d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Editor command loop.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
4841
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
3 Copyright (C) 1995, 1996, 2001, 2002, 2003, 2005 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 /* Synched up with: Mule 2.0. Not synched with FSF.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 This was renamed from keyboard.c. However, it only contains the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 command-loop stuff from FSF's keyboard.c; all the rest is in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 event*.c, console.c, or signal.c. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
27 /* #### This module purports to separate out the command-loop stuff
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 from event-stream.c, but it doesn't really. Perhaps this file
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 should just be merged into event-stream.c, given its shortness. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 #include "buffer.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
35 #include "console-impl.h"
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 771
diff changeset
36 #include "device.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 #include "commands.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 #include "frame.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 #include "events.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40 #include "window.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
42 #ifdef HAVE_MS_WINDOWS
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
43 #include "console-msw.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
44 #endif
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
45
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 /* Current depth in recursive edits. */
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 444
diff changeset
47 Fixnum command_loop_level;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 #ifndef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 /* Form to evaluate (if non-nil) when Emacs is started. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 Lisp_Object Vtop_level;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 /* Function to call to evaluate to read and process events. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 Lisp_Object Vcommand_loop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 #endif /* LISP_COMMAND_LOOP */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 Lisp_Object Venter_window_hook, Vleave_window_hook;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58
733
b1f74adcc1ff [xemacs-hg @ 2002-01-22 20:40:00 by janv]
janv
parents: 563
diff changeset
59 Lisp_Object Qdisabled_command_hook, Vdisabled_command_hook;
b1f74adcc1ff [xemacs-hg @ 2002-01-22 20:40:00 by janv]
janv
parents: 563
diff changeset
60
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 /* The error handler. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 Lisp_Object Qcommand_error;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 /* The emergency error handler, before we're ready. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 Lisp_Object Qreally_early_error_handler;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 /* Variable defined in Lisp. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 Lisp_Object Qerrors_deactivate_region;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Lisp_Object Qtop_level;
1703
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
71 Lisp_Object Vminibuffer_echo_wait_function;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
73 #ifdef LISP_COMMAND_LOOP
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 static Lisp_Object command_loop_1 (Lisp_Object dummy);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 EXFUN (Fcommand_loop_1, 0);
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
76 #else
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
77 static DECLARE_DOESNT_RETURN_TYPE (Lisp_Object,
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
78 command_loop_1 (Lisp_Object dummy));
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
79 EXFUN_NORETURN (Fcommand_loop_1, 0);
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
80 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 /* There are two possible command loops -- one written entirely in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 C and one written mostly in Lisp, except stuff written in C for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 speed. The advantage of the Lisp command loop is that the user
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85 can specify their own command loop to use by changing the variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 `command-loop'. Its disadvantage is that it's slow. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 default_error_handler (Lisp_Object data)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 int speccount = specpdl_depth ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 /* None of this is invoked, normally. This code is almost identical
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 to the `command-error' function, except `command-error' does cool
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 tricks with sounds. This function is a fallback, invoked if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 command-error is unavailable. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 Fding (Qnil, Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 if (!NILP (Fboundp (Qerrors_deactivate_region))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 && !NILP (Fsymbol_value (Qerrors_deactivate_region)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 zmacs_deactivate_region ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 Fdiscard_input ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 specbind (Qinhibit_quit, Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 Vstandard_output = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 Vstandard_input = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 Vexecuting_macro = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 Fset (intern ("last-error"), data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 clear_echo_area (selected_frame (), Qnil, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 Fdisplay_error (data, Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 check_quit (); /* make Vquit_flag accurate */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 Vquit_flag = Qnil;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
113 return (unbind_to_1 (speccount, Qt));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
116 DEFUN_NORETURN ("really-early-error-handler", Freally_early_error_handler,
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
117 1, 1, 0, /*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 You should almost certainly not be using this.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
119 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122 /* This is an error handler used when we're running temacs and when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 we're in the early stages of XEmacs. No errors ought to be
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 occurring in those cases (or they ought to be trapped and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125 dealt with elsewhere), but if an error slips through, we need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 to deal with it. We could write this function in Lisp (and it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 used to be this way, at the beginning of loadup.el), but we do
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 it this way in case an error occurs before we get to loading
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 loadup.el. Note that there is also an `early-error-handler',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 used in startup.el to catch more reasonable errors that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131 might occur during startup if the sysadmin or whoever fucked
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 up. This function is more conservative in what it does
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 and is used only as a last resort, indicating that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 programmer himself fucked up somewhere. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 stderr_out ("*** Error in XEmacs initialization");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136 Fprint (x, Qexternal_debugging_output);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 stderr_out ("*** Backtrace\n");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 Fbacktrace (Qexternal_debugging_output, Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 stderr_out ("*** Killing XEmacs\n");
4841
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
140 #ifdef DEBUG_XEMACS
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
141 /* When configured --with-debug, and debug-on-error is set, exit to the
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
142 debugger and abort. This will happen during loadup/dumping. There is
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
143 also code in signal_call_debugger() to do the same whenever running
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
144 noninteractively. That's intended for use debugging e.g. batch byte
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
145 compilation, AFTER dumping has already happened, where the XEMACSDEBUG
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
146 variable can be set to '(setq debug-on-error t)' to trigger the
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
147 behavior.
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
148
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
149 Why do we need to duplicate the bomb-out check here? Well,
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
150 signal_call_debugger() doesn't want to bomb out unless it has an
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
151 uncaught error, and in this case, we've installed a
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
152 call-with-condition-case handler, and so signal_call_debugger() can't
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
153 bomb out before calling us. If we returned and let the error be
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
154 processed further, it *would* trigger the bomb-out-to-debugger
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
155 behavior, but in fact it never gets there because we do `kill-emacs'.
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
156 Therefore, we have to provide the bomb-to-debugger feature
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
157 ourselves. */
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
158 if (!NILP (Vdebug_on_error))
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
159 {
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
160 stderr_out ("XEmacs exiting to debugger.\n");
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
161 Fforce_debugging_signal (Qt);
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
162 }
3465c3161fea when `debug', abort when lisp error during loadup
Ben Wing <ben@xemacs.org>
parents: 3025
diff changeset
163 #endif
5023
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
164 #if defined (HAVE_MS_WINDOWS) && defined (WIN32_NATIVE)
838630c0734f error-checking, Windows shutdown changes
Ben Wing <ben@xemacs.org>
parents: 4841
diff changeset
165 /* Don't do this under Cygwin, since we have output on stderr. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
166 Fmswindows_message_box (build_msg_string ("Initialization error"),
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
167 Qnil, Qnil);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
168 #endif
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
169 Fkill_emacs (make_int (-1));
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
170 RETURN_NOT_REACHED (Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 /* Command-loop (in C) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 #ifndef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 /* The guts of the command loop are in command_loop_1(). This function
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181 doesn't catch errors, though -- that's the job of command_loop_2(),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 which is a condition-case wrapper around command_loop_1().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 command_loop_1() never returns, but may get thrown out of.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 When an error occurs, cmd_error() is called, which usually
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 invokes the Lisp error handler in `command-error'; however,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 a default error handler is provided if `command-error' is nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 (e.g. during startup). The purpose of the error handler is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 simply to display the error message and do associated cleanup;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 it does not need to throw anywhere. When the error handler
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 finishes, the condition-case in command_loop_2() will finish and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 command_loop_2() will reinvoke command_loop_1().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 command_loop_2() is invoked from three places: from
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 initial_command_loop() (called from main() at the end of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 internal initialization), from the Lisp function `recursive-edit',
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 and from call_command_loop().
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 call_command_loop() is called when a macro is started and when the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 minibuffer is entered; normal termination of the macro or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 minibuffer causes a throw out of the recursive command loop. (To
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2532
diff changeset
202 `execute-kbd-macro' for macros and `exit' for minibuffers. Note also
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 that the low-level minibuffer-entering function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 `read-minibuffer-internal', provides its own error handling and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 does not need command_loop_2()'s error encapsulation; so it tells
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 call_command_loop() to invoke command_loop_1() directly.)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 Note that both read-minibuffer-internal and recursive-edit set
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2532
diff changeset
209 up a catch for `exit'; this is why `abort-recursive-edit', which
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 throws to this catch, exits out of either one.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 initial_command_loop(), called from main(), sets up a catch
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2532
diff changeset
213 for `top-level' when invoking command_loop_2(), allowing functions
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 to throw all the way to the top level if they really need to.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 Before invoking command_loop_2(), initial_command_loop() calls
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 top_level_1(), which handles all of the startup stuff (creating
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 the initial frame, handling the command-line options, loading
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 the user's .emacs file, etc.). The function that actually does this
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 is in Lisp and is pointed to by the variable `top-level';
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 normally this function is `normal-top-level'. top_level_1() is
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 just an error-handling wrapper similar to command_loop_2().
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2532
diff changeset
222 Note also that initial_command_loop() sets up a catch for `top-level'
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 when invoking top_level_1(), just like when it invokes
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 command_loop_2(). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
225
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 static Lisp_Object
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
228 cmd_error (Lisp_Object data, Lisp_Object UNUSED (dummy))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 check_quit (); /* make Vquit_flag accurate */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 Vquit_flag = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 any_console_state ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 if (!NILP (Ffboundp (Qcommand_error)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 return call1 (Qcommand_error, data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 return default_error_handler (data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 static Lisp_Object
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
243 top_level_1 (Lisp_Object UNUSED (dummy))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 /* On entry to the outer level, run the startup file */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 if (!NILP (Vtop_level))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 condition_case_1 (Qerror, Feval, Vtop_level, cmd_error, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 #if 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 message ("\ntemacs can only be run in -batch mode.");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 noninteractive = 1; /* prevent things under kill-emacs from blowing up */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 Fkill_emacs (make_int (-1));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 else if (purify_flag)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 message ("Bare impure Emacs (standard Lisp code not loaded)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 message ("Bare Emacs (standard Lisp code not loaded)");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 /* Here we catch errors in execution of commands within the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 editing loop, and reenter the editing loop.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 When there is an error, cmd_error runs and the call
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 to condition_case_1() returns. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 /* Avoid confusing the compiler. A helper function for command_loop_2 */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
272 static DECLARE_DOESNT_RETURN (command_loop_3 (void));
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
273
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 static DOESNT_RETURN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275 command_loop_3 (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 /*
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1204
diff changeset
278 * If we are inside of a menu callback we cannot reenter the command loop
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1204
diff changeset
279 * because we will deadlock, as no input is allowed.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 */
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1204
diff changeset
281 if (in_modal_loop)
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1204
diff changeset
282 invalid_operation ("Attempt to enter command loop inside menu callback",
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1204
diff changeset
283 Qunbound);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
284 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 for (;;)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287 condition_case_1 (Qerror, command_loop_1, Qnil, cmd_error, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 /* #### wrong with selected-console? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 /* See command in initial_command_loop about why this value
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 is 0. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 reset_this_command_keys (Vselected_console, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
293 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
295 static DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, command_loop_2 (Lisp_Object));
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
296
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
297 static DOESNT_RETURN_TYPE (Lisp_Object)
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
298 command_loop_2 (Lisp_Object UNUSED (dummy))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 command_loop_3(); /* doesn't return */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
301 RETURN_NOT_REACHED (Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 /* This is called from emacs.c when it's done with initialization. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 DOESNT_RETURN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 initial_command_loop (Lisp_Object load_me)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 if (!NILP (load_me))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
311 Vtop_level = list2 (Qload, load_me);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313 /* First deal with startup and command-line arguments. A throw
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2532
diff changeset
314 to `top-level' gets us back here directly (does this ever happen?).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 Otherwise, this function will return normally when all command-
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 line arguments have been processed, the user's initialization
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
317 file has been read in, and the first frame has been created. */
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2286
diff changeset
318 internal_catch (Qtop_level, top_level_1, Qnil, 0, 0, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 /* If an error occurred during startup and the initial console
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 wasn't created, then die now (the error was already printed out
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
322 on the terminal device). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 if (!noninteractive &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 (!CONSOLEP (Vselected_console) ||
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325 CONSOLE_STREAM_P (XCONSOLE (Vselected_console))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 Fkill_emacs (make_int (-1));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 /* End of -batch run causes exit here. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 if (noninteractive)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
330 Fkill_emacs (Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 for (;;)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
333 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334 command_loop_level = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 MARK_MODELINE_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 /* Now invoke the command loop. It never returns; however, a
3025
facf3239ba30 [xemacs-hg @ 2005-10-25 11:16:19 by ben]
ben
parents: 2532
diff changeset
337 throw to `top-level' will place us at the end of this loop. */
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2286
diff changeset
338 internal_catch (Qtop_level, command_loop_2, Qnil, 0, 0, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 /* #### wrong with selected-console? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 /* We don't actually call clear_echo_area() here, partially
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 at least because that runs Lisp code and it may be unsafe
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 to do so -- we are outside of the normal catches for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 errors and such. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 reset_this_command_keys (Vselected_console, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 /* This function is invoked when a macro or minibuffer starts up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 Normal termination of the macro or minibuffer causes a throw past us.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 See the comment above.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 Note that this function never returns (but may be thrown out of). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
354 DOESNT_RETURN_TYPE (Lisp_Object)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 call_command_loop (Lisp_Object catch_errors)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 if (NILP (catch_errors))
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
359 command_loop_1 (Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 else
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
361 command_loop_2 (Qnil);
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
362 RETURN_NOT_REACHED (Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 recursive_edit_unwind (Lisp_Object buffer)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 if (!NILP (buffer))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 Fset_buffer (buffer);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 command_loop_level--;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 MARK_MODELINE_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 DEFUN ("recursive-edit", Frecursive_edit, 0, 0, "", /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 Invoke the editor command loop recursively.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 To get out of the recursive edit, a command can do `(throw 'exit nil)';
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 that tells this function to return.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 Alternately, `(throw 'exit t)' makes this function signal an error.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
382 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386 Lisp_Object val;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 int speccount = specpdl_depth ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 command_loop_level++;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
390 MARK_MODELINE_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 record_unwind_protect (recursive_edit_unwind,
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
393 current_buffer
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
394 != XWINDOW_XBUFFER (Fselected_window (Qnil))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 ? Fcurrent_buffer ()
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
396 : Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
397
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 specbind (Qstandard_output, Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 specbind (Qstandard_input, Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2286
diff changeset
401 val = internal_catch (Qexit, command_loop_2, Qnil, 0, 0, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 if (EQ (val, Qt))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 /* Turn abort-recursive-edit into a quit. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 Fsignal (Qquit, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
407 return unbind_to (speccount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 #endif /* !LISP_COMMAND_LOOP */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 /* Alternate command-loop (largely in Lisp) */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 #ifdef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 load1 (Lisp_Object name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 call4 (Qload, name, Qnil, Qt, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 return (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 /* emergency backups for cold-load-stream use */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
428 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 cold_load_command_error (Lisp_Object datum, Lisp_Object ignored)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 check_quit (); /* make Vquit_flag accurate */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 Vquit_flag = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 return default_error_handler (datum);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 cold_load_command_loop (Lisp_Object dummy)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 return (condition_case_1 (Qt,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443 command_loop_1, Qnil,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 cold_load_command_error, Qnil));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
447 DOESNT_RETURN_TYPE (Lisp_Object)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 call_command_loop (Lisp_Object catch_errors)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 /* This function can GC */
479
52626a2f02ef [xemacs-hg @ 2001-04-20 11:31:53 by ben]
ben
parents: 458
diff changeset
451 reset_this_command_keys (Vselected_console, 0); /* #### bleagh */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 loop:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 for (;;)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
456 if (NILP (Vcommand_loop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 call1 (Vcommand_loop, catch_errors);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 /* This isn't a "correct" definition, but you're pretty hosed if
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 you broke "command-loop" anyway */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
463 /* #### not correct with Vselected_console */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 XCONSOLE (Vselected_console)->prefix_arg = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
465 if (NILP (catch_errors))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466 Fcommand_loop_1 ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 else
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2286
diff changeset
468 internal_catch (Qtop_level, cold_load_command_loop, Qnil, 0, 0, 0);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 goto loop;
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
470 RETURN_NOT_REACHED (Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 initial_error_handler (Lisp_Object datum, Lisp_Object ignored)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 Vcommand_loop = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 Fding (Qnil, Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 if (CONSP (datum) && EQ (XCAR (datum), Qquit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 /* Don't bother with the message */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 return (Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 message ("Error in command-loop!!");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 Fset (intern ("last-error"), datum); /* #### Better/different name? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 Fsit_for (make_int (2), Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487 cold_load_command_error (datum, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 return (Qt);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 DOESNT_RETURN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492 initial_command_loop (Lisp_Object load_me)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
495 if (!NILP (load_me))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 if (!NILP (condition_case_1 (Qt, load1, load_me,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 initial_error_handler, Qnil)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 Fkill_emacs (make_int (-1));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 for (;;)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 command_loop_level = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 MARK_MODELINE_CHANGED;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 condition_case_1 (Qt,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 call_command_loop, Qtop_level,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 initial_error_handler, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
511 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 #endif /* LISP_COMMAND_LOOP */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
515
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
517 /* Guts of command loop */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
518 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
520 #ifdef LISP_COMMAND_LOOP
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 static Lisp_Object
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
522 #else
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
523 static DOESNT_RETURN_TYPE (Lisp_Object)
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
524 #endif
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2268
diff changeset
525 command_loop_1 (Lisp_Object UNUSED (dummy))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
527 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528 /* #### not correct with Vselected_console */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 XCONSOLE (Vselected_console)->prefix_arg = Qnil;
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
530 Fcommand_loop_1 ();
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
531 #ifdef LISP_COMMAND_LOOP
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
532 return Qnil;
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
533 #else
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
534 RETURN_NOT_REACHED (Qnil);
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
535 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 /* This is the actual command reading loop, sans error-handling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 encapsulation. This is used for both the C and Lisp command
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 loops. Originally this function was written in Lisp when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 the Lisp command loop was used, but it was too slow that way.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 Under the C command loop, this function will never return
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 (although someone might throw past it). Under the Lisp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 command loop, this will return only when the user specifies
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 a new command loop by changing the command-loop variable. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
548 #ifdef LISP_COMMAND_LOOP
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
549 #define DEFUN_COMMAND_LOOP(a,b,c,d,e,f) DEFUN (a, b, c, d, e, f)
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
550 #else
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
551 #define DEFUN_COMMAND_LOOP(a,b,c,d,e,f) DEFUN_NORETURN (a, b, c, d, e, f)
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
552 #endif
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
553
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 1703
diff changeset
554 DEFUN_COMMAND_LOOP ("command-loop-1", Fcommand_loop_1, 0, 0, 0, /*
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 Invoke the internals of the canonical editor command loop.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 Don't call this unless you know what you're doing.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 /* This function can GC */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
561 Lisp_Object event = Fmake_event (Qnil, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 Lisp_Object old_loop = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 struct gcpro gcpro1, gcpro2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 int was_locked = in_single_console_state ();
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
565 GCPRO2 (event, old_loop);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
566
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
567 /* cancel_echoing (); */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 /* This magically makes single character keyboard macros work just
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
569 like the real thing. This is slightly bogus, but it's in here for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
570 compatibility with Emacs 18. It's not even clear what the "right
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
571 thing" is. */
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 428
diff changeset
572 if (!((STRINGP (Vexecuting_macro) || VECTORP (Vexecuting_macro))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 428
diff changeset
573 && XINT (Flength (Vexecuting_macro)) == 1))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
574 Vlast_command = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 #ifndef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 while (1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
578 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579 old_loop = Vcommand_loop;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 while (EQ (Vcommand_loop, old_loop))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 #endif /* LISP_COMMAND_LOOP */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
582 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 /* If focus_follows_mouse, make sure the frame with window manager
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 focus is selected. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 if (focus_follows_mouse)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 investigate_frame_change ();
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 428
diff changeset
587
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 /* Make sure the current window's buffer is selected. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 Lisp_Object selected_window = Fselected_window (Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 if (!NILP (selected_window) &&
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
593 XWINDOW_XBUFFER (selected_window) != current_buffer)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594 {
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 853
diff changeset
595 set_buffer_internal (XWINDOW_XBUFFER (selected_window));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
598
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
599 #if 0 /* What's wrong with going through ordinary procedure of quit?
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
600 quitting here leaves overriding-terminal-local-map
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
601 when you type C-u C-u C-g. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602 /* If ^G was typed before we got here (that is, before emacs was
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
603 idle and waiting for input) then we treat that as an interrupt. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 QUIT;
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
605 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 /* If minibuffer on and echo area in use, wait 2 sec and redraw
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 minibuffer. Treat a ^G here as a command, not an interrupt.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 if (minibuf_level > 0 && echo_area_active (selected_frame ()))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 /* Bind dont_check_for_quit to 1 so that C-g gets read in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
613 rather than quitting back to the minibuffer. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
614 int count = begin_dont_check_for_quit ();
1703
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
615 if (!NILP (Vminibuffer_echo_wait_function))
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
616 call0 (Vminibuffer_echo_wait_function);
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
617 else
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
618 Fsit_for (make_int (2), Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 clear_echo_area (selected_frame (), Qnil, 0);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 800
diff changeset
620 Vquit_flag = Qnil; /* see begin_dont_check_for_quit() */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
621 unbind_to (count);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
622 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 Fnext_event (event, Qnil);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 Fdispatch_event (event);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 if (!was_locked)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628 any_console_state ();
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
629
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
630 DO_NOTHING_DISABLING_NO_RETURN_WARNINGS;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
631 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
632 #ifdef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
633 UNGCPRO;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
634 return Qnil;
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
635 #else
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 872
diff changeset
636 RETURN_NOT_REACHED (Qnil);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
637 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
638 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
639
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
640
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
641 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
642 /* Initialization */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
643 /**********************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
644
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
646 syms_of_cmdloop (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
647 {
733
b1f74adcc1ff [xemacs-hg @ 2002-01-22 20:40:00 by janv]
janv
parents: 563
diff changeset
648 DEFSYMBOL (Qdisabled_command_hook);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 479
diff changeset
649 DEFSYMBOL (Qcommand_error);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 479
diff changeset
650 DEFSYMBOL (Qreally_early_error_handler);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 479
diff changeset
651 DEFSYMBOL (Qtop_level);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 479
diff changeset
652 DEFSYMBOL (Qerrors_deactivate_region);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
653
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
654 #ifndef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 DEFSUBR (Frecursive_edit);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 DEFSUBR (Freally_early_error_handler);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 DEFSUBR (Fcommand_loop_1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 vars_of_cmdloop (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 DEFVAR_INT ("command-loop-level", &command_loop_level /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 Number of recursive edits in progress.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 command_loop_level = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
669 DEFVAR_LISP ("disabled-command-hook", &Vdisabled_command_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
670 Value is called instead of any command that is disabled,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
671 i.e. has a non-nil `disabled' property.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
672 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
673 Vdisabled_command_hook = intern ("disabled-command-hook");
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
675 DEFVAR_LISP ("leave-window-hook", &Vleave_window_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
676 Not yet implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
677 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
678 Vleave_window_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
679
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
680 DEFVAR_LISP ("enter-window-hook", &Venter_window_hook /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
681 Not yet implemented.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
682 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
683 Venter_window_hook = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684
1703
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
685 DEFVAR_LISP ("minibuffer-echo-wait-function",
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
686 &Vminibuffer_echo_wait_function /*
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
687 The function called by command loop when minibuffer was active and
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
688 message was displayed (text appeared in \" *Echo Area*\" buffer). It
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
689 must wait after displaying message so that user can read it. If the
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
690 variable value is `nil', the equivalent of `(sit-for 2)' is run.
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
691 */ );
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
692 Vminibuffer_echo_wait_function = Qnil;
f561c3904bb3 [xemacs-hg @ 2003-09-20 01:46:53 by youngs]
youngs
parents: 1268
diff changeset
693
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 #ifndef LISP_COMMAND_LOOP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
695 DEFVAR_LISP ("top-level", &Vtop_level /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696 Form to evaluate when Emacs starts up.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
697 Useful to set before you dump a modified Emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699 Vtop_level = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
700 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
701 DEFVAR_LISP ("command-loop", &Vcommand_loop /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
702 Function or one argument to call to read and process keyboard commands.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
703 The passed argument specifies whether or not to handle errors.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
704 */ );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
705 Vcommand_loop = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
706 #endif /* LISP_COMMAND_LOOP */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
707 }