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