Backport from trunk: doc fix.
[bpt/emacs.git] / doc / lispref / os.texi
CommitLineData
b8d4c8d0
GM
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999, 2001,
114f9c96 4@c 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
b8d4c8d0 5@c See the file elisp.texi for copying conditions.
6336d8c3 6@setfilename ../../info/os
b8d4c8d0
GM
7@node System Interface, Antinews, Display, Top
8@chapter Operating System Interface
9
10 This chapter is about starting and getting out of Emacs, access to
11values in the operating system environment, and terminal input, output,
12and flow control.
13
02a89103
CY
14 @xref{Building Emacs}, for related information. @xref{Display}, for
15additional operating system status information pertaining to the
16terminal and the screen.
b8d4c8d0
GM
17
18@menu
19* Starting Up:: Customizing Emacs startup processing.
20* Getting Out:: How exiting works (permanent or temporary).
21* System Environment:: Distinguish the name and kind of system.
22* User Identification:: Finding the name and user id of the user.
23* Time of Day:: Getting the current time.
3be92e63
MR
24* Time Conversion:: Converting a time from numeric form to
25 calendrical data and vice versa.
b8d4c8d0
GM
26* Time Parsing:: Converting a time from numeric form to text
27 and vice versa.
28* Processor Run Time:: Getting the run time used by Emacs.
29* Time Calculations:: Adding, subtracting, comparing times, etc.
30* Timers:: Setting a timer to call a function at a certain time.
31* Idle Timers:: Setting a timer to call a function when Emacs has
32 been idle for a certain length of time.
33* Terminal Input:: Accessing and recording terminal input.
34* Terminal Output:: Controlling and recording terminal output.
35* Sound Output:: Playing sounds on the computer's speaker.
8e69dc70 36* X11 Keysyms:: Operating on key symbols for X Windows.
b8d4c8d0
GM
37* Batch Mode:: Running Emacs without terminal interaction.
38* Session Management:: Saving and restoring state with X Session Management.
39@end menu
40
41@node Starting Up
42@section Starting Up Emacs
43
44 This section describes what Emacs does when it is started, and how you
45can customize these actions.
46
47@menu
48* Startup Summary:: Sequence of actions Emacs performs at startup.
02a89103 49* Init File:: Details on reading the init file.
b8d4c8d0
GM
50* Terminal-Specific:: How the terminal-specific Lisp file is read.
51* Command-Line Arguments:: How command-line arguments are processed,
52 and how you can customize them.
53@end menu
54
55@node Startup Summary
56@subsection Summary: Sequence of Actions at Startup
57@cindex initialization of Emacs
58@cindex startup of Emacs
59@cindex @file{startup.el}
60
02a89103
CY
61 When Emacs is started up, it performs the following operations
62(which are defined in @file{startup.el}):
b8d4c8d0
GM
63
64@enumerate
65@item
66It adds subdirectories to @code{load-path}, by running the file named
02a89103
CY
67@file{subdirs.el} in each directory in the list. Normally, this file
68adds the directory's subdirectories to the list, and those are scanned
69in their turn. The files @file{subdirs.el} are normally generated
70automatically when Emacs is installed.
b8d4c8d0 71
f36acfd9 72@vindex before-init-time
b8d4c8d0 73@item
02a89103 74It sets the variable @code{before-init-time} to the value of
f36acfd9 75@code{current-time} (@pxref{Time of Day}). It also sets
02a89103
CY
76@code{after-init-time} to @code{nil}, which signals to Lisp programs
77that Emacs is being initialized.
b8d4c8d0 78
f36acfd9
EZ
79@vindex initial-window-system@r{, and startup}
80@vindex window-system-initialization-alist
b8d4c8d0 81@item
f36acfd9 82It loads the initialization library for the window system specified by
028e2c19
EZ
83the variable @code{initial-window-system} (@pxref{Window Systems,
84initial-window-system}). This library's name is
f36acfd9
EZ
85@file{term/@var{windowsystem}-win.el}, where @var{windowsystem} is the
86value of @code{initial-window-system}. From that library, it calls
87the appropriate initialization function. The initialization function
02a89103
CY
88for each supported window system is specified by
89@code{window-system-initialization-alist}.
f36acfd9
EZ
90
91@item
92It sets the language environment and the terminal coding system,
93if requested by environment variables such as @code{LANG}.
b8d4c8d0
GM
94
95@item
96It processes the initial options. (Some of them are handled
97even earlier than this.)
98
99@item
f36acfd9 100It runs the normal hook @code{before-init-hook}.
b8d4c8d0
GM
101
102@item
f36acfd9
EZ
103It initializes the window frame and faces, if appropriate, and turns
104on the menu bar and tool bar, if the initial frame needs them.
105
106@item
02a89103
CY
107It loads the library @file{site-start}, if it exists. This is not
108done if the options @samp{-Q} or @samp{--no-site-file} were specified.
b8d4c8d0
GM
109@cindex @file{site-start.el}
110
111@item
02a89103
CY
112It loads your init file (@pxref{Init File}). This is not done if the
113options @samp{-q}, @samp{-Q}, or @samp{--batch} were specified. If
114the @samp{-u} option was specified, Emacs looks for the init file in
115that user's home directory instead.
b8d4c8d0
GM
116
117@item
02a89103
CY
118It loads the library @file{default}, if it exists. This is not done
119if @code{inhibit-default-init} is non-@code{nil}, nor if the options
120@samp{-q}, @samp{-Q}, or @samp{--batch} were specified.
b8d4c8d0
GM
121@cindex @file{default.el}
122
f36acfd9
EZ
123@item
124It loads your abbrevs from the file specified by
02a89103
CY
125@code{abbrev-file-name}, if that file exists and can be read
126(@pxref{Abbrev Files, abbrev-file-name}). This is not done if the
127option @samp{--batch} was specified.
f36acfd9
EZ
128
129@vindex after-init-time
130@item
02a89103
CY
131It sets the variable @code{after-init-time} to the value of
132@code{current-time}. This variable was set to @code{nil} earlier;
133setting it to the current time signals that the initialization phase
134is over, and, together with @code{before-init-time}, provides the
f36acfd9
EZ
135measurement of how long it took.
136
b8d4c8d0
GM
137@item
138It runs the normal hook @code{after-init-hook}.
139
140@item
02a89103
CY
141If the buffer @samp{*scratch*} exists and is still in Fundamental mode
142(as it should be by default), it sets its major mode according to
143@code{initial-major-mode}.
b8d4c8d0
GM
144
145@item
02a89103
CY
146If started on a text-only terminal, it loads the terminal-specific
147Lisp library, which is specified by the variable
148@code{term-file-prefix} (@pxref{Terminal-Specific}). This is not done
149in @code{--batch} mode, nor if @code{term-file-prefix} is @code{nil}.
b8d4c8d0
GM
150
151@item
152It displays the initial echo area message, unless you have suppressed
153that with @code{inhibit-startup-echo-area-message}.
154
155@item
156It processes the action arguments from the command line.
157
02a89103
CY
158@item
159It now exits if the option @code{--batch} was specified.
160
161@item
162If @code{initial-buffer-choice} is a string, it visits the file with
163that name. Furthermore, if the @samp{*scratch*} buffer exists and is
164empty, it inserts @code{initial-scratch-message} into that buffer.
165
b8d4c8d0
GM
166@item
167It runs @code{emacs-startup-hook} and then @code{term-setup-hook}.
168
169@item
170It calls @code{frame-notice-user-settings}, which modifies the
171parameters of the selected frame according to whatever the init files
172specify.
173
174@item
175It runs @code{window-setup-hook}. @xref{Window Systems}.
176
177@item
02a89103
CY
178If the option @code{--daemon} was specified, it calls
179@code{server-start} and detaches from the controlling terminal.
180@xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
f36acfd9
EZ
181
182@item
02a89103
CY
183It displays the @dfn{startup screen}, which is a special buffer that
184contains information about copyleft and basic Emacs usage. This is
185not done if @code{initial-buffer-choice} or
186@code{inhibit-startup-screen} are @code{nil}, nor if the
187@samp{--no-splash} or @samp{-Q} command-line options were specified.
f36acfd9
EZ
188
189@item
190If started by the X session manager, it calls
191@code{emacs-session-restore} passing it as argument the ID of the
dca019f8 192previous session. @xref{Session Management}.
b8d4c8d0
GM
193@end enumerate
194
f36acfd9 195@defopt inhibit-startup-screen
02a89103
CY
196This variable, if non-@code{nil}, inhibits the startup screen. In
197that case, Emacs typically displays the @samp{*scratch*} buffer; but
198see @code{initial-buffer-choice}, below.
b8d4c8d0 199
02a89103
CY
200Do not set this variable in the init file of a new user, or in a way
201that affects more than one user, as that would prevent new users from
202receiving information about copyleft and basic Emacs usage.
f36acfd9 203
d3d97050
KR
204@vindex inhibit-startup-message
205@vindex inhibit-splash-screen
02a89103
CY
206@code{inhibit-startup-message} and @code{inhibit-splash-screen} are
207aliases for this variable.
208@end defopt
209
210@defopt initial-buffer-choice
211This variable, if non-@code{nil}, determines a file or buffer for
212Emacs to display after starting up, instead of the startup screen. If
213its value is @code{t}, Emacs displays the @samp{*scratch*} buffer. If
214its value is a string, that specifies the name of a file for Emacs to
215visit.
b8d4c8d0
GM
216@end defopt
217
218@defopt inhibit-startup-echo-area-message
219This variable controls the display of the startup echo area message.
220You can suppress the startup echo area message by adding text with this
221form to your init file:
222
223@example
224(setq inhibit-startup-echo-area-message
225 "@var{your-login-name}")
226@end example
227
228Emacs explicitly checks for an expression as shown above in your init
229file; your login name must appear in the expression as a Lisp string
230constant. Other methods of setting
231@code{inhibit-startup-echo-area-message} to the same value do not
02a89103
CY
232inhibit the startup message. This way, you can easily inhibit the
233message for yourself if you wish, but thoughtless copying of your init
234file will not inhibit the message for someone else.
235@end defopt
b8d4c8d0 236
02a89103
CY
237@defopt initial-scratch-message
238This variable, if non-@code{nil}, should be a string, which is
239inserted into the @samp{*scratch*} buffer when Emacs starts up. If it
240is @code{nil}, the @samp{*scratch*} buffer is empty.
b8d4c8d0
GM
241@end defopt
242
243@node Init File
244@subsection The Init File, @file{.emacs}
245@cindex init file
246@cindex @file{.emacs}
247
248 When you start Emacs, it normally attempts to load your @dfn{init
02a89103
CY
249file}. This is either a file named @file{.emacs} or @file{.emacs.el}
250in your home directory, or a file named @file{init.el} in a
251subdirectory named @file{.emacs.d} in your home directory. Whichever
252place you use, you can also compile the file (@pxref{Byte
253Compilation}); then the actual file loaded will be @file{.emacs.elc}
254or @file{init.elc}.
b8d4c8d0
GM
255
256 The command-line switches @samp{-q}, @samp{-Q}, and @samp{-u}
257control whether and where to find the init file; @samp{-q} (and the
258stronger @samp{-Q}) says not to load an init file, while @samp{-u
259@var{user}} says to load @var{user}'s init file instead of yours.
260@xref{Entering Emacs,,, emacs, The GNU Emacs Manual}. If neither
261option is specified, Emacs uses the @code{LOGNAME} environment
262variable, or the @code{USER} (most systems) or @code{USERNAME} (MS
263systems) variable, to find your home directory and thus your init
264file; this way, even if you have su'd, Emacs still loads your own init
265file. If those environment variables are absent, though, Emacs uses
266your user-id to find your home directory.
267
268@cindex default init file
269 A site may have a @dfn{default init file}, which is the library
270named @file{default.el}. Emacs finds the @file{default.el} file
271through the standard search path for libraries (@pxref{How Programs Do
272Loading}). The Emacs distribution does not come with this file; sites
273may provide one for local customizations. If the default init file
274exists, it is loaded whenever you start Emacs, except in batch mode or
275if @samp{-q} (or @samp{-Q}) is specified. But your own personal init
276file, if any, is loaded first; if it sets @code{inhibit-default-init}
277to a non-@code{nil} value, then Emacs does not subsequently load the
278@file{default.el} file.
279
280 Another file for site-customization is @file{site-start.el}. Emacs
281loads this @emph{before} the user's init file. You can inhibit the
282loading of this file with the option @samp{--no-site-file}.
283
01f17ae2 284@defopt site-run-file
b8d4c8d0
GM
285This variable specifies the site-customization file to load before the
286user's init file. Its normal value is @code{"site-start"}. The only
287way you can change it with real effect is to do so before dumping
288Emacs.
01f17ae2 289@end defopt
b8d4c8d0
GM
290
291 @xref{Init Examples,, Init File Examples, emacs, The GNU Emacs Manual}, for
292examples of how to make various commonly desired customizations in your
293@file{.emacs} file.
294
295@defopt inhibit-default-init
296This variable prevents Emacs from loading the default initialization
297library file for your session of Emacs. If its value is non-@code{nil},
298then the default library is not loaded. The default value is
299@code{nil}.
300@end defopt
301
302@defvar before-init-hook
303This normal hook is run, once, just before loading all the init files
304(the user's init file, @file{default.el}, and/or @file{site-start.el}).
305(The only way to change it with real effect is before dumping Emacs.)
306@end defvar
307
308@defvar after-init-hook
309This normal hook is run, once, just after loading all the init files
310(the user's init file, @file{default.el}, and/or @file{site-start.el}),
311before loading the terminal-specific library and processing the
312command-line action arguments.
313@end defvar
314
315@defvar emacs-startup-hook
316This normal hook is run, once, just after handling the command line
317arguments, just before @code{term-setup-hook}.
318@end defvar
319
320@defvar user-init-file
321This variable holds the absolute file name of the user's init file. If the
322actual init file loaded is a compiled file, such as @file{.emacs.elc},
323the value refers to the corresponding source file.
324@end defvar
325
326@defvar user-emacs-directory
327This variable holds the name of the @file{.emacs.d} directory. It is
328ordinarily @file{~/.emacs.d}, but differs on some platforms.
329@end defvar
330
331@node Terminal-Specific
332@subsection Terminal-Specific Initialization
333@cindex terminal-specific initialization
334
335 Each terminal type can have its own Lisp library that Emacs loads when
336run on that type of terminal. The library's name is constructed by
337concatenating the value of the variable @code{term-file-prefix} and the
338terminal type (specified by the environment variable @code{TERM}).
339Normally, @code{term-file-prefix} has the value
340@code{"term/"}; changing this is not recommended. Emacs finds the file
341in the normal manner, by searching the @code{load-path} directories, and
342trying the @samp{.elc} and @samp{.el} suffixes.
343
344@cindex Termcap
345 The usual function of a terminal-specific library is to enable
346special keys to send sequences that Emacs can recognize. It may also
4f4a84ec 347need to set or add to @code{input-decode-map} if the Termcap or
b8d4c8d0
GM
348Terminfo entry does not specify all the terminal's function keys.
349@xref{Terminal Input}.
350
351 When the name of the terminal type contains a hyphen, and no library
352is found whose name is identical to the terminal's name, Emacs strips
353from the terminal's name the last hyphen and everything that follows
354it, and tries again. This process is repeated until Emacs finds a
355matching library or until there are no more hyphens in the name (the
356latter means the terminal doesn't have any library specific to it).
357Thus, for example, if there are no @samp{aaa-48} and @samp{aaa-30}
358libraries, Emacs will try the same library @file{term/aaa.el} for
359terminal types @samp{aaa-48} and @samp{aaa-30-rv}. If necessary, the
360library can evaluate @code{(getenv "TERM")} to find the full name of
361the terminal type.@refill
362
363 Your init file can prevent the loading of the
364terminal-specific library by setting the variable
365@code{term-file-prefix} to @code{nil}. This feature is useful when
366experimenting with your own peculiar customizations.
367
368 You can also arrange to override some of the actions of the
369terminal-specific library by setting the variable
370@code{term-setup-hook}. This is a normal hook which Emacs runs using
371@code{run-hooks} at the end of Emacs initialization, after loading both
372your init file and any terminal-specific libraries. You can
373use this variable to define initializations for terminals that do not
374have their own libraries. @xref{Hooks}.
375
376@defvar term-file-prefix
377@cindex @code{TERM} environment variable
378If the @code{term-file-prefix} variable is non-@code{nil}, Emacs loads
379a terminal-specific initialization file as follows:
380
381@example
382(load (concat term-file-prefix (getenv "TERM")))
383@end example
384
385@noindent
386You may set the @code{term-file-prefix} variable to @code{nil} in your
387init file if you do not wish to load the
388terminal-initialization file. To do this, put the following in
389your init file: @code{(setq term-file-prefix nil)}.
390
391On MS-DOS, if the environment variable @code{TERM} is not set, Emacs
392uses @samp{internal} as the terminal type.
393@end defvar
394
395@defvar term-setup-hook
396This variable is a normal hook that Emacs runs after loading your
397init file, the default initialization file (if any) and the
398terminal-specific Lisp file.
399
400You can use @code{term-setup-hook} to override the definitions made by a
401terminal-specific file.
402@end defvar
403
404 See @code{window-setup-hook} in @ref{Window Systems}, for a related
405feature.
406
407@node Command-Line Arguments
408@subsection Command-Line Arguments
409@cindex command-line arguments
410
411 You can use command-line arguments to request various actions when you
412start Emacs. Since you do not need to start Emacs more than once per
413day, and will often leave your Emacs session running longer than that,
414command-line arguments are hardly ever used. As a practical matter, it
415is best to avoid making the habit of using them, since this habit would
416encourage you to kill and restart Emacs unnecessarily often. These
417options exist for two reasons: to be compatible with other editors (for
418invocation by other programs) and to enable shell scripts to run
419specific Lisp programs.
420
421 This section describes how Emacs processes command-line arguments,
422and how you can customize them.
423
424@ignore
425 (Note that some other editors require you to start afresh each time
426you want to edit a file. With this kind of editor, you will probably
427specify the file as a command-line argument. The recommended way to
428use GNU Emacs is to start it only once, just after you log in, and do
429all your editing in the same Emacs process. Each time you want to edit
430a different file, you visit it with the existing Emacs, which eventually
431comes to have many files in it ready for editing. Usually you do not
432kill the Emacs until you are about to log out.)
433@end ignore
434
435@defun command-line
436This function parses the command line that Emacs was called with,
437processes it, loads the user's init file and displays the
438startup messages.
439@end defun
440
441@defvar command-line-processed
442The value of this variable is @code{t} once the command line has been
443processed.
444
445If you redump Emacs by calling @code{dump-emacs}, you may wish to set
446this variable to @code{nil} first in order to cause the new dumped Emacs
447to process its new command-line arguments.
448@end defvar
449
450@defvar command-switch-alist
451@cindex switches on command line
452@cindex options on command line
453@cindex command-line options
454The value of this variable is an alist of user-defined command-line
455options and associated handler functions. This variable exists so you
456can add elements to it.
457
458A @dfn{command-line option} is an argument on the command line, which
459has the form:
460
461@example
462-@var{option}
463@end example
464
465The elements of the @code{command-switch-alist} look like this:
466
467@example
468(@var{option} . @var{handler-function})
469@end example
470
471The @sc{car}, @var{option}, is a string, the name of a command-line
472option (not including the initial hyphen). The @var{handler-function}
473is called to handle @var{option}, and receives the option name as its
474sole argument.
475
476In some cases, the option is followed in the command line by an
477argument. In these cases, the @var{handler-function} can find all the
478remaining command-line arguments in the variable
479@code{command-line-args-left}. (The entire list of command-line
480arguments is in @code{command-line-args}.)
481
482The command-line arguments are parsed by the @code{command-line-1}
483function in the @file{startup.el} file. See also @ref{Emacs
484Invocation, , Command Line Arguments for Emacs Invocation, emacs, The
485GNU Emacs Manual}.
486@end defvar
487
488@defvar command-line-args
489The value of this variable is the list of command-line arguments passed
490to Emacs.
491@end defvar
492
dca019f8 493@defvar command-line-args-left
d3d97050 494@vindex argv
dca019f8
CY
495The value of this variable is the list of command-line arguments that
496have not yet been processed. @code{argv} is an alias for this.
497@end defvar
498
b8d4c8d0
GM
499@defvar command-line-functions
500This variable's value is a list of functions for handling an
501unrecognized command-line argument. Each time the next argument to be
502processed has no special meaning, the functions in this list are called,
503in order of appearance, until one of them returns a non-@code{nil}
504value.
505
506These functions are called with no arguments. They can access the
507command-line argument under consideration through the variable
508@code{argi}, which is bound temporarily at this point. The remaining
509arguments (not including the current one) are in the variable
510@code{command-line-args-left}.
511
512When a function recognizes and processes the argument in @code{argi}, it
513should return a non-@code{nil} value to say it has dealt with that
514argument. If it has also dealt with some of the following arguments, it
515can indicate that by deleting them from @code{command-line-args-left}.
516
517If all of these functions return @code{nil}, then the argument is used
518as a file name to visit.
519@end defvar
520
521@node Getting Out
522@section Getting Out of Emacs
523@cindex exiting Emacs
524
525 There are two ways to get out of Emacs: you can kill the Emacs job,
526which exits permanently, or you can suspend it, which permits you to
527reenter the Emacs process later. As a practical matter, you seldom kill
528Emacs---only when you are about to log out. Suspending is much more
529common.
530
531@menu
532* Killing Emacs:: Exiting Emacs irreversibly.
533* Suspending Emacs:: Exiting Emacs reversibly.
534@end menu
535
536@node Killing Emacs
537@comment node-name, next, previous, up
538@subsection Killing Emacs
539@cindex killing Emacs
540
541 Killing Emacs means ending the execution of the Emacs process. The
542parent process normally resumes control. The low-level primitive for
543killing Emacs is @code{kill-emacs}.
544
106e6894
CY
545@deffn Command kill-emacs &optional exit-data
546This command exits the Emacs process and kills it.
b8d4c8d0
GM
547
548If @var{exit-data} is an integer, then it is used as the exit status
549of the Emacs process. (This is useful primarily in batch operation; see
550@ref{Batch Mode}.)
551
552If @var{exit-data} is a string, its contents are stuffed into the
553terminal input buffer so that the shell (or whatever program next reads
554input) can read them.
106e6894 555@end deffn
b8d4c8d0
GM
556
557 All the information in the Emacs process, aside from files that have
558been saved, is lost when the Emacs process is killed. Because killing
559Emacs inadvertently can lose a lot of work, Emacs queries for
560confirmation before actually terminating if you have buffers that need
561saving or subprocesses that are running. This is done in the function
562@code{save-buffers-kill-emacs}, the higher level function from which
563@code{kill-emacs} is usually called.
564
565@defvar kill-emacs-query-functions
566After asking the standard questions, @code{save-buffers-kill-emacs}
567calls the functions in the list @code{kill-emacs-query-functions}, in
568order of appearance, with no arguments. These functions can ask for
569additional confirmation from the user. If any of them returns
570@code{nil}, @code{save-buffers-kill-emacs} does not kill Emacs, and
571does not run the remaining functions in this hook. Calling
572@code{kill-emacs} directly does not run this hook.
573@end defvar
574
575@defvar kill-emacs-hook
576This variable is a normal hook; once @code{save-buffers-kill-emacs} is
577finished with all file saving and confirmation, it calls
578@code{kill-emacs} which runs the functions in this hook.
579@code{kill-emacs} does not run this hook in batch mode.
580
581@code{kill-emacs} may be invoked directly (that is not via
582@code{save-buffers-kill-emacs}) if the terminal is disconnected, or in
583similar situations where interaction with the user is not possible.
584Thus, if your hook needs to interact with the user, put it on
585@code{kill-emacs-query-functions}; if it needs to run regardless of
586how Emacs is killed, put it on @code{kill-emacs-hook}.
587@end defvar
588
589@node Suspending Emacs
590@subsection Suspending Emacs
591@cindex suspending Emacs
592
dca019f8
CY
593 On text-only terminals, it is possible to @dfn{suspend Emacs}, which
594means stopping Emacs temporarily and returning control to its superior
595process, which is usually the shell. This allows you to resume
596editing later in the same Emacs process, with the same buffers, the
597same kill ring, the same undo history, and so on. To resume Emacs,
598use the appropriate command in the parent shell---most likely
599@code{fg}.
b8d4c8d0 600
62a5303f
EZ
601@cindex controlling terminal
602 Suspending works only on a terminal device from which the Emacs
603session was started. We call that device the @dfn{controlling
dca019f8
CY
604terminal} of the session. Suspending is not allowed if the
605controlling terminal is a graphical terminal.
62a5303f 606
b8d4c8d0
GM
607 Some operating systems do not support suspension of jobs; on these
608systems, ``suspension'' actually creates a new shell temporarily as a
609subprocess of Emacs. Then you would exit the shell to return to Emacs.
610
106e6894 611@deffn Command suspend-emacs &optional string
b8d4c8d0
GM
612This function stops Emacs and returns control to the superior process.
613If and when the superior process resumes Emacs, @code{suspend-emacs}
614returns @code{nil} to its caller in Lisp.
615
62a5303f
EZ
616This function works only on the controlling terminal of the Emacs
617session; to relinquish control of other tty devices, use
f71de46c 618@code{suspend-tty} (see below). If the Emacs session uses more than
dca019f8
CY
619one terminal, you must delete the frames on all the other terminals
620before suspending Emacs, or this function signals an error.
621@xref{Multiple Terminals}.
62a5303f 622
dca019f8
CY
623If @var{string} is non-@code{nil}, its characters are sent to Emacs's
624superior shell, to be read as terminal input. The characters in
b8d4c8d0
GM
625@var{string} are not echoed by the superior shell; only the results
626appear.
627
628Before suspending, @code{suspend-emacs} runs the normal hook
dca019f8
CY
629@code{suspend-hook}. After the user resumes Emacs,
630@code{suspend-emacs} runs the normal hook @code{suspend-resume-hook}.
631@xref{Hooks}.
b8d4c8d0
GM
632
633The next redisplay after resumption will redraw the entire screen,
dca019f8
CY
634unless the variable @code{no-redraw-on-reenter} is non-@code{nil}.
635@xref{Refresh Screen}.
b8d4c8d0
GM
636
637In the following example, note that @samp{pwd} is not echoed after
638Emacs is suspended. But it is read and executed by the shell.
639
640@smallexample
641@group
642(suspend-emacs)
643 @result{} nil
644@end group
645
646@group
647(add-hook 'suspend-hook
648 (function (lambda ()
649 (or (y-or-n-p
650 "Really suspend? ")
651 (error "Suspend canceled")))))
652 @result{} (lambda nil
653 (or (y-or-n-p "Really suspend? ")
654 (error "Suspend canceled")))
655@end group
656@group
657(add-hook 'suspend-resume-hook
658 (function (lambda () (message "Resumed!"))))
659 @result{} (lambda nil (message "Resumed!"))
660@end group
661@group
662(suspend-emacs "pwd")
663 @result{} nil
664@end group
665@group
666---------- Buffer: Minibuffer ----------
667Really suspend? @kbd{y}
668---------- Buffer: Minibuffer ----------
669@end group
670
671@group
672---------- Parent Shell ----------
673lewis@@slug[23] % /user/lewis/manual
674lewis@@slug[24] % fg
675@end group
676
677@group
678---------- Echo Area ----------
679Resumed!
680@end group
681@end smallexample
106e6894 682@end deffn
b8d4c8d0
GM
683
684@defvar suspend-hook
685This variable is a normal hook that Emacs runs before suspending.
686@end defvar
687
688@defvar suspend-resume-hook
689This variable is a normal hook that Emacs runs on resuming
690after a suspension.
691@end defvar
692
62a5303f
EZ
693@defun suspend-tty &optional tty
694If @var{tty} specifies a terminal device used by Emacs, this function
695relinquishes the device and restores it to its prior state. Frames
696that used the device continue to exist, but are not updated and Emacs
dca019f8
CY
697doesn't read input from them. @var{tty} can be a terminal object, a
698frame (meaning the terminal for that frame), or @code{nil} (meaning
699the terminal for the selected frame). @xref{Multiple Terminals}.
700
701If @var{tty} is already suspended, this function does nothing.
702
d3d97050 703@vindex suspend-tty-functions
dca019f8
CY
704This function runs the hook @code{suspend-tty-functions}, passing the
705terminal object as an argument to each function.
62a5303f
EZ
706@end defun
707
708@defun resume-tty &optional tty
dca019f8
CY
709This function resumes the previously suspended terminal device
710@var{tty}; @var{tty} can be a terminal object, a frame (meaning the
711terminal for that frame), or @code{nil} (meaning the terminal for the
712selected frame).
62a5303f 713
d3d97050 714@vindex resume-tty-functions
62a5303f
EZ
715This function reopens the terminal device, re-initializes it, and
716redraws its with that terminal's selected frame. It then runs the
dca019f8
CY
717hook @code{resume-tty-functions}, passing the terminal object as an
718argument to each function.
62a5303f
EZ
719
720If the same device is already used by another Emacs terminal, this
721function signals an error.
722@end defun
723
724@defun controlling-tty-p &optional terminal
725This function returns non-@code{nil} if @var{terminal} is the
dca019f8
CY
726controlling terminal of the Emacs session; @code{terminal} can be a
727terminal object, a frame (meaning the terminal for that frame), or
728@code{nil} (meaning the terminal for the selected frame).
62a5303f
EZ
729@end defun
730
731@deffn Command suspend-frame
732This command @dfn{suspends} a frame. For GUI frames, it calls
733@code{iconify-frame} (@pxref{Visibility of Frames}); for text-only
734frames, it calls either @code{suspend-emacs} or @code{suspend-tty},
735depending on whether the frame is displayed on the controlling
736terminal device or not.
737@end deffn
738
b8d4c8d0
GM
739@node System Environment
740@section Operating System Environment
741@cindex operating system environment
742
743 Emacs provides access to variables in the operating system environment
744through various functions. These variables include the name of the
745system, the user's @acronym{UID}, and so on.
746
747@defvar system-configuration
748This variable holds the standard GNU configuration name for the
749hardware/software configuration of your system, as a string. The
750convenient way to test parts of this string is with
751@code{string-match}.
752@end defvar
753
754@cindex system type and name
755@defvar system-type
756The value of this variable is a symbol indicating the type of operating
757system Emacs is operating on. Here is a table of the possible values:
758
58e3d8e8 759@table @code
1213465a
EZ
760@item aix
761IBM's AIX.
b8d4c8d0
GM
762
763@item berkeley-unix
1213465a 764Berkeley BSD and its variants.
b8d4c8d0
GM
765
766@item cygwin
1213465a
EZ
767Cygwin, a Posix layer on top of MS-Windows.
768
769@item darwin
770Darwin (Mac OS X).
b8d4c8d0 771
b8d4c8d0 772@item gnu
1213465a 773The GNU system (using the GNU kernel, which consists of the HURD and Mach).
b8d4c8d0
GM
774
775@item gnu/linux
776A GNU/Linux system---that is, a variant GNU system, using the Linux
777kernel. (These systems are the ones people often call ``Linux,'' but
778actually Linux is just the kernel, not the whole system.)
779
1213465a
EZ
780@item gnu/kfreebsd
781A GNU (glibc-based) system with a FreeBSD kernel.
782
b8d4c8d0
GM
783@item hpux
784Hewlett-Packard HPUX operating system.
785
786@item irix
787Silicon Graphics Irix system.
788
1213465a
EZ
789@item lynxos 3.0.1
790LynxOS-3.0.1.
791
b8d4c8d0
GM
792@item ms-dos
793Microsoft MS-DOS ``operating system.'' Emacs compiled with DJGPP for
794MS-DOS binds @code{system-type} to @code{ms-dos} even when you run it on
795MS-Windows.
796
b8d4c8d0 797@item usg-unix-v
1213465a 798AT&T Unix System V.
b8d4c8d0 799
b8d4c8d0 800@item windows-nt
200811d6
EZ
801Microsoft Windows NT and later. The same executable supports Windows
8029X, but the value of @code{system-type} is @code{windows-nt} in either
803case.
b8d4c8d0 804
b8d4c8d0
GM
805@end table
806
807We do not wish to add new symbols to make finer distinctions unless it
808is absolutely necessary! In fact, we hope to eliminate some of these
809alternatives in the future. We recommend using
810@code{system-configuration} to distinguish between different operating
811systems.
812@end defvar
813
814@defun system-name
815This function returns the name of the machine you are running on.
816@example
817(system-name)
818 @result{} "www.gnu.org"
819@end example
820@end defun
821
822 The symbol @code{system-name} is a variable as well as a function. In
823fact, the function returns whatever value the variable
824@code{system-name} currently holds. Thus, you can set the variable
825@code{system-name} in case Emacs is confused about the name of your
826system. The variable is also useful for constructing frame titles
827(@pxref{Frame Titles}).
828
01f17ae2 829@defopt mail-host-address
b8d4c8d0
GM
830If this variable is non-@code{nil}, it is used instead of
831@code{system-name} for purposes of generating email addresses. For
832example, it is used when constructing the default value of
833@code{user-mail-address}. @xref{User Identification}. (Since this is
834done when Emacs starts up, the value actually used is the one saved when
835Emacs was dumped. @xref{Building Emacs}.)
01f17ae2 836@end defopt
b8d4c8d0 837
106e6894 838@deffn Command getenv var &optional frame
b8d4c8d0
GM
839@cindex environment variable access
840This function returns the value of the environment variable @var{var},
841as a string. @var{var} should be a string. If @var{var} is undefined
842in the environment, @code{getenv} returns @code{nil}. If returns
843@samp{""} if @var{var} is set but null. Within Emacs, the environment
844variable values are kept in the Lisp variable @code{process-environment}.
845
846@example
847@group
848(getenv "USER")
849 @result{} "lewis"
850@end group
851
852@group
853lewis@@slug[10] % printenv
854PATH=.:/user/lewis/bin:/usr/bin:/usr/local/bin
855USER=lewis
856@end group
857@group
858TERM=ibmapa16
859SHELL=/bin/csh
860HOME=/user/lewis
861@end group
862@end example
863@end deffn
864
865@c Emacs 19 feature
866@deffn Command setenv variable &optional value
867This command sets the value of the environment variable named
868@var{variable} to @var{value}. @var{variable} should be a string.
869Internally, Emacs Lisp can handle any string. However, normally
870@var{variable} should be a valid shell identifier, that is, a sequence
871of letters, digits and underscores, starting with a letter or
872underscore. Otherwise, errors may occur if subprocesses of Emacs try
873to access the value of @var{variable}. If @var{value} is omitted or
874@code{nil}, @code{setenv} removes @var{variable} from the environment.
875Otherwise, @var{value} should be a string.
876
877@code{setenv} works by modifying @code{process-environment}; binding
878that variable with @code{let} is also reasonable practice.
879
880@code{setenv} returns the new value of @var{variable}, or @code{nil}
881if it removed @var{variable} from the environment.
882@end deffn
883
884@defvar process-environment
885This variable is a list of strings, each describing one environment
886variable. The functions @code{getenv} and @code{setenv} work by means
887of this variable.
888
889@smallexample
890@group
891process-environment
892@result{} ("l=/usr/stanford/lib/gnuemacs/lisp"
893 "PATH=.:/user/lewis/bin:/usr/class:/nfsusr/local/bin"
894 "USER=lewis"
895@end group
896@group
897 "TERM=ibmapa16"
898 "SHELL=/bin/csh"
899 "HOME=/user/lewis")
900@end group
901@end smallexample
902
903If @code{process-environment} contains ``duplicate'' elements that
904specify the same environment variable, the first of these elements
905specifies the variable, and the other ``duplicates'' are ignored.
906@end defvar
907
200811d6
EZ
908@defvar initial-environment
909This variable holds the list of environment variables Emacs inherited
910from its parent process. It is computed during startup, see
911@ref{Startup Summary}.
912@end defvar
913
b8d4c8d0
GM
914@defvar path-separator
915This variable holds a string which says which character separates
916directories in a search path (as found in an environment variable). Its
917value is @code{":"} for Unix and GNU systems, and @code{";"} for MS-DOS
918and MS-Windows.
919@end defvar
920
921@defun parse-colon-path path
922This function takes a search path string such as would be the value of
923the @code{PATH} environment variable, and splits it at the separators,
924returning a list of directory names. @code{nil} in this list stands for
925``use the current directory.'' Although the function's name says
926``colon,'' it actually uses the value of @code{path-separator}.
927
928@example
929(parse-colon-path ":/foo:/bar")
930 @result{} (nil "/foo/" "/bar/")
931@end example
932@end defun
933
934@defvar invocation-name
935This variable holds the program name under which Emacs was invoked. The
936value is a string, and does not include a directory name.
937@end defvar
938
939@defvar invocation-directory
940This variable holds the directory from which the Emacs executable was
941invoked, or perhaps @code{nil} if that directory cannot be determined.
942@end defvar
943
944@defvar installation-directory
945If non-@code{nil}, this is a directory within which to look for the
946@file{lib-src} and @file{etc} subdirectories. This is non-@code{nil}
947when Emacs can't find those directories in their standard installed
948locations, but can find them in a directory related somehow to the one
949containing the Emacs executable.
950@end defvar
951
952@defun load-average &optional use-float
953This function returns the current 1-minute, 5-minute, and 15-minute load
954averages, in a list.
955
956By default, the values are integers that are 100 times the system load
957averages, which indicate the average number of processes trying to run.
958If @var{use-float} is non-@code{nil}, then they are returned
959as floating point numbers and without multiplying by 100.
960
961If it is impossible to obtain the load average, this function signals
962an error. On some platforms, access to load averages requires
963installing Emacs as setuid or setgid so that it can read kernel
964information, and that usually isn't advisable.
965
966If the 1-minute load average is available, but the 5- or 15-minute
967averages are not, this function returns a shortened list containing
968the available averages.
969
970@example
971@group
972(load-average)
973 @result{} (169 48 36)
974@end group
975@group
976(load-average t)
977 @result{} (1.69 0.48 0.36)
978@end group
979
980@group
981lewis@@rocky[5] % uptime
982 11:55am up 1 day, 19:37, 3 users,
983 load average: 1.69, 0.48, 0.36
984@end group
985@end example
986@end defun
987
988@defun emacs-pid
989This function returns the process @acronym{ID} of the Emacs process,
990as an integer.
991@end defun
992
993@defvar tty-erase-char
994This variable holds the erase character that was selected
995in the system's terminal driver, before Emacs was started.
996The value is @code{nil} if Emacs is running under a window system.
997@end defvar
998
b8d4c8d0
GM
999@node User Identification
1000@section User Identification
1001@cindex user identification
1002
1003@defvar init-file-user
1004This variable says which user's init files should be used by
1005Emacs---or @code{nil} if none. @code{""} stands for the user who
1006originally logged in. The value reflects command-line options such as
1007@samp{-q} or @samp{-u @var{user}}.
1008
1009Lisp packages that load files of customizations, or any other sort of
1010user profile, should obey this variable in deciding where to find it.
1011They should load the profile of the user name found in this variable.
1012If @code{init-file-user} is @code{nil}, meaning that the @samp{-q}
1013option was used, then Lisp packages should not load any customization
1014files or user profile.
1015@end defvar
1016
01f17ae2 1017@defopt user-mail-address
b8d4c8d0
GM
1018This holds the nominal email address of the user who is using Emacs.
1019Emacs normally sets this variable to a default value after reading your
1020init files, but not if you have already set it. So you can set the
1021variable to some other value in your init file if you do not
1022want to use the default value.
01f17ae2 1023@end defopt
b8d4c8d0
GM
1024
1025@defun user-login-name &optional uid
1026If you don't specify @var{uid}, this function returns the name under
1027which the user is logged in. If the environment variable @code{LOGNAME}
1028is set, that value is used. Otherwise, if the environment variable
1029@code{USER} is set, that value is used. Otherwise, the value is based
1030on the effective @acronym{UID}, not the real @acronym{UID}.
1031
1032If you specify @var{uid}, the value is the user name that corresponds
1033to @var{uid} (which should be an integer), or @code{nil} if there is
1034no such user.
1035
1036@example
1037@group
1038(user-login-name)
1039 @result{} "lewis"
1040@end group
1041@end example
1042@end defun
1043
1044@defun user-real-login-name
1045This function returns the user name corresponding to Emacs's real
1046@acronym{UID}. This ignores the effective @acronym{UID} and ignores the
1047environment variables @code{LOGNAME} and @code{USER}.
1048@end defun
1049
1050@defun user-full-name &optional uid
1051This function returns the full name of the logged-in user---or the value
1052of the environment variable @code{NAME}, if that is set.
1053
1054@c "Bil" is the correct spelling.
1055@example
1056@group
1057(user-full-name)
1058 @result{} "Bil Lewis"
1059@end group
1060@end example
1061
1062If the Emacs job's user-id does not correspond to any known user (and
1063provided @code{NAME} is not set), the value is @code{"unknown"}.
1064
1065If @var{uid} is non-@code{nil}, then it should be a number (a user-id)
1066or a string (a login name). Then @code{user-full-name} returns the full
1067name corresponding to that user-id or login name. If you specify a
1068user-id or login name that isn't defined, it returns @code{nil}.
1069@end defun
1070
1071@vindex user-full-name
1072@vindex user-real-login-name
1073@vindex user-login-name
1074 The symbols @code{user-login-name}, @code{user-real-login-name} and
1075@code{user-full-name} are variables as well as functions. The functions
1076return the same values that the variables hold. These variables allow
1077you to ``fake out'' Emacs by telling the functions what to return. The
1078variables are also useful for constructing frame titles (@pxref{Frame
1079Titles}).
1080
1081@defun user-real-uid
1082This function returns the real @acronym{UID} of the user.
1083The value may be a floating point number.
1084
1085@example
1086@group
1087(user-real-uid)
1088 @result{} 19
1089@end group
1090@end example
1091@end defun
1092
1093@defun user-uid
1094This function returns the effective @acronym{UID} of the user.
1095The value may be a floating point number.
1096@end defun
1097
1098@node Time of Day
1099@section Time of Day
1100
1101 This section explains how to determine the current time and the time
1102zone.
1103
1104@defun current-time-string &optional time-value
1105This function returns the current time and date as a human-readable
1106string. The format of the string is unvarying; the number of characters
1107used for each part is always the same, so you can reliably use
1108@code{substring} to extract pieces of it. It is wise to count the
1109characters from the beginning of the string rather than from the end, as
1110additional information may some day be added at the end.
1111
b8d4c8d0 1112The argument @var{time-value}, if given, specifies a time to format
edd6a733
CY
1113instead of the current time. This argument should have the same form
1114as the times obtained from @code{current-time} (see below) and from
1115@code{file-attributes} (@pxref{Definition of file-attributes}). It
1116should be a list whose first two elements are integers; a third
1117(microsecond) element, if present, is ignored. @var{time-value} can
1118also be a cons of two integers, but this usage is obsolete.
b8d4c8d0
GM
1119
1120@example
1121@group
1122(current-time-string)
1123 @result{} "Wed Oct 14 22:21:05 1987"
1124@end group
1125@end example
1126@end defun
1127
b8d4c8d0
GM
1128@defun current-time
1129This function returns the system's time value as a list of three
1130integers: @code{(@var{high} @var{low} @var{microsec})}. The integers
1131@var{high} and @var{low} combine to give the number of seconds since
11320:00 January 1, 1970 UTC (Coordinated Universal Time), which is
1133@ifnottex
1134@var{high} * 2**16 + @var{low}.
1135@end ifnottex
1136@tex
1137$high*2^{16}+low$.
1138@end tex
1139
1140The third element, @var{microsec}, gives the microseconds since the
1141start of the current second (or 0 for systems that return time with
1142the resolution of only one second).
1143
1144The first two elements can be compared with file time values such as you
1145get with the function @code{file-attributes}.
1146@xref{Definition of file-attributes}.
1147@end defun
1148
b8d4c8d0
GM
1149@defun current-time-zone &optional time-value
1150This function returns a list describing the time zone that the user is
1151in.
1152
1153The value has the form @code{(@var{offset} @var{name})}. Here
1154@var{offset} is an integer giving the number of seconds ahead of UTC
1155(east of Greenwich). A negative value means west of Greenwich. The
1156second element, @var{name}, is a string giving the name of the time
1157zone. Both elements change when daylight saving time begins or ends;
1158if the user has specified a time zone that does not use a seasonal time
1159adjustment, then the value is constant through time.
1160
1161If the operating system doesn't supply all the information necessary to
1162compute the value, the unknown elements of the list are @code{nil}.
1163
1164The argument @var{time-value}, if given, specifies a time to analyze
1165instead of the current time. The argument should have the same form
1166as for @code{current-time-string} (see above). Thus, you can use
1167times obtained from @code{current-time} (see above) and from
1168@code{file-attributes}. @xref{Definition of file-attributes}.
1169@end defun
1170
1171@defun set-time-zone-rule tz
1172This function specifies the local time zone according to @var{tz}. If
1173@var{tz} is @code{nil}, that means to use an implementation-defined
1174default time zone. If @var{tz} is @code{t}, that means to use
1175Universal Time. Otherwise, @var{tz} should be a string specifying a
1176time zone rule.
1177@end defun
1178
1179@defun float-time &optional time-value
1180This function returns the current time as a floating-point number of
1181seconds since the epoch. The argument @var{time-value}, if given,
1182specifies a time to convert instead of the current time. The argument
1183should have the same form as for @code{current-time-string} (see
1184above). Thus, it accepts the output of @code{current-time} and
edd6a733 1185@code{file-attributes} (@pxref{Definition of file-attributes}).
b8d4c8d0
GM
1186
1187@emph{Warning}: Since the result is floating point, it may not be
1188exact. Do not use this function if precise time stamps are required.
1189@end defun
1190
1191@node Time Conversion
1192@section Time Conversion
1193
1194 These functions convert time values (lists of two or three integers)
1195to calendrical information and vice versa. You can get time values
1196from the functions @code{current-time} (@pxref{Time of Day}) and
1197@code{file-attributes} (@pxref{Definition of file-attributes}).
1198
1199 Many operating systems are limited to time values that contain 32 bits
1200of information; these systems typically handle only the times from
12011901-12-13 20:45:52 UTC through 2038-01-19 03:14:07 UTC. However, some
1202operating systems have larger time values, and can represent times far
1203in the past or future.
1204
1205 Time conversion functions always use the Gregorian calendar, even
1206for dates before the Gregorian calendar was introduced. Year numbers
1207count the number of years since the year 1 B.C., and do not skip zero
1208as traditional Gregorian years do; for example, the year number
1209@minus{}37 represents the Gregorian year 38 B.C@.
1210
1211@defun decode-time &optional time
1212This function converts a time value into calendrical information. If
1213you don't specify @var{time}, it decodes the current time. The return
1214value is a list of nine elements, as follows:
1215
1216@example
1217(@var{seconds} @var{minutes} @var{hour} @var{day} @var{month} @var{year} @var{dow} @var{dst} @var{zone})
1218@end example
1219
1220Here is what the elements mean:
1221
1222@table @var
1223@item seconds
1224The number of seconds past the minute, as an integer between 0 and 59.
1225On some operating systems, this is 60 for leap seconds.
1226@item minutes
1227The number of minutes past the hour, as an integer between 0 and 59.
1228@item hour
1229The hour of the day, as an integer between 0 and 23.
1230@item day
1231The day of the month, as an integer between 1 and 31.
1232@item month
1233The month of the year, as an integer between 1 and 12.
1234@item year
1235The year, an integer typically greater than 1900.
1236@item dow
1237The day of week, as an integer between 0 and 6, where 0 stands for
1238Sunday.
1239@item dst
1240@code{t} if daylight saving time is effect, otherwise @code{nil}.
1241@item zone
1242An integer indicating the time zone, as the number of seconds east of
1243Greenwich.
1244@end table
1245
1246@strong{Common Lisp Note:} Common Lisp has different meanings for
1247@var{dow} and @var{zone}.
1248@end defun
1249
1250@defun encode-time seconds minutes hour day month year &optional zone
1251This function is the inverse of @code{decode-time}. It converts seven
1252items of calendrical data into a time value. For the meanings of the
1253arguments, see the table above under @code{decode-time}.
1254
1255Year numbers less than 100 are not treated specially. If you want them
1256to stand for years above 1900, or years above 2000, you must alter them
1257yourself before you call @code{encode-time}.
1258
1259The optional argument @var{zone} defaults to the current time zone and
1260its daylight saving time rules. If specified, it can be either a list
1261(as you would get from @code{current-time-zone}), a string as in the
1262@code{TZ} environment variable, @code{t} for Universal Time, or an
1263integer (as you would get from @code{decode-time}). The specified
1264zone is used without any further alteration for daylight saving time.
1265
1266If you pass more than seven arguments to @code{encode-time}, the first
1267six are used as @var{seconds} through @var{year}, the last argument is
1268used as @var{zone}, and the arguments in between are ignored. This
1269feature makes it possible to use the elements of a list returned by
1270@code{decode-time} as the arguments to @code{encode-time}, like this:
1271
1272@example
1273(apply 'encode-time (decode-time @dots{}))
1274@end example
1275
1276You can perform simple date arithmetic by using out-of-range values for
1277the @var{seconds}, @var{minutes}, @var{hour}, @var{day}, and @var{month}
1278arguments; for example, day 0 means the day preceding the given month.
1279
1280The operating system puts limits on the range of possible time values;
1281if you try to encode a time that is out of range, an error results.
1282For instance, years before 1970 do not work on some systems;
1283on others, years as early as 1901 do work.
1284@end defun
1285
1286@node Time Parsing
1287@section Parsing and Formatting Times
1288
1289 These functions convert time values (lists of two or three integers)
1290to text in a string, and vice versa.
1291
1292@defun date-to-time string
1293This function parses the time-string @var{string} and returns the
1294corresponding time value.
1295@end defun
1296
1297@defun format-time-string format-string &optional time universal
1298This function converts @var{time} (or the current time, if @var{time} is
1299omitted) to a string according to @var{format-string}. The argument
1300@var{format-string} may contain @samp{%}-sequences which say to
1301substitute parts of the time. Here is a table of what the
1302@samp{%}-sequences mean:
1303
1304@table @samp
1305@item %a
1306This stands for the abbreviated name of the day of week.
1307@item %A
1308This stands for the full name of the day of week.
1309@item %b
1310This stands for the abbreviated name of the month.
1311@item %B
1312This stands for the full name of the month.
1313@item %c
1314This is a synonym for @samp{%x %X}.
1315@item %C
1316This has a locale-specific meaning. In the default locale (named C), it
1317is equivalent to @samp{%A, %B %e, %Y}.
1318@item %d
1319This stands for the day of month, zero-padded.
1320@item %D
1321This is a synonym for @samp{%m/%d/%y}.
1322@item %e
1323This stands for the day of month, blank-padded.
1324@item %h
1325This is a synonym for @samp{%b}.
1326@item %H
1327This stands for the hour (00-23).
1328@item %I
1329This stands for the hour (01-12).
1330@item %j
1331This stands for the day of the year (001-366).
1332@item %k
1333This stands for the hour (0-23), blank padded.
1334@item %l
1335This stands for the hour (1-12), blank padded.
1336@item %m
1337This stands for the month (01-12).
1338@item %M
1339This stands for the minute (00-59).
1340@item %n
1341This stands for a newline.
1342@item %p
1343This stands for @samp{AM} or @samp{PM}, as appropriate.
1344@item %r
1345This is a synonym for @samp{%I:%M:%S %p}.
1346@item %R
1347This is a synonym for @samp{%H:%M}.
1348@item %S
1349This stands for the seconds (00-59).
1350@item %t
1351This stands for a tab character.
1352@item %T
1353This is a synonym for @samp{%H:%M:%S}.
1354@item %U
1355This stands for the week of the year (01-52), assuming that weeks
1356start on Sunday.
1357@item %w
1358This stands for the numeric day of week (0-6). Sunday is day 0.
1359@item %W
1360This stands for the week of the year (01-52), assuming that weeks
1361start on Monday.
1362@item %x
1363This has a locale-specific meaning. In the default locale (named
1364@samp{C}), it is equivalent to @samp{%D}.
1365@item %X
1366This has a locale-specific meaning. In the default locale (named
1367@samp{C}), it is equivalent to @samp{%T}.
1368@item %y
1369This stands for the year without century (00-99).
1370@item %Y
1371This stands for the year with century.
1372@item %Z
1373This stands for the time zone abbreviation (e.g., @samp{EST}).
1374@item %z
1375This stands for the time zone numerical offset (e.g., @samp{-0500}).
1376@end table
1377
1378You can also specify the field width and type of padding for any of
1379these @samp{%}-sequences. This works as in @code{printf}: you write
1380the field width as digits in the middle of a @samp{%}-sequences. If you
1381start the field width with @samp{0}, it means to pad with zeros. If you
1382start the field width with @samp{_}, it means to pad with spaces.
1383
1384For example, @samp{%S} specifies the number of seconds since the minute;
1385@samp{%03S} means to pad this with zeros to 3 positions, @samp{%_3S} to
1386pad with spaces to 3 positions. Plain @samp{%3S} pads with zeros,
1387because that is how @samp{%S} normally pads to two positions.
1388
1389The characters @samp{E} and @samp{O} act as modifiers when used between
1390@samp{%} and one of the letters in the table above. @samp{E} specifies
1391using the current locale's ``alternative'' version of the date and time.
1392In a Japanese locale, for example, @code{%Ex} might yield a date format
1393based on the Japanese Emperors' reigns. @samp{E} is allowed in
1394@samp{%Ec}, @samp{%EC}, @samp{%Ex}, @samp{%EX}, @samp{%Ey}, and
1395@samp{%EY}.
1396
1397@samp{O} means to use the current locale's ``alternative''
1398representation of numbers, instead of the ordinary decimal digits. This
1399is allowed with most letters, all the ones that output numbers.
1400
1401If @var{universal} is non-@code{nil}, that means to describe the time as
1402Universal Time; @code{nil} means describe it using what Emacs believes
1403is the local time zone (see @code{current-time-zone}).
1404
1405This function uses the C library function @code{strftime}
1406(@pxref{Formatting Calendar Time,,, libc, The GNU C Library Reference
1407Manual}) to do most of the work. In order to communicate with that
1408function, it first encodes its argument using the coding system
1409specified by @code{locale-coding-system} (@pxref{Locales}); after
1410@code{strftime} returns the resulting string,
1411@code{format-time-string} decodes the string using that same coding
1412system.
1413@end defun
1414
1415@defun seconds-to-time seconds
1416This function converts @var{seconds}, a floating point number of
1417seconds since the epoch, to a time value and returns that. To perform
1418the inverse conversion, use @code{float-time}.
1419@end defun
1420
53728487
EZ
1421@defun format-seconds format-string seconds
1422This function converts its argument @var{seconds} into a string of
1423years, days, hours, etc., according to @var{format-string}. The
1424argument @var{format-string} may contain @samp{%}-sequences which
1425control the conversion. Here is a table of what the
1426@samp{%}-sequences mean:
1427
1428@table @samp
1429@item %y
1430@itemx %Y
3051e4bf 1431The integer number of 365-day years.
53728487
EZ
1432@item %d
1433@itemx %D
3051e4bf 1434The integer number of days.
53728487
EZ
1435@item %h
1436@itemx %H
3051e4bf 1437The integer number of hours.
53728487
EZ
1438@item %m
1439@itemx %M
3051e4bf 1440The integer number of minutes.
53728487
EZ
1441@item %s
1442@itemx %S
3051e4bf 1443The integer number of seconds.
53728487
EZ
1444@item %z
1445Non-printing control flag. When it is used, other specifiers must be
1446given in the order of decreasing size, i.e.@: years before days, hours
1447before minutes, etc. Nothing will be produced in the result string to
1448the left of @samp{%z} until the first non-zero conversion is
1449encountered. For example, the default format used by
1450@code{emacs-uptime} (@pxref{Processor Run Time, emacs-uptime})
1451@w{@code{"%Y, %D, %H, %M, %z%S"}} means that the number of seconds
1452will always be produced, but years, days, hours, and minutes will only
1453be shown if they are non-zero.
1454@item %%
1455Produces a literal @samp{%}.
1456@end table
1457
1458Upper-case format sequences produce the units in addition to the
1459numbers, lower-case formats produce only the numbers.
1460
1461You can also specify the field width by following the @samp{%} with a
1462number; shorter numbers will be padded with blanks. An optional
1463period before the width requests zero-padding instead. For example,
1464@code{"%.3Y"} might produce @code{"004 years"}.
1465
1466@emph{Warning:} This function works only with values of @var{seconds}
1467that don't exceed @code{most-positive-fixnum} (@pxref{Integer Basics,
1468most-positive-fixnum}).
1469@end defun
1470
b8d4c8d0
GM
1471@node Processor Run Time
1472@section Processor Run time
1473@cindex processor run time
53728487
EZ
1474@cindex Emacs process run time
1475
1476 Emacs provides several functions and primitives that return time,
1477both elapsed and processor time, used by the Emacs process.
1478
106e6894 1479@deffn Command emacs-uptime &optional format
53728487
EZ
1480This function returns a string representing the Emacs
1481@dfn{uptime}---the elapsed wall-clock time this instance of Emacs is
3051e4bf
EZ
1482running. The string is formatted by @code{format-seconds} according
1483to the optional argument @var{format}. For the available format
1484descriptors, see @ref{Time Parsing, format-seconds}. If @var{format}
e2b7cebb
CY
1485is @code{nil} or omitted, it defaults to @code{"%Y, %D, %H, %M,
1486%z%S"}.
106e6894
CY
1487
1488When called interactively, it prints the uptime in the echo area.
1489@end deffn
b8d4c8d0
GM
1490
1491@defun get-internal-run-time
1492This function returns the processor run time used by Emacs as a list
1493of three integers: @code{(@var{high} @var{low} @var{microsec})}. The
1494integers @var{high} and @var{low} combine to give the number of
1495seconds, which is
1496@ifnottex
1497@var{high} * 2**16 + @var{low}.
1498@end ifnottex
1499@tex
1500$high*2^{16}+low$.
1501@end tex
1502
1503The third element, @var{microsec}, gives the microseconds (or 0 for
1504systems that return time with the resolution of only one second).
1505
53728487
EZ
1506Note that the time returned by this function excludes the time Emacs
1507was not using the processor, and if the Emacs process has several
1508threads, the returned value is the sum of the processor times used up
1509by all Emacs threads.
1510
b8d4c8d0 1511If the system doesn't provide a way to determine the processor run
53728487
EZ
1512time, @code{get-internal-run-time} returns the same time as
1513@code{current-time}.
1514@end defun
1515
106e6894 1516@deffn Command emacs-init-time
53728487 1517This function returns the duration of the Emacs initialization
106e6894
CY
1518(@pxref{Startup Summary}) in seconds, as a string. When called
1519interactively, it prints the duration in the echo area.
1520@end deffn
b8d4c8d0
GM
1521
1522@node Time Calculations
1523@section Time Calculations
1524
1525 These functions perform calendrical computations using time values
1526(the kind of list that @code{current-time} returns).
1527
1528@defun time-less-p t1 t2
1529This returns @code{t} if time value @var{t1} is less than time value
1530@var{t2}.
1531@end defun
1532
1533@defun time-subtract t1 t2
1534This returns the time difference @var{t1} @minus{} @var{t2} between
1535two time values, in the same format as a time value.
1536@end defun
1537
1538@defun time-add t1 t2
1539This returns the sum of two time values, one of which ought to
1540represent a time difference rather than a point in time.
1541Here is how to add a number of seconds to a time value:
1542
1543@example
1544(time-add @var{time} (seconds-to-time @var{seconds}))
1545@end example
1546@end defun
1547
1548@defun time-to-days time
1549This function returns the number of days between the beginning of year
15501 and @var{time}.
1551@end defun
1552
1553@defun time-to-day-in-year time
1554This returns the day number within the year corresponding to @var{time}.
1555@end defun
1556
1557@defun date-leap-year-p year
1558This function returns @code{t} if @var{year} is a leap year.
1559@end defun
1560
1561@node Timers
1562@section Timers for Delayed Execution
1563@cindex timer
1564
1565 You can set up a @dfn{timer} to call a function at a specified
1566future time or after a certain length of idleness.
1567
1568 Emacs cannot run timers at any arbitrary point in a Lisp program; it
1569can run them only when Emacs could accept output from a subprocess:
1570namely, while waiting or inside certain primitive functions such as
1571@code{sit-for} or @code{read-event} which @emph{can} wait. Therefore, a
1572timer's execution may be delayed if Emacs is busy. However, the time of
1573execution is very precise if Emacs is idle.
1574
1575 Emacs binds @code{inhibit-quit} to @code{t} before calling the timer
1576function, because quitting out of many timer functions can leave
1577things in an inconsistent state. This is normally unproblematical
1578because most timer functions don't do a lot of work. Indeed, for a
1579timer to call a function that takes substantial time to run is likely
1580to be annoying. If a timer function needs to allow quitting, it
1581should use @code{with-local-quit} (@pxref{Quitting}). For example, if
1582a timer function calls @code{accept-process-output} to receive output
1583from an external process, that call should be wrapped inside
1584@code{with-local-quit}, to ensure that @kbd{C-g} works if the external
1585process hangs.
1586
1587 It is usually a bad idea for timer functions to alter buffer
1588contents. When they do, they usually should call @code{undo-boundary}
1589both before and after changing the buffer, to separate the timer's
1590changes from user commands' changes and prevent a single undo entry
1591from growing to be quite large.
1592
1593 Timer functions should also avoid calling functions that cause Emacs
1594to wait, such as @code{sit-for} (@pxref{Waiting}). This can lead to
1595unpredictable effects, since other timers (or even the same timer) can
1596run while waiting. If a timer function needs to perform an action
1597after a certain time has elapsed, it can do this by scheduling a new
1598timer.
1599
1600 If a timer function calls functions that can change the match data,
1601it should save and restore the match data. @xref{Saving Match Data}.
1602
1603@deffn Command run-at-time time repeat function &rest args
1604This sets up a timer that calls the function @var{function} with
1605arguments @var{args} at time @var{time}. If @var{repeat} is a number
1606(integer or floating point), the timer is scheduled to run again every
1607@var{repeat} seconds after @var{time}. If @var{repeat} is @code{nil},
1608the timer runs only once.
1609
1610@var{time} may specify an absolute or a relative time.
1611
1612Absolute times may be specified using a string with a limited variety
1613of formats, and are taken to be times @emph{today}, even if already in
1614the past. The recognized forms are @samp{@var{xxxx}},
1615@samp{@var{x}:@var{xx}}, or @samp{@var{xx}:@var{xx}} (military time),
1616and @samp{@var{xx}am}, @samp{@var{xx}AM}, @samp{@var{xx}pm},
1617@samp{@var{xx}PM}, @samp{@var{xx}:@var{xx}am},
1618@samp{@var{xx}:@var{xx}AM}, @samp{@var{xx}:@var{xx}pm}, or
1619@samp{@var{xx}:@var{xx}PM}. A period can be used instead of a colon
1620to separate the hour and minute parts.
1621
1622To specify a relative time as a string, use numbers followed by units.
1623For example:
1624
1625@table @samp
1626@item 1 min
1627denotes 1 minute from now.
1628@item 1 min 5 sec
1629denotes 65 seconds from now.
1630@item 1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
1631denotes exactly 103 months, 123 days, and 10862 seconds from now.
1632@end table
1633
1634For relative time values, Emacs considers a month to be exactly thirty
1635days, and a year to be exactly 365.25 days.
1636
1637Not all convenient formats are strings. If @var{time} is a number
1638(integer or floating point), that specifies a relative time measured in
1639seconds. The result of @code{encode-time} can also be used to specify
1640an absolute value for @var{time}.
1641
1642In most cases, @var{repeat} has no effect on when @emph{first} call
1643takes place---@var{time} alone specifies that. There is one exception:
1644if @var{time} is @code{t}, then the timer runs whenever the time is a
1645multiple of @var{repeat} seconds after the epoch. This is useful for
1646functions like @code{display-time}.
1647
1648The function @code{run-at-time} returns a timer value that identifies
1649the particular scheduled future action. You can use this value to call
1650@code{cancel-timer} (see below).
1651@end deffn
1652
1653 A repeating timer nominally ought to run every @var{repeat} seconds,
1654but remember that any invocation of a timer can be late. Lateness of
1655one repetition has no effect on the scheduled time of the next
1656repetition. For instance, if Emacs is busy computing for long enough
1657to cover three scheduled repetitions of the timer, and then starts to
1658wait, it will immediately call the timer function three times in
1659immediate succession (presuming no other timers trigger before or
1660between them). If you want a timer to run again no less than @var{n}
1661seconds after the last invocation, don't use the @var{repeat} argument.
1662Instead, the timer function should explicitly reschedule the timer.
1663
1664@defvar timer-max-repeats
1665This variable's value specifies the maximum number of times to repeat
1666calling a timer function in a row, when many previously scheduled
1667calls were unavoidably delayed.
1668@end defvar
1669
1670@defmac with-timeout (seconds timeout-forms@dots{}) body@dots{}
1671Execute @var{body}, but give up after @var{seconds} seconds. If
1672@var{body} finishes before the time is up, @code{with-timeout} returns
1673the value of the last form in @var{body}. If, however, the execution of
1674@var{body} is cut short by the timeout, then @code{with-timeout}
1675executes all the @var{timeout-forms} and returns the value of the last
1676of them.
1677
1678This macro works by setting a timer to run after @var{seconds} seconds. If
1679@var{body} finishes before that time, it cancels the timer. If the
1680timer actually runs, it terminates execution of @var{body}, then
1681executes @var{timeout-forms}.
1682
1683Since timers can run within a Lisp program only when the program calls a
1684primitive that can wait, @code{with-timeout} cannot stop executing
1685@var{body} while it is in the midst of a computation---only when it
1686calls one of those primitives. So use @code{with-timeout} only with a
1687@var{body} that waits for input, not one that does a long computation.
1688@end defmac
1689
1690 The function @code{y-or-n-p-with-timeout} provides a simple way to use
1691a timer to avoid waiting too long for an answer. @xref{Yes-or-No
1692Queries}.
1693
1694@defun cancel-timer timer
1695This cancels the requested action for @var{timer}, which should be a
1696timer---usually, one previously returned by @code{run-at-time} or
1697@code{run-with-idle-timer}. This cancels the effect of that call to
1698one of these functions; the arrival of the specified time will not
1699cause anything special to happen.
1700@end defun
1701
1702@node Idle Timers
1703@section Idle Timers
1704
1705 Here is how to set up a timer that runs when Emacs is idle for a
1706certain length of time. Aside from how to set them up, idle timers
1707work just like ordinary timers.
1708
1709@deffn Command run-with-idle-timer secs repeat function &rest args
1710Set up a timer which runs when Emacs has been idle for @var{secs}
1711seconds. The value of @var{secs} may be an integer or a floating point
1712number; a value of the type returned by @code{current-idle-time}
1713is also allowed.
1714
1715If @var{repeat} is @code{nil}, the timer runs just once, the first time
1716Emacs remains idle for a long enough time. More often @var{repeat} is
1717non-@code{nil}, which means to run the timer @emph{each time} Emacs
1718remains idle for @var{secs} seconds.
1719
1720The function @code{run-with-idle-timer} returns a timer value which you
1721can use in calling @code{cancel-timer} (@pxref{Timers}).
1722@end deffn
1723
1724@cindex idleness
1725 Emacs becomes ``idle'' when it starts waiting for user input, and it
1726remains idle until the user provides some input. If a timer is set for
1727five seconds of idleness, it runs approximately five seconds after Emacs
1728first becomes idle. Even if @var{repeat} is non-@code{nil}, this timer
1729will not run again as long as Emacs remains idle, because the duration
1730of idleness will continue to increase and will not go down to five
1731seconds again.
1732
1733 Emacs can do various things while idle: garbage collect, autosave or
1734handle data from a subprocess. But these interludes during idleness do
1735not interfere with idle timers, because they do not reset the clock of
1736idleness to zero. An idle timer set for 600 seconds will run when ten
1737minutes have elapsed since the last user command was finished, even if
1738subprocess output has been accepted thousands of times within those ten
1739minutes, and even if there have been garbage collections and autosaves.
1740
1741 When the user supplies input, Emacs becomes non-idle while executing the
1742input. Then it becomes idle again, and all the idle timers that are
1743set up to repeat will subsequently run another time, one by one.
1744
1745@c Emacs 19 feature
1746@defun current-idle-time
17bec671
RS
1747If Emacs is idle, this function returns the length of time Emacs has
1748been idle, as a list of three integers: @code{(@var{high} @var{low}
1749@var{microsec})}. The integers @var{high} and @var{low} combine to
1750give the number of seconds of idleness, which is
b8d4c8d0
GM
1751@ifnottex
1752@var{high} * 2**16 + @var{low}.
1753@end ifnottex
1754@tex
1755$high*2^{16}+low$.
1756@end tex
1757
1758The third element, @var{microsec}, gives the microseconds since the
1759start of the current second (or 0 for systems that return time with
1760the resolution of only one second).
1761
17bec671
RS
1762When Emacs is not idle, @code{current-idle-time} returns @code{nil}.
1763This is a convenient way to test whether Emacs is idle.
1764
b8d4c8d0
GM
1765The main use of this function is when an idle timer function wants to
1766``take a break'' for a while. It can set up another idle timer to
1767call the same function again, after a few seconds more idleness.
1768Here's an example:
1769
1770@smallexample
1771(defvar resume-timer nil
1772 "Timer that `timer-function' used to reschedule itself, or nil.")
1773
1774(defun timer-function ()
1775 ;; @r{If the user types a command while @code{resume-timer}}
1776 ;; @r{is active, the next time this function is called from}
1777 ;; @r{its main idle timer, deactivate @code{resume-timer}.}
1778 (when resume-timer
1779 (cancel-timer resume-timer))
1780 ...@var{do the work for a while}...
1781 (when @var{taking-a-break}
1782 (setq resume-timer
1783 (run-with-idle-timer
1784 ;; Compute an idle time @var{break-length}
1785 ;; more than the current value.
1786 (time-add (current-idle-time)
1787 (seconds-to-time @var{break-length}))
1788 nil
1789 'timer-function))))
1790@end smallexample
1791@end defun
1792
1793 Some idle timer functions in user Lisp packages have a loop that
1794does a certain amount of processing each time around, and exits when
1795@code{(input-pending-p)} is non-@code{nil}. That approach seems very
1796natural but has two problems:
1797
1798@itemize
1799@item
1800It blocks out all process output (since Emacs accepts process output
1801only while waiting).
1802
1803@item
1804It blocks out any idle timers that ought to run during that time.
1805@end itemize
1806
1807@noindent
1808To avoid these problems, don't use that technique. Instead, write
1809such idle timers to reschedule themselves after a brief pause, using
1810the method in the @code{timer-function} example above.
1811
1812@node Terminal Input
1813@section Terminal Input
1814@cindex terminal input
1815
1816 This section describes functions and variables for recording or
1817manipulating terminal input. See @ref{Display}, for related
1818functions.
1819
1820@menu
1821* Input Modes:: Options for how input is processed.
1822* Recording Input:: Saving histories of recent or all input events.
1823@end menu
1824
1825@node Input Modes
1826@subsection Input Modes
1827@cindex input modes
1828@cindex terminal input modes
1829
1830@defun set-input-mode interrupt flow meta &optional quit-char
1831This function sets the mode for reading keyboard input. If
1832@var{interrupt} is non-null, then Emacs uses input interrupts. If it is
1833@code{nil}, then it uses @sc{cbreak} mode. The default setting is
1834system-dependent. Some systems always use @sc{cbreak} mode regardless
1835of what is specified.
1836
1837When Emacs communicates directly with X, it ignores this argument and
1838uses interrupts if that is the way it knows how to communicate.
1839
1840If @var{flow} is non-@code{nil}, then Emacs uses @sc{xon/xoff}
1841(@kbd{C-q}, @kbd{C-s}) flow control for output to the terminal. This
1842has no effect except in @sc{cbreak} mode.
1843
1844@c Emacs 19 feature
1845The argument @var{meta} controls support for input character codes
1846above 127. If @var{meta} is @code{t}, Emacs converts characters with
1847the 8th bit set into Meta characters. If @var{meta} is @code{nil},
1848Emacs disregards the 8th bit; this is necessary when the terminal uses
1849it as a parity bit. If @var{meta} is neither @code{t} nor @code{nil},
1850Emacs uses all 8 bits of input unchanged. This is good for terminals
1851that use 8-bit character sets.
1852
1853@c Emacs 19 feature
1854If @var{quit-char} is non-@code{nil}, it specifies the character to
1855use for quitting. Normally this character is @kbd{C-g}.
1856@xref{Quitting}.
1857@end defun
1858
1859The @code{current-input-mode} function returns the input mode settings
1860Emacs is currently using.
1861
1862@c Emacs 19 feature
1863@defun current-input-mode
1864This function returns the current mode for reading keyboard input. It
1865returns a list, corresponding to the arguments of @code{set-input-mode},
1866of the form @code{(@var{interrupt} @var{flow} @var{meta} @var{quit})} in
1867which:
1868@table @var
1869@item interrupt
1870is non-@code{nil} when Emacs is using interrupt-driven input. If
1871@code{nil}, Emacs is using @sc{cbreak} mode.
1872@item flow
1873is non-@code{nil} if Emacs uses @sc{xon/xoff} (@kbd{C-q}, @kbd{C-s})
1874flow control for output to the terminal. This value is meaningful only
1875when @var{interrupt} is @code{nil}.
1876@item meta
1877is @code{t} if Emacs treats the eighth bit of input characters as
1878the meta bit; @code{nil} means Emacs clears the eighth bit of every
1879input character; any other value means Emacs uses all eight bits as the
1880basic character code.
1881@item quit
1882is the character Emacs currently uses for quitting, usually @kbd{C-g}.
1883@end table
1884@end defun
1885
1886@node Recording Input
1887@subsection Recording Input
1888@cindex recording input
1889
1890@defun recent-keys
1891This function returns a vector containing the last 300 input events from
1892the keyboard or mouse. All input events are included, whether or not
1893they were used as parts of key sequences. Thus, you always get the last
1894100 input events, not counting events generated by keyboard macros.
1895(These are excluded because they are less interesting for debugging; it
1896should be enough to see the events that invoked the macros.)
1897
1898A call to @code{clear-this-command-keys} (@pxref{Command Loop Info})
1899causes this function to return an empty vector immediately afterward.
1900@end defun
1901
1902@deffn Command open-dribble-file filename
1903@cindex dribble file
1904This function opens a @dfn{dribble file} named @var{filename}. When a
1905dribble file is open, each input event from the keyboard or mouse (but
1906not those from keyboard macros) is written in that file. A
1907non-character event is expressed using its printed representation
1908surrounded by @samp{<@dots{}>}.
1909
1910You close the dribble file by calling this function with an argument
1911of @code{nil}.
1912
1913This function is normally used to record the input necessary to
1914trigger an Emacs bug, for the sake of a bug report.
1915
1916@example
1917@group
1918(open-dribble-file "~/dribble")
1919 @result{} nil
1920@end group
1921@end example
1922@end deffn
1923
1924 See also the @code{open-termscript} function (@pxref{Terminal Output}).
1925
1926@node Terminal Output
1927@section Terminal Output
1928@cindex terminal output
1929
1930 The terminal output functions send output to a text terminal, or keep
1931track of output sent to the terminal. The variable @code{baud-rate}
1932tells you what Emacs thinks is the output speed of the terminal.
1933
01f17ae2 1934@defopt baud-rate
b8d4c8d0
GM
1935This variable's value is the output speed of the terminal, as far as
1936Emacs knows. Setting this variable does not change the speed of actual
1937data transmission, but the value is used for calculations such as
1938padding.
1939
1940 It also affects decisions about whether to scroll part of the
1941screen or repaint on text terminals. @xref{Forcing Redisplay},
1942for the corresponding functionality on graphical terminals.
1943
1944The value is measured in baud.
01f17ae2 1945@end defopt
b8d4c8d0
GM
1946
1947 If you are running across a network, and different parts of the
1948network work at different baud rates, the value returned by Emacs may be
1949different from the value used by your local terminal. Some network
1950protocols communicate the local terminal speed to the remote machine, so
1951that Emacs and other programs can get the proper value, but others do
1952not. If Emacs has the wrong value, it makes decisions that are less
1953than optimal. To fix the problem, set @code{baud-rate}.
1954
106e6894
CY
1955@defun send-string-to-terminal string &optional terminal
1956This function sends @var{string} to @var{terminal} without alteration.
b8d4c8d0 1957Control characters in @var{string} have terminal-dependent effects.
106e6894
CY
1958This function operates only on text terminals. @var{terminal} may be
1959a terminal object, a frame, or @code{nil} for the selected frame's
f804f446 1960terminal. In batch mode, @var{string} is sent to @code{stdout} when
f58a7c7e 1961@var{terminal} is @code{nil}.
b8d4c8d0
GM
1962
1963One use of this function is to define function keys on terminals that
1964have downloadable function key definitions. For example, this is how (on
1965certain terminals) to define function key 4 to move forward four
1966characters (by transmitting the characters @kbd{C-u C-f} to the
1967computer):
1968
1969@example
1970@group
1971(send-string-to-terminal "\eF4\^U\^F")
1972 @result{} nil
1973@end group
1974@end example
1975@end defun
1976
1977@deffn Command open-termscript filename
1978@cindex termscript file
1979This function is used to open a @dfn{termscript file} that will record
1980all the characters sent by Emacs to the terminal. It returns
1981@code{nil}. Termscript files are useful for investigating problems
1982where Emacs garbles the screen, problems that are due to incorrect
1983Termcap entries or to undesirable settings of terminal options more
1984often than to actual Emacs bugs. Once you are certain which characters
1985were actually output, you can determine reliably whether they correspond
1986to the Termcap specifications in use.
1987
1988You close the termscript file by calling this function with an
1989argument of @code{nil}.
1990
1991See also @code{open-dribble-file} in @ref{Recording Input}.
1992
1993@example
1994@group
1995(open-termscript "../junk/termscript")
1996 @result{} nil
1997@end group
1998@end example
1999@end deffn
2000
2001@node Sound Output
2002@section Sound Output
2003@cindex sound
2004
2005 To play sound using Emacs, use the function @code{play-sound}. Only
2006certain systems are supported; if you call @code{play-sound} on a system
2007which cannot really do the job, it gives an error. Emacs version 20 and
2008earlier did not support sound at all.
2009
2010 The sound must be stored as a file in RIFF-WAVE format (@samp{.wav})
2011or Sun Audio format (@samp{.au}).
2012
2013@defun play-sound sound
2014This function plays a specified sound. The argument, @var{sound}, has
2015the form @code{(sound @var{properties}...)}, where the @var{properties}
2016consist of alternating keywords (particular symbols recognized
2017specially) and values corresponding to them.
2018
2019Here is a table of the keywords that are currently meaningful in
2020@var{sound}, and their meanings:
2021
2022@table @code
2023@item :file @var{file}
2024This specifies the file containing the sound to play.
2025If the file name is not absolute, it is expanded against
2026the directory @code{data-directory}.
2027
2028@item :data @var{data}
2029This specifies the sound to play without need to refer to a file. The
2030value, @var{data}, should be a string containing the same bytes as a
2031sound file. We recommend using a unibyte string.
2032
2033@item :volume @var{volume}
2034This specifies how loud to play the sound. It should be a number in the
2035range of 0 to 1. The default is to use whatever volume has been
2036specified before.
2037
2038@item :device @var{device}
2039This specifies the system device on which to play the sound, as a
2040string. The default device is system-dependent.
2041@end table
2042
2043Before actually playing the sound, @code{play-sound}
2044calls the functions in the list @code{play-sound-functions}.
2045Each function is called with one argument, @var{sound}.
2046@end defun
2047
2048@defun play-sound-file file &optional volume device
2049This function is an alternative interface to playing a sound @var{file}
2050specifying an optional @var{volume} and @var{device}.
2051@end defun
2052
2053@defvar play-sound-functions
2054A list of functions to be called before playing a sound. Each function
2055is called with one argument, a property list that describes the sound.
2056@end defvar
2057
2058@node X11 Keysyms
2059@section Operating on X11 Keysyms
2060@cindex X11 keysyms
2061
2062To define system-specific X11 keysyms, set the variable
2063@code{system-key-alist}.
2064
2065@defvar system-key-alist
2066This variable's value should be an alist with one element for each
2067system-specific keysym. Each element has the form @code{(@var{code}
2068. @var{symbol})}, where @var{code} is the numeric keysym code (not
2069including the ``vendor specific'' bit,
2070@ifnottex
2071-2**28),
2072@end ifnottex
2073@tex
2074$-2^{28}$),
2075@end tex
2076and @var{symbol} is the name for the function key.
2077
2078For example @code{(168 . mute-acute)} defines a system-specific key (used
2079by HP X servers) whose numeric code is
2080@ifnottex
2081-2**28
2082@end ifnottex
2083@tex
2084$-2^{28}$
2085@end tex
2086+ 168.
2087
2088It is not crucial to exclude from the alist the keysyms of other X
2089servers; those do no harm, as long as they don't conflict with the ones
2090used by the X server actually in use.
2091
2092The variable is always local to the current terminal, and cannot be
3ec61d4e 2093buffer-local. @xref{Multiple Terminals}.
b8d4c8d0
GM
2094@end defvar
2095
2096You can specify which keysyms Emacs should use for the Meta, Alt, Hyper, and Super modifiers by setting these variables:
2097
2098@defvar x-alt-keysym
2099@defvarx x-meta-keysym
2100@defvarx x-hyper-keysym
2101@defvarx x-super-keysym
2102The name of the keysym that should stand for the Alt modifier
2103(respectively, for Meta, Hyper, and Super). For example, here is
2104how to swap the Meta and Alt modifiers within Emacs:
2105@lisp
2106(setq x-alt-keysym 'meta)
2107(setq x-meta-keysym 'alt)
2108@end lisp
2109@end defvar
2110
2111@node Batch Mode
2112@section Batch Mode
2113@cindex batch mode
2114
2115 The command-line option @samp{-batch} causes Emacs to run
2116noninteractively. In this mode, Emacs does not read commands from the
2117terminal, it does not alter the terminal modes, and it does not expect
2118to be outputting to an erasable screen. The idea is that you specify
2119Lisp programs to run; when they are finished, Emacs should exit. The
2120way to specify the programs to run is with @samp{-l @var{file}}, which
2121loads the library named @var{file}, or @samp{-f @var{function}}, which
2122calls @var{function} with no arguments, or @samp{--eval @var{form}}.
2123
2124 Any Lisp program output that would normally go to the echo area,
2125either using @code{message}, or using @code{prin1}, etc., with @code{t}
2126as the stream, goes instead to Emacs's standard error descriptor when
2127in batch mode. Similarly, input that would normally come from the
2128minibuffer is read from the standard input descriptor.
2129Thus, Emacs behaves much like a noninteractive
2130application program. (The echo area output that Emacs itself normally
2131generates, such as command echoing, is suppressed entirely.)
2132
2133@defvar noninteractive
2134This variable is non-@code{nil} when Emacs is running in batch mode.
2135@end defvar
2136
2137@node Session Management
2138@section Session Management
2139@cindex session manager
2140
dca019f8
CY
2141Emacs supports the X Session Management Protocol, which is used to
2142suspend and restart applications. In the X Window System, a program
2143called the @dfn{session manager} is responsible for keeping track of
2144the applications that are running. When the X server shuts down, the
2145session manager asks applications to save their state, and delays the
2146actual shutdown until they respond. An application can also cancel
2147the shutdown.
b8d4c8d0
GM
2148
2149When the session manager restarts a suspended session, it directs
2150these applications to individually reload their saved state. It does
2151this by specifying a special command-line argument that says what
2152saved session to restore. For Emacs, this argument is @samp{--smid
2153@var{session}}.
2154
2155@defvar emacs-save-session-functions
dca019f8
CY
2156Emacs supports saving state via a hook called
2157@code{emacs-save-session-functions}. Emacs runs this hook when the
2158session manager tells it that the window system is shutting down. The
2159functions are called with no arguments, and with the current buffer
2160set to a temporary buffer. Each function can use @code{insert} to add
2161Lisp code to this buffer. At the end, Emacs saves the buffer in a
2162file, called the @dfn{session file}.
2163
2164@findex emacs-session-restore
2165Subsequently, when the session manager restarts Emacs, it loads the
2166session file automatically (@pxref{Loading}). This is performed by a
2167function named @code{emacs-session-restore}, which is called during
2168startup. @xref{Startup Summary}.
b8d4c8d0
GM
2169
2170If a function in @code{emacs-save-session-functions} returns
2171non-@code{nil}, Emacs tells the session manager to cancel the
2172shutdown.
2173@end defvar
2174
2175Here is an example that just inserts some text into @samp{*scratch*} when
2176Emacs is restarted by the session manager.
2177
2178@example
2179@group
2180(add-hook 'emacs-save-session-functions 'save-yourself-test)
2181@end group
2182
2183@group
2184(defun save-yourself-test ()
c57008f6 2185 (insert "(save-current-buffer
b8d4c8d0
GM
2186 (switch-to-buffer \"*scratch*\")
2187 (insert \"I am restored\"))")
2188 nil)
2189@end group
2190@end example
2191
2192@ignore
2193 arch-tag: 8378814a-30d7-467c-9615-74a80b9988a7
2194@end ignore