annotate src/cmdloop.c @ 5887:6eca500211f4

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