Merge from emacs-24; up to 2014-05-29T17:16:00Z!dmantipov@yandex.ru
[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.
ba318903 3@c Copyright (C) 1990-1995, 1998-1999, 2001-2014 Free Software
ab422c4d 4@c Foundation, Inc.
b8d4c8d0 5@c See the file elisp.texi for copying conditions.
ecc6530d 6@node System Interface
b8d4c8d0
GM
7@chapter Operating System Interface
8
9 This chapter is about starting and getting out of Emacs, access to
b59af549 10values in the operating system environment, and terminal input, output.
b8d4c8d0 11
02a89103
CY
12 @xref{Building Emacs}, for related information. @xref{Display}, for
13additional operating system status information pertaining to the
14terminal and the screen.
b8d4c8d0
GM
15
16@menu
17* Starting Up:: Customizing Emacs startup processing.
18* Getting Out:: How exiting works (permanent or temporary).
19* System Environment:: Distinguish the name and kind of system.
20* User Identification:: Finding the name and user id of the user.
d24880de 21* Time of Day:: Getting the current time.
a4180391 22* Time Conversion:: Converting a time from numeric form to
3be92e63 23 calendrical data and vice versa.
b8d4c8d0
GM
24* Time Parsing:: Converting a time from numeric form to text
25 and vice versa.
26* Processor Run Time:: Getting the run time used by Emacs.
27* Time Calculations:: Adding, subtracting, comparing times, etc.
d24880de 28* Timers:: Setting a timer to call a function at a certain time.
b8d4c8d0
GM
29* Idle Timers:: Setting a timer to call a function when Emacs has
30 been idle for a certain length of time.
31* Terminal Input:: Accessing and recording terminal input.
32* Terminal Output:: Controlling and recording terminal output.
33* Sound Output:: Playing sounds on the computer's speaker.
8e69dc70 34* X11 Keysyms:: Operating on key symbols for X Windows.
b8d4c8d0
GM
35* Batch Mode:: Running Emacs without terminal interaction.
36* Session Management:: Saving and restoring state with X Session Management.
32813ea7
MA
37* Desktop Notifications:: Desktop notifications.
38* File Notifications:: File notifications.
00f113eb 39* Dynamic Libraries:: On-demand loading of support libraries.
b8d4c8d0
GM
40@end menu
41
42@node Starting Up
43@section Starting Up Emacs
44
45 This section describes what Emacs does when it is started, and how you
46can customize these actions.
47
48@menu
49* Startup Summary:: Sequence of actions Emacs performs at startup.
02a89103 50* Init File:: Details on reading the init file.
b8d4c8d0
GM
51* Terminal-Specific:: How the terminal-specific Lisp file is read.
52* Command-Line Arguments:: How command-line arguments are processed,
53 and how you can customize them.
54@end menu
55
56@node Startup Summary
57@subsection Summary: Sequence of Actions at Startup
58@cindex initialization of Emacs
59@cindex startup of Emacs
60@cindex @file{startup.el}
61
02a89103 62 When Emacs is started up, it performs the following operations
b59af549 63(see @code{normal-top-level} in @file{startup.el}):
b8d4c8d0
GM
64
65@enumerate
66@item
67It adds subdirectories to @code{load-path}, by running the file named
02a89103
CY
68@file{subdirs.el} in each directory in the list. Normally, this file
69adds the directory's subdirectories to the list, and those are scanned
70in their turn. The files @file{subdirs.el} are normally generated
71automatically when Emacs is installed.
b8d4c8d0 72
b59af549 73@item
d6686055
GM
74It loads any @file{leim-list.el} that it finds in the @code{load-path}
75directories. This file is intended for registering input methods.
76The search is only for any personal @file{leim-list.el} files that you
cb6c95a3
GM
77may have created; it skips the directories containing the standard Emacs
78libraries (these should contain only a single @file{leim-list.el} file,
79which is compiled into the Emacs executable).
b59af549 80
f36acfd9 81@vindex before-init-time
b8d4c8d0 82@item
02a89103 83It sets the variable @code{before-init-time} to the value of
f36acfd9 84@code{current-time} (@pxref{Time of Day}). It also sets
02a89103
CY
85@code{after-init-time} to @code{nil}, which signals to Lisp programs
86that Emacs is being initialized.
b8d4c8d0 87
b59af549
GM
88@c set-locale-environment
89@item
90It sets the language environment and the terminal coding system,
8fc85b20 91if requested by environment variables such as @env{LANG}.
b59af549
GM
92
93@item
94It does some basic parsing of the command-line arguments.
95
f36acfd9
EZ
96@vindex initial-window-system@r{, and startup}
97@vindex window-system-initialization-alist
b8d4c8d0 98@item
b59af549
GM
99If not running in batch mode, it initializes the window system that
100the variable @code{initial-window-system} specifies (@pxref{Window
101Systems, initial-window-system}). The initialization function for
102each supported window system is specified by
103@code{window-system-initialization-alist}. If the value
104of @code{initial-window-system} is @var{windowsystem}, then the
105appropriate initialization function is defined in the file
106@file{term/@var{windowsystem}-win.el}. This file should have been
107compiled into the Emacs executable when it was built.
f36acfd9
EZ
108
109@item
b59af549 110It runs the normal hook @code{before-init-hook}.
b8d4c8d0
GM
111
112@item
33da7b16
GM
113If appropriate, it creates a graphical frame. This is not done if the
114options @samp{--batch} or @samp{--daemon} were specified.
b8d4c8d0
GM
115
116@item
b59af549
GM
117It initializes the initial frame's faces, and sets up the menu bar
118and tool bar if needed. If graphical frames are supported, it sets up
119the tool bar even if the current frame is not a graphical one, since a
120graphical frame may be created later on.
b8d4c8d0
GM
121
122@item
b59af549
GM
123It use @code{custom-reevaluate-setting} to re-initialize the members
124of the list @code{custom-delayed-init-variables}. These are any
125pre-loaded user options whose default value depends on the run-time,
126rather than build-time, context.
127@xref{Building Emacs, custom-initialize-delay}.
128
129@c @item
130@c It registers the colors available for tty frames.
f36acfd9
EZ
131
132@item
02a89103
CY
133It loads the library @file{site-start}, if it exists. This is not
134done if the options @samp{-Q} or @samp{--no-site-file} were specified.
b8d4c8d0
GM
135@cindex @file{site-start.el}
136
137@item
02a89103
CY
138It loads your init file (@pxref{Init File}). This is not done if the
139options @samp{-q}, @samp{-Q}, or @samp{--batch} were specified. If
140the @samp{-u} option was specified, Emacs looks for the init file in
141that user's home directory instead.
b8d4c8d0
GM
142
143@item
02a89103
CY
144It loads the library @file{default}, if it exists. This is not done
145if @code{inhibit-default-init} is non-@code{nil}, nor if the options
146@samp{-q}, @samp{-Q}, or @samp{--batch} were specified.
b8d4c8d0
GM
147@cindex @file{default.el}
148
f36acfd9
EZ
149@item
150It loads your abbrevs from the file specified by
02a89103
CY
151@code{abbrev-file-name}, if that file exists and can be read
152(@pxref{Abbrev Files, abbrev-file-name}). This is not done if the
153option @samp{--batch} was specified.
f36acfd9 154
986bd52a
CY
155@item
156If @code{package-enable-at-startup} is non-@code{nil}, it calls the
157function @code{package-initialize} to activate any optional Emacs Lisp
158package that has been installed. @xref{Packaging Basics}.
159
f36acfd9
EZ
160@vindex after-init-time
161@item
02a89103
CY
162It sets the variable @code{after-init-time} to the value of
163@code{current-time}. This variable was set to @code{nil} earlier;
164setting it to the current time signals that the initialization phase
165is over, and, together with @code{before-init-time}, provides the
f36acfd9
EZ
166measurement of how long it took.
167
b8d4c8d0
GM
168@item
169It runs the normal hook @code{after-init-hook}.
170
171@item
2bb0eca1 172If the buffer @file{*scratch*} exists and is still in Fundamental mode
02a89103
CY
173(as it should be by default), it sets its major mode according to
174@code{initial-major-mode}.
b8d4c8d0
GM
175
176@item
a08a07e3 177If started on a text terminal, it loads the terminal-specific
98bd6b32
GM
178Lisp library (@pxref{Terminal-Specific}), and runs the hook
179@code{tty-setup-hook}. This is not done
02a89103 180in @code{--batch} mode, nor if @code{term-file-prefix} is @code{nil}.
b8d4c8d0 181
b59af549
GM
182@c Now command-line calls command-line-1.
183
b8d4c8d0
GM
184@item
185It displays the initial echo area message, unless you have suppressed
186that with @code{inhibit-startup-echo-area-message}.
187
188@item
b59af549 189It processes any command-line options that were not handled earlier.
b8d4c8d0 190
b59af549
GM
191@c This next one is back in command-line, but the remaining bits of
192@c command-line-1 are not done if noninteractive.
02a89103
CY
193@item
194It now exits if the option @code{--batch} was specified.
195
196@item
197If @code{initial-buffer-choice} is a string, it visits the file with
dfff9284
TH
198that name. If it is a function, it calls the function and selects the
199buffer returned by the function. It it is @code{t}, it selects the
200@file{*scratch*} buffer. If the @file{*scratch*} buffer exists and is
02a89103
CY
201empty, it inserts @code{initial-scratch-message} into that buffer.
202
b59af549
GM
203@c To make things nice and confusing, the next three items can be
204@c called from two places. If displaying a startup screen, they are
205@c called in command-line-1 before the startup screen is shown.
206@c inhibit-startup-hooks is then set and window-setup-hook set to nil.
207@c If not displaying a startup screen, they are are called in
208@c normal-top-level.
209@c FIXME? So it seems they can be called before or after the
210@c daemon/session restore step?
211
b8d4c8d0 212@item
98bd6b32 213It runs @code{emacs-startup-hook}.
b8d4c8d0
GM
214
215@item
216It calls @code{frame-notice-user-settings}, which modifies the
217parameters of the selected frame according to whatever the init files
218specify.
219
220@item
221It runs @code{window-setup-hook}. @xref{Window Systems}.
222
f36acfd9 223@item
be9d2b46 224@cindex startup screen
02a89103
CY
225It displays the @dfn{startup screen}, which is a special buffer that
226contains information about copyleft and basic Emacs usage. This is
33da7b16
GM
227not done if @code{inhibit-startup-screen} or @code{initial-buffer-choice}
228are non-@code{nil}, or if the @samp{--no-splash} or @samp{-Q} command-line
229options were specified.
f36acfd9 230
b59af549
GM
231@c End of command-line-1.
232
233@c Back to command-line from command-line-1.
234
235@c This is the point at which we actually exit in batch mode, but the
236@c last few bits of command-line-1 are not done in batch mode.
237
238@item
239If the option @code{--daemon} was specified, it calls
240@code{server-start} and detaches from the controlling terminal.
241@xref{Emacs Server,,, emacs, The GNU Emacs Manual}.
242
f36acfd9
EZ
243@item
244If started by the X session manager, it calls
245@code{emacs-session-restore} passing it as argument the ID of the
dca019f8 246previous session. @xref{Session Management}.
b59af549
GM
247
248@c End of command-line.
249
250@c Back to normal-top-level from command-line.
251
b8d4c8d0
GM
252@end enumerate
253
a5656eae
GM
254@noindent
255The following options affect some aspects of the startup sequence.
256
f36acfd9 257@defopt inhibit-startup-screen
02a89103 258This variable, if non-@code{nil}, inhibits the startup screen. In
2bb0eca1 259that case, Emacs typically displays the @file{*scratch*} buffer; but
02a89103 260see @code{initial-buffer-choice}, below.
b8d4c8d0 261
02a89103
CY
262Do not set this variable in the init file of a new user, or in a way
263that affects more than one user, as that would prevent new users from
264receiving information about copyleft and basic Emacs usage.
f36acfd9 265
d3d97050
KR
266@vindex inhibit-startup-message
267@vindex inhibit-splash-screen
02a89103
CY
268@code{inhibit-startup-message} and @code{inhibit-splash-screen} are
269aliases for this variable.
270@end defopt
271
272@defopt initial-buffer-choice
33da7b16
GM
273If non-@code{nil}, this variable is a string that specifies a file or
274directory for Emacs to display after starting up, instead of the
275startup screen.
dfff9284
TH
276If its value is a function, Emacs calls that function which must
277return a buffer which is then displayed.
2bb0eca1 278If its value is @code{t}, Emacs displays the @file{*scratch*} buffer.
b8d4c8d0
GM
279@end defopt
280
281@defopt inhibit-startup-echo-area-message
282This variable controls the display of the startup echo area message.
283You can suppress the startup echo area message by adding text with this
284form to your init file:
285
286@example
287(setq inhibit-startup-echo-area-message
288 "@var{your-login-name}")
289@end example
290
291Emacs explicitly checks for an expression as shown above in your init
292file; your login name must appear in the expression as a Lisp string
81927dd2
CY
293constant. You can also use the Customize interface. Other methods of
294setting @code{inhibit-startup-echo-area-message} to the same value do
295not inhibit the startup message. This way, you can easily inhibit the
02a89103
CY
296message for yourself if you wish, but thoughtless copying of your init
297file will not inhibit the message for someone else.
298@end defopt
b8d4c8d0 299
02a89103
CY
300@defopt initial-scratch-message
301This variable, if non-@code{nil}, should be a string, which is
2bb0eca1
GM
302inserted into the @file{*scratch*} buffer when Emacs starts up. If it
303is @code{nil}, the @file{*scratch*} buffer is empty.
b8d4c8d0
GM
304@end defopt
305
a5656eae
GM
306@noindent
307The following command-line options affect some aspects of the startup
308sequence. @xref{Initial Options,,, emacs, The GNU Emacs Manual}.
309
310@table @code
311@item --no-splash
312Do not display a splash screen.
313
314@item --batch
315Run without an interactive terminal. @xref{Batch Mode}.
316
317@item --daemon
318Do not initialize any display; just start a server in the background.
319
320@item --no-init-file
6e466459 321@itemx -q
a5656eae
GM
322Do not load either the init file, or the @file{default} library.
323
324@item --no-site-file
325Do not load the @file{site-start} library.
326
327@item --quick
328@itemx -Q
329Equivalent to @samp{-q --no-site-file --no-splash}.
330@c and --no-site-lisp, but let's not mention that here.
331@end table
332
333
b8d4c8d0 334@node Init File
986bd52a 335@subsection The Init File
b8d4c8d0
GM
336@cindex init file
337@cindex @file{.emacs}
986bd52a 338@cindex @file{init.el}
b8d4c8d0
GM
339
340 When you start Emacs, it normally attempts to load your @dfn{init
02a89103
CY
341file}. This is either a file named @file{.emacs} or @file{.emacs.el}
342in your home directory, or a file named @file{init.el} in a
b59af549
GM
343subdirectory named @file{.emacs.d} in your home directory.
344@ignore
345Whichever place you use, you can also compile the file (@pxref{Byte
02a89103
CY
346Compilation}); then the actual file loaded will be @file{.emacs.elc}
347or @file{init.elc}.
b59af549 348@end ignore
b8d4c8d0
GM
349
350 The command-line switches @samp{-q}, @samp{-Q}, and @samp{-u}
351control whether and where to find the init file; @samp{-q} (and the
352stronger @samp{-Q}) says not to load an init file, while @samp{-u
353@var{user}} says to load @var{user}'s init file instead of yours.
354@xref{Entering Emacs,,, emacs, The GNU Emacs Manual}. If neither
8fc85b20
GM
355option is specified, Emacs uses the @env{LOGNAME} environment
356variable, or the @env{USER} (most systems) or @env{USERNAME} (MS
b8d4c8d0
GM
357systems) variable, to find your home directory and thus your init
358file; this way, even if you have su'd, Emacs still loads your own init
359file. If those environment variables are absent, though, Emacs uses
360your user-id to find your home directory.
361
362@cindex default init file
986bd52a
CY
363 An Emacs installation may have a @dfn{default init file}, which is a
364Lisp library named @file{default.el}. Emacs finds this file through
365the standard search path for libraries (@pxref{How Programs Do
366Loading}). The Emacs distribution does not come with this file; it is
367intended for local customizations. If the default init file exists,
33da7b16 368it is loaded whenever you start Emacs. But your own personal init
b8d4c8d0
GM
369file, if any, is loaded first; if it sets @code{inhibit-default-init}
370to a non-@code{nil} value, then Emacs does not subsequently load the
33da7b16
GM
371@file{default.el} file. In batch mode, or if you specify @samp{-q}
372(or @samp{-Q}), Emacs loads neither your personal init file nor
373the default init file.
b8d4c8d0
GM
374
375 Another file for site-customization is @file{site-start.el}. Emacs
376loads this @emph{before} the user's init file. You can inhibit the
377loading of this file with the option @samp{--no-site-file}.
378
01f17ae2 379@defopt site-run-file
b8d4c8d0
GM
380This variable specifies the site-customization file to load before the
381user's init file. Its normal value is @code{"site-start"}. The only
382way you can change it with real effect is to do so before dumping
383Emacs.
33da7b16 384@c So why even mention it here. I imagine it is almost never changed.
01f17ae2 385@end defopt
b8d4c8d0
GM
386
387 @xref{Init Examples,, Init File Examples, emacs, The GNU Emacs Manual}, for
388examples of how to make various commonly desired customizations in your
389@file{.emacs} file.
390
391@defopt inhibit-default-init
33da7b16
GM
392If this variable is non-@code{nil}, it prevents Emacs from loading the
393default initialization library file. The default value is @code{nil}.
b8d4c8d0
GM
394@end defopt
395
396@defvar before-init-hook
397This normal hook is run, once, just before loading all the init files
33da7b16 398(@file{site-start.el}, your init file, and @file{default.el}).
b8d4c8d0
GM
399(The only way to change it with real effect is before dumping Emacs.)
400@end defvar
401
402@defvar after-init-hook
403This normal hook is run, once, just after loading all the init files
33da7b16
GM
404(@file{site-start.el}, your init file, and @file{default.el}),
405before loading the terminal-specific library (if started on a text
406terminal) and processing the command-line action arguments.
b8d4c8d0
GM
407@end defvar
408
409@defvar emacs-startup-hook
410This normal hook is run, once, just after handling the command line
98bd6b32 411arguments. In batch mode, Emacs does not run this hook.
b8d4c8d0
GM
412@end defvar
413
414@defvar user-init-file
415This variable holds the absolute file name of the user's init file. If the
416actual init file loaded is a compiled file, such as @file{.emacs.elc},
417the value refers to the corresponding source file.
418@end defvar
419
420@defvar user-emacs-directory
421This variable holds the name of the @file{.emacs.d} directory. It is
33da7b16 422@file{~/.emacs.d} on all platforms but MS-DOS.
b8d4c8d0
GM
423@end defvar
424
425@node Terminal-Specific
426@subsection Terminal-Specific Initialization
427@cindex terminal-specific initialization
428
429 Each terminal type can have its own Lisp library that Emacs loads when
430run on that type of terminal. The library's name is constructed by
431concatenating the value of the variable @code{term-file-prefix} and the
8fc85b20 432terminal type (specified by the environment variable @env{TERM}).
95de732d
GM
433Normally, @code{term-file-prefix} has the value @code{"term/"};
434changing this is not recommended. If there is an entry matching
435@env{TERM} in the @code{term-file-aliases} association list,
436Emacs uses the associated value in place of @env{TERM}.
437Emacs finds the file in the normal manner, by searching the
438@code{load-path} directories, and trying the @samp{.elc} and
439@samp{.el} suffixes.
b8d4c8d0
GM
440
441@cindex Termcap
986bd52a
CY
442 The usual role of a terminal-specific library is to enable special
443keys to send sequences that Emacs can recognize. It may also need to
444set or add to @code{input-decode-map} if the Termcap or Terminfo entry
98bd6b32 445does not specify all the terminal's function keys. @xref{Terminal Input}.
b8d4c8d0 446
98bd6b32
GM
447 When the name of the terminal type contains a hyphen or underscore,
448and no library is found whose name is identical to the terminal's
449name, Emacs strips from the terminal's name the last hyphen or
450underscore and everything that follows
b8d4c8d0 451it, and tries again. This process is repeated until Emacs finds a
33da7b16 452matching library, or until there are no more hyphens or underscores in the name
1df7defd 453(i.e., there is no terminal-specific library). For example, if the
986bd52a
CY
454terminal name is @samp{xterm-256color} and there is no
455@file{term/xterm-256color.el} library, Emacs tries to load
456@file{term/xterm.el}. If necessary, the terminal library can evaluate
457@code{(getenv "TERM")} to find the full name of the terminal type.
b8d4c8d0 458
98bd6b32
GM
459 Your init file can prevent the loading of the terminal-specific
460library by setting the variable @code{term-file-prefix} to @code{nil}.
b8d4c8d0
GM
461
462 You can also arrange to override some of the actions of the
98bd6b32
GM
463terminal-specific library by using @code{tty-setup-hook}. This is
464a normal hook that Emacs runs after initializing a new text terminal.
465You could use this hook to define initializations for terminals that do not
b8d4c8d0
GM
466have their own libraries. @xref{Hooks}.
467
6638d67c 468@defopt term-file-prefix
8fc85b20 469@cindex @env{TERM} environment variable
986bd52a
CY
470If the value of this variable is non-@code{nil}, Emacs loads a
471terminal-specific initialization file as follows:
b8d4c8d0
GM
472
473@example
474(load (concat term-file-prefix (getenv "TERM")))
475@end example
476
477@noindent
478You may set the @code{term-file-prefix} variable to @code{nil} in your
479init file if you do not wish to load the
33da7b16 480terminal-initialization file.
b8d4c8d0 481
8fc85b20 482On MS-DOS, Emacs sets the @env{TERM} environment variable to @samp{internal}.
6638d67c 483@end defopt
b8d4c8d0 484
6638d67c 485@defopt term-file-aliases
95de732d
GM
486This variable is an an association list mapping terminal types to
487their aliases. For example, an element of the form @code{("vt102"
488. "vt100")} means to treat a terminal of type @samp{vt102} like one of
489type @samp{vt100}.
6638d67c 490@end defopt
95de732d 491
98bd6b32
GM
492@defvar tty-setup-hook
493This variable is a normal hook that Emacs runs after initializing a
494new text terminal. (This applies when Emacs starts up in non-windowed
495mode, and when making a tty @command{emacsclient} connection.) The
496hook runs after loading your init file (if applicable) and the
497terminal-specific Lisp file, so you can use it to adjust the
498definitions made by that file.
b8d4c8d0 499
33da7b16
GM
500For a related feature, @pxref{Window Systems, window-setup-hook}.
501@end defvar
b8d4c8d0
GM
502
503@node Command-Line Arguments
504@subsection Command-Line Arguments
505@cindex command-line arguments
506
986bd52a 507 You can use command-line arguments to request various actions when
33da7b16
GM
508you start Emacs. Note that the recommended way of using Emacs is to
509start it just once, after logging in, and then do all editing in the same
510Emacs session (@pxref{Entering Emacs,,, emacs, The GNU Emacs Manual}).
511For this reason, you might not use command-line arguments very often;
512nonetheless, they can be useful when invoking Emacs from session
513scripts or debugging Emacs. This section describes how Emacs
514processes command-line arguments.
b8d4c8d0
GM
515
516@defun command-line
517This function parses the command line that Emacs was called with,
33da7b16
GM
518processes it, and (amongst other things) loads the user's init file and
519displays the startup messages.
b8d4c8d0
GM
520@end defun
521
522@defvar command-line-processed
523The value of this variable is @code{t} once the command line has been
524processed.
525
d612ddbb
XF
526If you redump Emacs by calling @code{dump-emacs} (@pxref{Building
527Emacs}), you may wish to set this variable to @code{nil} first in
528order to cause the new dumped Emacs to process its new command-line
529arguments.
b8d4c8d0
GM
530@end defvar
531
532@defvar command-switch-alist
533@cindex switches on command line
534@cindex options on command line
535@cindex command-line options
33da7b16
GM
536This variable is an alist of user-defined command-line options and
537associated handler functions. By default it is empty, but you can
538add elements if you wish.
b8d4c8d0
GM
539
540A @dfn{command-line option} is an argument on the command line, which
541has the form:
542
543@example
544-@var{option}
545@end example
546
547The elements of the @code{command-switch-alist} look like this:
548
549@example
550(@var{option} . @var{handler-function})
551@end example
552
553The @sc{car}, @var{option}, is a string, the name of a command-line
554option (not including the initial hyphen). The @var{handler-function}
555is called to handle @var{option}, and receives the option name as its
556sole argument.
557
558In some cases, the option is followed in the command line by an
559argument. In these cases, the @var{handler-function} can find all the
560remaining command-line arguments in the variable
7d3bb569
XF
561@code{command-line-args-left} (see below). (The entire list of
562command-line arguments is in @code{command-line-args}.)
b8d4c8d0
GM
563
564The command-line arguments are parsed by the @code{command-line-1}
565function in the @file{startup.el} file. See also @ref{Emacs
566Invocation, , Command Line Arguments for Emacs Invocation, emacs, The
567GNU Emacs Manual}.
568@end defvar
569
570@defvar command-line-args
571The value of this variable is the list of command-line arguments passed
572to Emacs.
573@end defvar
574
dca019f8 575@defvar command-line-args-left
d3d97050 576@vindex argv
dca019f8 577The value of this variable is the list of command-line arguments that
33da7b16
GM
578have not yet been processed.
579@c Don't mention this, since it is a "bad name for a dynamically bound variable"
580@c @code{argv} is an alias for this.
dca019f8
CY
581@end defvar
582
b8d4c8d0
GM
583@defvar command-line-functions
584This variable's value is a list of functions for handling an
585unrecognized command-line argument. Each time the next argument to be
586processed has no special meaning, the functions in this list are called,
587in order of appearance, until one of them returns a non-@code{nil}
588value.
589
590These functions are called with no arguments. They can access the
591command-line argument under consideration through the variable
592@code{argi}, which is bound temporarily at this point. The remaining
593arguments (not including the current one) are in the variable
594@code{command-line-args-left}.
595
596When a function recognizes and processes the argument in @code{argi}, it
597should return a non-@code{nil} value to say it has dealt with that
598argument. If it has also dealt with some of the following arguments, it
599can indicate that by deleting them from @code{command-line-args-left}.
600
33da7b16 601If all of these functions return @code{nil}, then the argument is treated
b8d4c8d0
GM
602as a file name to visit.
603@end defvar
604
605@node Getting Out
606@section Getting Out of Emacs
607@cindex exiting Emacs
608
609 There are two ways to get out of Emacs: you can kill the Emacs job,
610which exits permanently, or you can suspend it, which permits you to
02243d9d
GM
611reenter the Emacs process later. (In a graphical environment, you can
612of course simply switch to another application without doing anything
613special to Emacs, then switch back to Emacs when you want.)
b8d4c8d0
GM
614
615@menu
616* Killing Emacs:: Exiting Emacs irreversibly.
617* Suspending Emacs:: Exiting Emacs reversibly.
618@end menu
619
620@node Killing Emacs
b8d4c8d0
GM
621@subsection Killing Emacs
622@cindex killing Emacs
623
02243d9d
GM
624 Killing Emacs means ending the execution of the Emacs process.
625If you started Emacs from a terminal, the parent process normally
626resumes control. The low-level primitive for killing Emacs is
627@code{kill-emacs}.
b8d4c8d0 628
106e6894 629@deffn Command kill-emacs &optional exit-data
ddb54206
CY
630This command calls the hook @code{kill-emacs-hook}, then exits the
631Emacs process and kills it.
b8d4c8d0 632
ddb54206
CY
633If @var{exit-data} is an integer, that is used as the exit status of
634the Emacs process. (This is useful primarily in batch operation; see
b8d4c8d0
GM
635@ref{Batch Mode}.)
636
637If @var{exit-data} is a string, its contents are stuffed into the
638terminal input buffer so that the shell (or whatever program next reads
639input) can read them.
106e6894 640@end deffn
b8d4c8d0 641
ddb54206
CY
642@cindex SIGTERM
643@cindex SIGHUP
644@cindex SIGINT
645@cindex operating system signal
646 The @code{kill-emacs} function is normally called via the
647higher-level command @kbd{C-x C-c}
648(@code{save-buffers-kill-terminal}). @xref{Exiting,,, emacs, The GNU
649Emacs Manual}. It is also called automatically if Emacs receives a
1df7defd 650@code{SIGTERM} or @code{SIGHUP} operating system signal (e.g., when the
ddb54206
CY
651controlling terminal is disconnected), or if it receives a
652@code{SIGINT} signal while running in batch mode (@pxref{Batch Mode}).
b8d4c8d0 653
ddb54206
CY
654@defvar kill-emacs-hook
655This normal hook is run by @code{kill-emacs}, before it kills Emacs.
656
657Because @code{kill-emacs} can be called in situations where user
1df7defd 658interaction is impossible (e.g., when the terminal is disconnected),
ddb54206
CY
659functions on this hook should not attempt to interact with the user.
660If you want to interact with the user when Emacs is shutting down, use
661@code{kill-emacs-query-functions}, described below.
b8d4c8d0
GM
662@end defvar
663
ddb54206
CY
664 When Emacs is killed, all the information in the Emacs process,
665aside from files that have been saved, is lost. Because killing Emacs
666inadvertently can lose a lot of work, the
667@code{save-buffers-kill-terminal} command queries for confirmation if
668you have buffers that need saving or subprocesses that are running.
669It also runs the abnormal hook @code{kill-emacs-query-functions}:
670
671@defvar kill-emacs-query-functions
672When @code{save-buffers-kill-terminal} is killing Emacs, it calls the
673functions in this hook, after asking the standard questions and before
674calling @code{kill-emacs}. The functions are called in order of
675appearance, with no arguments. Each function can ask for additional
676confirmation from the user. If any of them returns @code{nil},
677@code{save-buffers-kill-emacs} does not kill Emacs, and does not run
678the remaining functions in this hook. Calling @code{kill-emacs}
679directly does not run this hook.
b8d4c8d0
GM
680@end defvar
681
682@node Suspending Emacs
683@subsection Suspending Emacs
684@cindex suspending Emacs
685
a08a07e3 686 On text terminals, it is possible to @dfn{suspend Emacs}, which
dca019f8
CY
687means stopping Emacs temporarily and returning control to its superior
688process, which is usually the shell. This allows you to resume
689editing later in the same Emacs process, with the same buffers, the
690same kill ring, the same undo history, and so on. To resume Emacs,
691use the appropriate command in the parent shell---most likely
692@code{fg}.
b8d4c8d0 693
62a5303f
EZ
694@cindex controlling terminal
695 Suspending works only on a terminal device from which the Emacs
696session was started. We call that device the @dfn{controlling
dca019f8 697terminal} of the session. Suspending is not allowed if the
02243d9d
GM
698controlling terminal is a graphical terminal. Suspending is usually
699not relevant in graphical environments, since you can simply switch to
700another application without doing anything special to Emacs.
701
702@c FIXME? Are there any systems Emacs still supports that do not
703@c have SIGTSTP?
704@cindex SIGTSTP
705 Some operating systems (those without @code{SIGTSTP}, or MS-DOS) do
706not support suspension of jobs; on these systems, ``suspension''
707actually creates a new shell temporarily as a subprocess of Emacs.
708Then you would exit the shell to return to Emacs.
b8d4c8d0 709
106e6894 710@deffn Command suspend-emacs &optional string
b8d4c8d0
GM
711This function stops Emacs and returns control to the superior process.
712If and when the superior process resumes Emacs, @code{suspend-emacs}
713returns @code{nil} to its caller in Lisp.
714
62a5303f
EZ
715This function works only on the controlling terminal of the Emacs
716session; to relinquish control of other tty devices, use
f71de46c 717@code{suspend-tty} (see below). If the Emacs session uses more than
dca019f8
CY
718one terminal, you must delete the frames on all the other terminals
719before suspending Emacs, or this function signals an error.
720@xref{Multiple Terminals}.
62a5303f 721
dca019f8 722If @var{string} is non-@code{nil}, its characters are sent to Emacs's
02243d9d
GM
723superior shell, to be read as terminal input.
724@c FIXME? It seems to me that shell does echo STRING.
725The characters in @var{string} are not echoed by the superior shell;
726only the results appear.
b8d4c8d0
GM
727
728Before suspending, @code{suspend-emacs} runs the normal hook
dca019f8
CY
729@code{suspend-hook}. After the user resumes Emacs,
730@code{suspend-emacs} runs the normal hook @code{suspend-resume-hook}.
731@xref{Hooks}.
b8d4c8d0
GM
732
733The next redisplay after resumption will redraw the entire screen,
dca019f8
CY
734unless the variable @code{no-redraw-on-reenter} is non-@code{nil}.
735@xref{Refresh Screen}.
b8d4c8d0 736
02243d9d 737Here is an example of how you could use these hooks:
b8d4c8d0
GM
738
739@smallexample
b8d4c8d0
GM
740@group
741(add-hook 'suspend-hook
02243d9d
GM
742 (lambda () (or (y-or-n-p "Really suspend? ")
743 (error "Suspend canceled"))))
b8d4c8d0 744@end group
02243d9d
GM
745(add-hook 'suspend-resume-hook (lambda () (message "Resumed!")
746 (sit-for 2)))
747@end smallexample
748@c The sit-for prevents the ``nil'' that suspend-emacs returns
749@c hiding the message.
750
751Here is what you would see upon evaluating @code{(suspend-emacs "pwd")}:
752
753@smallexample
b8d4c8d0
GM
754@group
755---------- Buffer: Minibuffer ----------
756Really suspend? @kbd{y}
757---------- Buffer: Minibuffer ----------
758@end group
759
760@group
761---------- Parent Shell ----------
02243d9d
GM
762bash$ /home/username
763bash$ fg
b8d4c8d0
GM
764@end group
765
766@group
767---------- Echo Area ----------
768Resumed!
769@end group
770@end smallexample
02243d9d
GM
771
772@c FIXME? AFAICS, it is echoed.
773Note that @samp{pwd} is not echoed after Emacs is suspended. But it
774is read and executed by the shell.
106e6894 775@end deffn
b8d4c8d0
GM
776
777@defvar suspend-hook
778This variable is a normal hook that Emacs runs before suspending.
779@end defvar
780
781@defvar suspend-resume-hook
782This variable is a normal hook that Emacs runs on resuming
783after a suspension.
784@end defvar
785
62a5303f
EZ
786@defun suspend-tty &optional tty
787If @var{tty} specifies a terminal device used by Emacs, this function
788relinquishes the device and restores it to its prior state. Frames
789that used the device continue to exist, but are not updated and Emacs
dca019f8
CY
790doesn't read input from them. @var{tty} can be a terminal object, a
791frame (meaning the terminal for that frame), or @code{nil} (meaning
792the terminal for the selected frame). @xref{Multiple Terminals}.
793
794If @var{tty} is already suspended, this function does nothing.
795
d3d97050 796@vindex suspend-tty-functions
dca019f8
CY
797This function runs the hook @code{suspend-tty-functions}, passing the
798terminal object as an argument to each function.
62a5303f
EZ
799@end defun
800
801@defun resume-tty &optional tty
dca019f8 802This function resumes the previously suspended terminal device
02243d9d
GM
803@var{tty}; where @var{tty} has the same possible values as it does
804for @code{suspend-tty}.
62a5303f 805
d3d97050 806@vindex resume-tty-functions
62a5303f 807This function reopens the terminal device, re-initializes it, and
02243d9d 808redraws it with that terminal's selected frame. It then runs the
dca019f8
CY
809hook @code{resume-tty-functions}, passing the terminal object as an
810argument to each function.
62a5303f
EZ
811
812If the same device is already used by another Emacs terminal, this
02243d9d
GM
813function signals an error. If @var{tty} is not suspended, this
814function does nothing.
62a5303f
EZ
815@end defun
816
02243d9d
GM
817@defun controlling-tty-p &optional tty
818This function returns non-@code{nil} if @var{tty} is the
819controlling terminal of the Emacs session; @var{tty} can be a
dca019f8
CY
820terminal object, a frame (meaning the terminal for that frame), or
821@code{nil} (meaning the terminal for the selected frame).
62a5303f
EZ
822@end defun
823
824@deffn Command suspend-frame
825This command @dfn{suspends} a frame. For GUI frames, it calls
a08a07e3
CY
826@code{iconify-frame} (@pxref{Visibility of Frames}); for frames on
827text terminals, it calls either @code{suspend-emacs} or
828@code{suspend-tty}, depending on whether the frame is displayed on the
829controlling terminal device or not.
62a5303f
EZ
830@end deffn
831
b8d4c8d0
GM
832@node System Environment
833@section Operating System Environment
834@cindex operating system environment
835
836 Emacs provides access to variables in the operating system environment
837through various functions. These variables include the name of the
838system, the user's @acronym{UID}, and so on.
839
840@defvar system-configuration
841This variable holds the standard GNU configuration name for the
cf0495f2
GM
842hardware/software configuration of your system, as a string. For
843example, a typical value for a 64-bit GNU/Linux system is
844@samp{"x86_64-unknown-linux-gnu"}.
b8d4c8d0
GM
845@end defvar
846
847@cindex system type and name
848@defvar system-type
849The value of this variable is a symbol indicating the type of operating
cf0495f2 850system Emacs is running on. The possible values are:
b8d4c8d0 851
58e3d8e8 852@table @code
1213465a
EZ
853@item aix
854IBM's AIX.
b8d4c8d0
GM
855
856@item berkeley-unix
1213465a 857Berkeley BSD and its variants.
b8d4c8d0
GM
858
859@item cygwin
1213465a
EZ
860Cygwin, a Posix layer on top of MS-Windows.
861
862@item darwin
863Darwin (Mac OS X).
b8d4c8d0 864
b8d4c8d0 865@item gnu
1213465a 866The GNU system (using the GNU kernel, which consists of the HURD and Mach).
b8d4c8d0
GM
867
868@item gnu/linux
869A GNU/Linux system---that is, a variant GNU system, using the Linux
cf0495f2 870kernel. (These systems are the ones people often call ``Linux'', but
b8d4c8d0
GM
871actually Linux is just the kernel, not the whole system.)
872
1213465a
EZ
873@item gnu/kfreebsd
874A GNU (glibc-based) system with a FreeBSD kernel.
875
b8d4c8d0
GM
876@item hpux
877Hewlett-Packard HPUX operating system.
878
879@item irix
880Silicon Graphics Irix system.
881
882@item ms-dos
1df7defd 883Microsoft's DOS@. Emacs compiled with DJGPP for MS-DOS binds
cf0495f2 884@code{system-type} to @code{ms-dos} even when you run it on MS-Windows.
b8d4c8d0 885
b8d4c8d0 886@item usg-unix-v
1213465a 887AT&T Unix System V.
b8d4c8d0 888
b8d4c8d0 889@item windows-nt
cf0495f2 890Microsoft Windows NT, 9X and later. The value of @code{system-type}
1df7defd 891is always @code{windows-nt}, e.g., even on Windows 7.
b8d4c8d0 892
b8d4c8d0
GM
893@end table
894
895We do not wish to add new symbols to make finer distinctions unless it
896is absolutely necessary! In fact, we hope to eliminate some of these
cf0495f2
GM
897alternatives in the future. If you need to make a finer distinction
898than @code{system-type} allows for, you can test
1df7defd 899@code{system-configuration}, e.g., against a regexp.
b8d4c8d0
GM
900@end defvar
901
902@defun system-name
cf0495f2
GM
903This function returns the name of the machine you are running on, as a
904string.
b8d4c8d0
GM
905@end defun
906
907 The symbol @code{system-name} is a variable as well as a function. In
908fact, the function returns whatever value the variable
909@code{system-name} currently holds. Thus, you can set the variable
910@code{system-name} in case Emacs is confused about the name of your
911system. The variable is also useful for constructing frame titles
912(@pxref{Frame Titles}).
913
cf0495f2 914@c FIXME seems like this section is not the best place for this option?
01f17ae2 915@defopt mail-host-address
b8d4c8d0
GM
916If this variable is non-@code{nil}, it is used instead of
917@code{system-name} for purposes of generating email addresses. For
918example, it is used when constructing the default value of
919@code{user-mail-address}. @xref{User Identification}. (Since this is
920done when Emacs starts up, the value actually used is the one saved when
921Emacs was dumped. @xref{Building Emacs}.)
cf0495f2
GM
922@c FIXME sounds like should probably give this a :set-after and some
923@c custom-initialize-delay voodoo.
01f17ae2 924@end defopt
b8d4c8d0 925
106e6894 926@deffn Command getenv var &optional frame
b8d4c8d0
GM
927@cindex environment variable access
928This function returns the value of the environment variable @var{var},
929as a string. @var{var} should be a string. If @var{var} is undefined
cf0495f2
GM
930in the environment, @code{getenv} returns @code{nil}. It returns
931@samp{""} if @var{var} is set but null. Within Emacs, a list of environment
932variables and their values is kept in the variable @code{process-environment}.
b8d4c8d0
GM
933
934@example
935@group
936(getenv "USER")
937 @result{} "lewis"
938@end group
cf0495f2
GM
939@end example
940
941The shell command @code{printenv} prints all or part of the environment:
b8d4c8d0 942
cf0495f2 943@example
b8d4c8d0 944@group
cf0495f2
GM
945bash$ printenv
946PATH=/usr/local/bin:/usr/bin:/bin
b8d4c8d0
GM
947USER=lewis
948@end group
949@group
cf0495f2
GM
950TERM=xterm
951SHELL=/bin/bash
952HOME=/home/lewis
b8d4c8d0 953@end group
cf0495f2 954@dots{}
b8d4c8d0
GM
955@end example
956@end deffn
957
cf0495f2 958@deffn Command setenv variable &optional value substitute
b8d4c8d0
GM
959This command sets the value of the environment variable named
960@var{variable} to @var{value}. @var{variable} should be a string.
961Internally, Emacs Lisp can handle any string. However, normally
962@var{variable} should be a valid shell identifier, that is, a sequence
963of letters, digits and underscores, starting with a letter or
964underscore. Otherwise, errors may occur if subprocesses of Emacs try
965to access the value of @var{variable}. If @var{value} is omitted or
cf0495f2
GM
966@code{nil} (or, interactively, with a prefix argument), @code{setenv}
967removes @var{variable} from the environment. Otherwise, @var{value}
968should be a string.
969
7d3bb569 970@c FIXME: Document `substitute-env-vars'? --xfq
cf0495f2
GM
971If the optional argument @var{substitute} is non-@code{nil}, Emacs
972calls the function @code{substitute-env-vars} to expand any
973environment variables in @var{value}.
b8d4c8d0
GM
974
975@code{setenv} works by modifying @code{process-environment}; binding
976that variable with @code{let} is also reasonable practice.
977
978@code{setenv} returns the new value of @var{variable}, or @code{nil}
979if it removed @var{variable} from the environment.
980@end deffn
981
982@defvar process-environment
983This variable is a list of strings, each describing one environment
984variable. The functions @code{getenv} and @code{setenv} work by means
985of this variable.
986
987@smallexample
988@group
989process-environment
cf0495f2 990@result{} ("PATH=/usr/local/bin:/usr/bin:/bin"
b8d4c8d0
GM
991 "USER=lewis"
992@end group
993@group
cf0495f2
GM
994 "TERM=xterm"
995 "SHELL=/bin/bash"
996 "HOME=/home/lewis"
997 @dots{})
b8d4c8d0
GM
998@end group
999@end smallexample
1000
1001If @code{process-environment} contains ``duplicate'' elements that
1002specify the same environment variable, the first of these elements
1003specifies the variable, and the other ``duplicates'' are ignored.
1004@end defvar
1005
200811d6
EZ
1006@defvar initial-environment
1007This variable holds the list of environment variables Emacs inherited
cf0495f2 1008from its parent process when Emacs started.
200811d6
EZ
1009@end defvar
1010
b8d4c8d0 1011@defvar path-separator
cf0495f2 1012This variable holds a string that says which character separates
b8d4c8d0 1013directories in a search path (as found in an environment variable). Its
cf0495f2 1014value is @code{":"} for Unix and GNU systems, and @code{";"} for MS systems.
b8d4c8d0
GM
1015@end defvar
1016
1017@defun parse-colon-path path
cf0495f2 1018This function takes a search path string such as the value of
8fc85b20 1019the @env{PATH} environment variable, and splits it at the separators,
cf0495f2
GM
1020returning a list of directory names. @code{nil} in this list means
1021the current directory. Although the function's name says
1022``colon'', it actually uses the value of @code{path-separator}.
b8d4c8d0
GM
1023
1024@example
1025(parse-colon-path ":/foo:/bar")
1026 @result{} (nil "/foo/" "/bar/")
1027@end example
1028@end defun
1029
1030@defvar invocation-name
1031This variable holds the program name under which Emacs was invoked. The
1032value is a string, and does not include a directory name.
1033@end defvar
1034
1035@defvar invocation-directory
1036This variable holds the directory from which the Emacs executable was
cf0495f2 1037invoked, or @code{nil} if that directory cannot be determined.
b8d4c8d0
GM
1038@end defvar
1039
1040@defvar installation-directory
1041If non-@code{nil}, this is a directory within which to look for the
cf0495f2
GM
1042@file{lib-src} and @file{etc} subdirectories. In an installed Emacs,
1043it is normally @code{nil}. It is non-@code{nil}
b8d4c8d0
GM
1044when Emacs can't find those directories in their standard installed
1045locations, but can find them in a directory related somehow to the one
cf0495f2 1046containing the Emacs executable (i.e., @code{invocation-directory}).
b8d4c8d0
GM
1047@end defvar
1048
1049@defun load-average &optional use-float
cf0495f2
GM
1050This function returns the current 1-minute, 5-minute, and 15-minute
1051system load averages, in a list. The load average indicates the
1052number of processes trying to run on the system.
b8d4c8d0
GM
1053
1054By default, the values are integers that are 100 times the system load
cf0495f2 1055averages, but if @var{use-float} is non-@code{nil}, then they are
09b73f08 1056returned as floating-point numbers without multiplying by 100.
b8d4c8d0
GM
1057
1058If it is impossible to obtain the load average, this function signals
1059an error. On some platforms, access to load averages requires
1060installing Emacs as setuid or setgid so that it can read kernel
1061information, and that usually isn't advisable.
cf0495f2 1062@c FIXME which platforms are these? Are they still relevant?
b8d4c8d0
GM
1063
1064If the 1-minute load average is available, but the 5- or 15-minute
1065averages are not, this function returns a shortened list containing
1066the available averages.
1067
1068@example
1069@group
1070(load-average)
1071 @result{} (169 48 36)
1072@end group
1073@group
1074(load-average t)
1075 @result{} (1.69 0.48 0.36)
1076@end group
b8d4c8d0 1077@end example
cf0495f2
GM
1078
1079The shell command @code{uptime} returns similar information.
b8d4c8d0
GM
1080@end defun
1081
1082@defun emacs-pid
1083This function returns the process @acronym{ID} of the Emacs process,
1084as an integer.
1085@end defun
1086
1087@defvar tty-erase-char
1088This variable holds the erase character that was selected
1089in the system's terminal driver, before Emacs was started.
cf0495f2
GM
1090@c FIXME? Seems untrue since 23.1. For me, it is 0.
1091@c The value is @code{nil} if Emacs is running under a window system.
b8d4c8d0
GM
1092@end defvar
1093
b8d4c8d0
GM
1094@node User Identification
1095@section User Identification
1096@cindex user identification
1097
1098@defvar init-file-user
1099This variable says which user's init files should be used by
1100Emacs---or @code{nil} if none. @code{""} stands for the user who
1101originally logged in. The value reflects command-line options such as
1102@samp{-q} or @samp{-u @var{user}}.
1103
1104Lisp packages that load files of customizations, or any other sort of
1105user profile, should obey this variable in deciding where to find it.
1106They should load the profile of the user name found in this variable.
7d3bb569
XF
1107If @code{init-file-user} is @code{nil}, meaning that the @samp{-q},
1108@samp{-Q}, or @samp{-batch} option was used, then Lisp packages should
1109not load any customization files or user profile.
b8d4c8d0
GM
1110@end defvar
1111
01f17ae2 1112@defopt user-mail-address
b8d4c8d0
GM
1113This holds the nominal email address of the user who is using Emacs.
1114Emacs normally sets this variable to a default value after reading your
1115init files, but not if you have already set it. So you can set the
1116variable to some other value in your init file if you do not
1117want to use the default value.
01f17ae2 1118@end defopt
b8d4c8d0
GM
1119
1120@defun user-login-name &optional uid
cf0495f2 1121This function returns the name under which the user is logged in.
8fc85b20 1122It uses the environment variables @env{LOGNAME} or @env{USER} if
cf0495f2
GM
1123either is set. Otherwise, the value is based on the effective
1124@acronym{UID}, not the real @acronym{UID}.
b8d4c8d0 1125
cf0495f2
GM
1126If you specify @var{uid} (a number), the result is the user name that
1127corresponds to @var{uid}, or @code{nil} if there is no such user.
b8d4c8d0
GM
1128@end defun
1129
1130@defun user-real-login-name
1131This function returns the user name corresponding to Emacs's real
cf0495f2 1132@acronym{UID}. This ignores the effective @acronym{UID}, and the
8fc85b20 1133environment variables @env{LOGNAME} and @env{USER}.
b8d4c8d0
GM
1134@end defun
1135
1136@defun user-full-name &optional uid
1137This function returns the full name of the logged-in user---or the value
8fc85b20 1138of the environment variable @env{NAME}, if that is set.
b8d4c8d0 1139
cf0495f2
GM
1140If the Emacs process's user-id does not correspond to any known user (and
1141provided @code{NAME} is not set), the result is @code{"unknown"}.
b8d4c8d0
GM
1142
1143If @var{uid} is non-@code{nil}, then it should be a number (a user-id)
1144or a string (a login name). Then @code{user-full-name} returns the full
1145name corresponding to that user-id or login name. If you specify a
1146user-id or login name that isn't defined, it returns @code{nil}.
1147@end defun
1148
1149@vindex user-full-name
1150@vindex user-real-login-name
1151@vindex user-login-name
1152 The symbols @code{user-login-name}, @code{user-real-login-name} and
1153@code{user-full-name} are variables as well as functions. The functions
1154return the same values that the variables hold. These variables allow
1155you to ``fake out'' Emacs by telling the functions what to return. The
1156variables are also useful for constructing frame titles (@pxref{Frame
1157Titles}).
1158
7d3bb569 1159@cindex UID
b8d4c8d0
GM
1160@defun user-real-uid
1161This function returns the real @acronym{UID} of the user.
09b73f08 1162The value may be floating point, in the (unlikely) event that
cf0495f2 1163the UID is too large to fit in a Lisp integer.
b8d4c8d0
GM
1164@end defun
1165
1166@defun user-uid
1167This function returns the effective @acronym{UID} of the user.
09b73f08 1168The value may be floating point.
b8d4c8d0
GM
1169@end defun
1170
7d3bb569 1171@cindex GID
97976f9f
PE
1172@defun group-gid
1173This function returns the effective @acronym{GID} of the Emacs process.
09b73f08 1174The value may be floating point.
97976f9f
PE
1175@end defun
1176
1177@defun group-real-gid
1178This function returns the real @acronym{GID} of the Emacs process.
09b73f08 1179The value may be floating point.
97976f9f
PE
1180@end defun
1181
48de8b12
CY
1182@defun system-users
1183This function returns a list of strings, listing the user names on the
1184system. If Emacs cannot retrieve this information, the return value
1185is a list containing just the value of @code{user-real-login-name}.
1186@end defun
1187
1188@cindex user groups
1189@defun system-groups
1190This function returns a list of strings, listing the names of user
1191groups on the system. If Emacs cannot retrieve this information, the
1192return value is @code{nil}.
1193@end defun
1194
1195
b8d4c8d0
GM
1196@node Time of Day
1197@section Time of Day
1198
986bd52a 1199 This section explains how to determine the current time and time
b8d4c8d0
GM
1200zone.
1201
986bd52a 1202@cindex epoch
d35af63c
PE
1203 Most of these functions represent time as a list of either four
1204integers, @code{(@var{sec-high} @var{sec-low} @var{microsec}
1205@var{picosec})}, or of three
986bd52a
CY
1206integers, @code{(@var{sec-high} @var{sec-low} @var{microsec})}, or of
1207two integers, @code{(@var{sec-high} @var{sec-low})}. The integers
1208@var{sec-high} and @var{sec-low} give the high and low bits of an
09b73f08 1209integer number of seconds. This integer,
986bd52a
CY
1210@ifnottex
1211@var{high} * 2**16 + @var{low},
1212@end ifnottex
1213@tex
1214$high*2^{16}+low$,
1215@end tex
1216is the number of seconds from the @dfn{epoch} (0:00 January 1, 1970
1217UTC) to the specified time. The third list element @var{microsec}, if
1218present, gives the number of microseconds from the start of that
1219second to the specified time.
d35af63c
PE
1220Similarly, the fourth list element @var{picosec}, if present, gives
1221the number of picoseconds from the start of that microsecond to the
1222specified time.
986bd52a 1223
72ec96fb 1224 The return value of @code{current-time} represents time using four
d35af63c
PE
1225integers, as do the timestamps in the return value of
1226@code{file-attributes} (@pxref{Definition of
1df7defd 1227file-attributes}). In function arguments, e.g., the @var{time-value}
d35af63c 1228argument to @code{current-time-string}, two-, three-, and four-integer
986bd52a
CY
1229lists are accepted. You can convert times from the list
1230representation into standard human-readable strings using
7d3bb569
XF
1231@code{current-time-string}, or to other forms using the
1232@code{decode-time} and @code{format-time-string} functions documented
1233in the following sections.
986bd52a 1234
b8d4c8d0
GM
1235@defun current-time-string &optional time-value
1236This function returns the current time and date as a human-readable
ab0fa4e4
PE
1237string. The format does not vary for the initial part of the string,
1238which contains the day of week, month, day of month, and time of day
1239in that order: the number of characters used for these fields is
1240always the same, so you can reliably
1241use @code{substring} to extract them. You should count
986bd52a 1242characters from the beginning of the string rather than from the end,
ab0fa4e4
PE
1243as the year might not have exactly four digits, and additional
1244information may some day be added at the end.
b8d4c8d0 1245
b8d4c8d0 1246The argument @var{time-value}, if given, specifies a time to format
986bd52a 1247(represented as a list of integers), instead of the current time.
b8d4c8d0
GM
1248
1249@example
1250@group
1251(current-time-string)
1252 @result{} "Wed Oct 14 22:21:05 1987"
1253@end group
1254@end example
1255@end defun
1256
b8d4c8d0 1257@defun current-time
d35af63c
PE
1258This function returns the current time, represented as a list of four
1259integers @code{(@var{sec-high} @var{sec-low} @var{microsec} @var{picosec})}.
1260These integers have trailing zeros on systems that return time with
1261lower resolutions. On all current machines @var{picosec} is a
1262multiple of 1000, but this may change as higher-resolution clocks
1263become available.
b8d4c8d0
GM
1264@end defun
1265
51a714e1
CY
1266@defun float-time &optional time-value
1267This function returns the current time as a floating-point number of
986bd52a
CY
1268seconds since the epoch. The optional argument @var{time-value}, if
1269given, specifies a time (represented as a list of integers) to convert
1270instead of the current time.
51a714e1
CY
1271
1272@emph{Warning}: Since the result is floating point, it may not be
1273exact. Do not use this function if precise time stamps are required.
1274@end defun
1275
b8d4c8d0 1276@defun current-time-zone &optional time-value
7d3bb569 1277@cindex time zone, current
b8d4c8d0
GM
1278This function returns a list describing the time zone that the user is
1279in.
1280
1281The value has the form @code{(@var{offset} @var{name})}. Here
1282@var{offset} is an integer giving the number of seconds ahead of UTC
1283(east of Greenwich). A negative value means west of Greenwich. The
1284second element, @var{name}, is a string giving the name of the time
1285zone. Both elements change when daylight saving time begins or ends;
1286if the user has specified a time zone that does not use a seasonal time
1287adjustment, then the value is constant through time.
1288
1289If the operating system doesn't supply all the information necessary to
1290compute the value, the unknown elements of the list are @code{nil}.
1291
986bd52a
CY
1292The argument @var{time-value}, if given, specifies a time (represented
1293as a list of integers) to analyze instead of the current time.
b8d4c8d0
GM
1294@end defun
1295
8fc85b20 1296The current time zone is determined by the @env{TZ} environment
51a714e1 1297variable. @xref{System Environment}. For example, you can tell Emacs
8fc85b20 1298to use universal time with @code{(setenv "TZ" "UTC0")}. If @env{TZ}
51a714e1
CY
1299is not in the environment, Emacs uses a platform-dependent default
1300time zone.
b8d4c8d0
GM
1301
1302@node Time Conversion
1303@section Time Conversion
7d3bb569 1304@cindex calendrical information
b8d4c8d0 1305
d35af63c 1306 These functions convert time values (lists of two to four integers,
986bd52a
CY
1307as explained in the previous section) into calendrical information and
1308vice versa.
b8d4c8d0 1309
986bd52a
CY
1310 Many 32-bit operating systems are limited to time values containing
131132 bits of information; these systems typically handle only the times
1df7defd 1312from 1901-12-13 20:45:52 UTC through 2038-01-19 03:14:07 UTC@.
986bd52a
CY
1313However, 64-bit and some 32-bit operating systems have larger time
1314values, and can represent times far in the past or future.
b8d4c8d0
GM
1315
1316 Time conversion functions always use the Gregorian calendar, even
1317for dates before the Gregorian calendar was introduced. Year numbers
1318count the number of years since the year 1 B.C., and do not skip zero
1319as traditional Gregorian years do; for example, the year number
1320@minus{}37 represents the Gregorian year 38 B.C@.
1321
1322@defun decode-time &optional time
1323This function converts a time value into calendrical information. If
1324you don't specify @var{time}, it decodes the current time. The return
1325value is a list of nine elements, as follows:
1326
1327@example
1328(@var{seconds} @var{minutes} @var{hour} @var{day} @var{month} @var{year} @var{dow} @var{dst} @var{zone})
1329@end example
1330
1331Here is what the elements mean:
1332
1333@table @var
1334@item seconds
1335The number of seconds past the minute, as an integer between 0 and 59.
1336On some operating systems, this is 60 for leap seconds.
1337@item minutes
1338The number of minutes past the hour, as an integer between 0 and 59.
1339@item hour
1340The hour of the day, as an integer between 0 and 23.
1341@item day
1342The day of the month, as an integer between 1 and 31.
1343@item month
1344The month of the year, as an integer between 1 and 12.
1345@item year
1346The year, an integer typically greater than 1900.
1347@item dow
1348The day of week, as an integer between 0 and 6, where 0 stands for
1349Sunday.
1350@item dst
1351@code{t} if daylight saving time is effect, otherwise @code{nil}.
1352@item zone
1353An integer indicating the time zone, as the number of seconds east of
1354Greenwich.
1355@end table
1356
1357@strong{Common Lisp Note:} Common Lisp has different meanings for
1358@var{dow} and @var{zone}.
1359@end defun
1360
1361@defun encode-time seconds minutes hour day month year &optional zone
1362This function is the inverse of @code{decode-time}. It converts seven
1363items of calendrical data into a time value. For the meanings of the
1364arguments, see the table above under @code{decode-time}.
1365
1366Year numbers less than 100 are not treated specially. If you want them
1367to stand for years above 1900, or years above 2000, you must alter them
1368yourself before you call @code{encode-time}.
1369
1370The optional argument @var{zone} defaults to the current time zone and
1371its daylight saving time rules. If specified, it can be either a list
1372(as you would get from @code{current-time-zone}), a string as in the
8fc85b20 1373@env{TZ} environment variable, @code{t} for Universal Time, or an
b8d4c8d0
GM
1374integer (as you would get from @code{decode-time}). The specified
1375zone is used without any further alteration for daylight saving time.
1376
1377If you pass more than seven arguments to @code{encode-time}, the first
1378six are used as @var{seconds} through @var{year}, the last argument is
1379used as @var{zone}, and the arguments in between are ignored. This
1380feature makes it possible to use the elements of a list returned by
1381@code{decode-time} as the arguments to @code{encode-time}, like this:
1382
1383@example
1384(apply 'encode-time (decode-time @dots{}))
1385@end example
1386
1387You can perform simple date arithmetic by using out-of-range values for
1388the @var{seconds}, @var{minutes}, @var{hour}, @var{day}, and @var{month}
1389arguments; for example, day 0 means the day preceding the given month.
1390
1391The operating system puts limits on the range of possible time values;
1392if you try to encode a time that is out of range, an error results.
1393For instance, years before 1970 do not work on some systems;
1394on others, years as early as 1901 do work.
1395@end defun
1396
1397@node Time Parsing
1398@section Parsing and Formatting Times
1399
0c93aa38
PE
1400 These functions convert time values to text in a string, and vice versa.
1401Time values are lists of two to four integers (@pxref{Time of Day}).
b8d4c8d0
GM
1402
1403@defun date-to-time string
1404This function parses the time-string @var{string} and returns the
1405corresponding time value.
1406@end defun
1407
1408@defun format-time-string format-string &optional time universal
1409This function converts @var{time} (or the current time, if @var{time} is
1410omitted) to a string according to @var{format-string}. The argument
1411@var{format-string} may contain @samp{%}-sequences which say to
1412substitute parts of the time. Here is a table of what the
1413@samp{%}-sequences mean:
1414
1415@table @samp
1416@item %a
1417This stands for the abbreviated name of the day of week.
1418@item %A
1419This stands for the full name of the day of week.
1420@item %b
1421This stands for the abbreviated name of the month.
1422@item %B
1423This stands for the full name of the month.
1424@item %c
1425This is a synonym for @samp{%x %X}.
1426@item %C
1427This has a locale-specific meaning. In the default locale (named C), it
1428is equivalent to @samp{%A, %B %e, %Y}.
1429@item %d
1430This stands for the day of month, zero-padded.
1431@item %D
1432This is a synonym for @samp{%m/%d/%y}.
1433@item %e
1434This stands for the day of month, blank-padded.
1435@item %h
1436This is a synonym for @samp{%b}.
1437@item %H
f99f1641 1438This stands for the hour (00--23).
b8d4c8d0 1439@item %I
f99f1641 1440This stands for the hour (01--12).
b8d4c8d0 1441@item %j
f99f1641 1442This stands for the day of the year (001--366).
b8d4c8d0 1443@item %k
f99f1641 1444This stands for the hour (0--23), blank padded.
b8d4c8d0 1445@item %l
f99f1641 1446This stands for the hour (1--12), blank padded.
b8d4c8d0 1447@item %m
f99f1641 1448This stands for the month (01--12).
b8d4c8d0 1449@item %M
f99f1641 1450This stands for the minute (00--59).
b8d4c8d0
GM
1451@item %n
1452This stands for a newline.
a4180391 1453@item %N
f99f1641 1454This stands for the nanoseconds (000000000--999999999). To ask for
a4180391
PE
1455fewer digits, use @samp{%3N} for milliseconds, @samp{%6N} for
1456microseconds, etc. Any excess digits are discarded, without rounding.
b8d4c8d0
GM
1457@item %p
1458This stands for @samp{AM} or @samp{PM}, as appropriate.
1459@item %r
1460This is a synonym for @samp{%I:%M:%S %p}.
1461@item %R
1462This is a synonym for @samp{%H:%M}.
1463@item %S
f99f1641 1464This stands for the seconds (00--59).
b8d4c8d0
GM
1465@item %t
1466This stands for a tab character.
1467@item %T
1468This is a synonym for @samp{%H:%M:%S}.
1469@item %U
f99f1641 1470This stands for the week of the year (01--52), assuming that weeks
b8d4c8d0
GM
1471start on Sunday.
1472@item %w
f99f1641 1473This stands for the numeric day of week (0--6). Sunday is day 0.
b8d4c8d0 1474@item %W
f99f1641 1475This stands for the week of the year (01--52), assuming that weeks
b8d4c8d0
GM
1476start on Monday.
1477@item %x
1478This has a locale-specific meaning. In the default locale (named
1479@samp{C}), it is equivalent to @samp{%D}.
1480@item %X
1481This has a locale-specific meaning. In the default locale (named
1482@samp{C}), it is equivalent to @samp{%T}.
1483@item %y
f99f1641 1484This stands for the year without century (00--99).
b8d4c8d0
GM
1485@item %Y
1486This stands for the year with century.
1487@item %Z
1488This stands for the time zone abbreviation (e.g., @samp{EST}).
1489@item %z
1490This stands for the time zone numerical offset (e.g., @samp{-0500}).
1491@end table
1492
1493You can also specify the field width and type of padding for any of
1494these @samp{%}-sequences. This works as in @code{printf}: you write
1495the field width as digits in the middle of a @samp{%}-sequences. If you
1496start the field width with @samp{0}, it means to pad with zeros. If you
1497start the field width with @samp{_}, it means to pad with spaces.
1498
1499For example, @samp{%S} specifies the number of seconds since the minute;
1500@samp{%03S} means to pad this with zeros to 3 positions, @samp{%_3S} to
1501pad with spaces to 3 positions. Plain @samp{%3S} pads with zeros,
1502because that is how @samp{%S} normally pads to two positions.
1503
1504The characters @samp{E} and @samp{O} act as modifiers when used between
1505@samp{%} and one of the letters in the table above. @samp{E} specifies
1506using the current locale's ``alternative'' version of the date and time.
1507In a Japanese locale, for example, @code{%Ex} might yield a date format
1508based on the Japanese Emperors' reigns. @samp{E} is allowed in
1509@samp{%Ec}, @samp{%EC}, @samp{%Ex}, @samp{%EX}, @samp{%Ey}, and
1510@samp{%EY}.
1511
1512@samp{O} means to use the current locale's ``alternative''
1513representation of numbers, instead of the ordinary decimal digits. This
1514is allowed with most letters, all the ones that output numbers.
1515
1516If @var{universal} is non-@code{nil}, that means to describe the time as
1517Universal Time; @code{nil} means describe it using what Emacs believes
1518is the local time zone (see @code{current-time-zone}).
1519
1520This function uses the C library function @code{strftime}
1521(@pxref{Formatting Calendar Time,,, libc, The GNU C Library Reference
1522Manual}) to do most of the work. In order to communicate with that
1523function, it first encodes its argument using the coding system
1524specified by @code{locale-coding-system} (@pxref{Locales}); after
1525@code{strftime} returns the resulting string,
1526@code{format-time-string} decodes the string using that same coding
1527system.
1528@end defun
1529
1530@defun seconds-to-time seconds
09b73f08
PE
1531This function converts @var{seconds}, the number of seconds since the
1532epoch, to a time value and returns that. To convert back, use
1533@code{float-time} (@pxref{Time of Day}).
b8d4c8d0
GM
1534@end defun
1535
53728487
EZ
1536@defun format-seconds format-string seconds
1537This function converts its argument @var{seconds} into a string of
1538years, days, hours, etc., according to @var{format-string}. The
1539argument @var{format-string} may contain @samp{%}-sequences which
1540control the conversion. Here is a table of what the
1541@samp{%}-sequences mean:
1542
1543@table @samp
1544@item %y
1545@itemx %Y
3051e4bf 1546The integer number of 365-day years.
53728487
EZ
1547@item %d
1548@itemx %D
3051e4bf 1549The integer number of days.
53728487
EZ
1550@item %h
1551@itemx %H
3051e4bf 1552The integer number of hours.
53728487
EZ
1553@item %m
1554@itemx %M
3051e4bf 1555The integer number of minutes.
53728487
EZ
1556@item %s
1557@itemx %S
3051e4bf 1558The integer number of seconds.
53728487
EZ
1559@item %z
1560Non-printing control flag. When it is used, other specifiers must be
1df7defd 1561given in the order of decreasing size, i.e., years before days, hours
53728487
EZ
1562before minutes, etc. Nothing will be produced in the result string to
1563the left of @samp{%z} until the first non-zero conversion is
1564encountered. For example, the default format used by
1565@code{emacs-uptime} (@pxref{Processor Run Time, emacs-uptime})
1566@w{@code{"%Y, %D, %H, %M, %z%S"}} means that the number of seconds
1567will always be produced, but years, days, hours, and minutes will only
1568be shown if they are non-zero.
1569@item %%
1570Produces a literal @samp{%}.
1571@end table
1572
1573Upper-case format sequences produce the units in addition to the
1574numbers, lower-case formats produce only the numbers.
1575
1576You can also specify the field width by following the @samp{%} with a
1577number; shorter numbers will be padded with blanks. An optional
1578period before the width requests zero-padding instead. For example,
1579@code{"%.3Y"} might produce @code{"004 years"}.
1580
1581@emph{Warning:} This function works only with values of @var{seconds}
1582that don't exceed @code{most-positive-fixnum} (@pxref{Integer Basics,
1583most-positive-fixnum}).
1584@end defun
1585
b8d4c8d0
GM
1586@node Processor Run Time
1587@section Processor Run time
1588@cindex processor run time
53728487
EZ
1589@cindex Emacs process run time
1590
1591 Emacs provides several functions and primitives that return time,
1592both elapsed and processor time, used by the Emacs process.
1593
106e6894 1594@deffn Command emacs-uptime &optional format
de586f99 1595@cindex uptime of Emacs
53728487
EZ
1596This function returns a string representing the Emacs
1597@dfn{uptime}---the elapsed wall-clock time this instance of Emacs is
3051e4bf
EZ
1598running. The string is formatted by @code{format-seconds} according
1599to the optional argument @var{format}. For the available format
1600descriptors, see @ref{Time Parsing, format-seconds}. If @var{format}
e2b7cebb
CY
1601is @code{nil} or omitted, it defaults to @code{"%Y, %D, %H, %M,
1602%z%S"}.
106e6894
CY
1603
1604When called interactively, it prints the uptime in the echo area.
1605@end deffn
b8d4c8d0
GM
1606
1607@defun get-internal-run-time
1608This function returns the processor run time used by Emacs as a list
d35af63c
PE
1609of four integers: @code{(@var{high} @var{low} @var{microsec}
1610@var{picosec})}, using the same format as @code{current-time}
1611(@pxref{Time of Day}).
b8d4c8d0 1612
53728487
EZ
1613Note that the time returned by this function excludes the time Emacs
1614was not using the processor, and if the Emacs process has several
1615threads, the returned value is the sum of the processor times used up
1616by all Emacs threads.
1617
b8d4c8d0 1618If the system doesn't provide a way to determine the processor run
53728487
EZ
1619time, @code{get-internal-run-time} returns the same time as
1620@code{current-time}.
1621@end defun
1622
106e6894 1623@deffn Command emacs-init-time
53728487 1624This function returns the duration of the Emacs initialization
106e6894
CY
1625(@pxref{Startup Summary}) in seconds, as a string. When called
1626interactively, it prints the duration in the echo area.
1627@end deffn
b8d4c8d0
GM
1628
1629@node Time Calculations
1630@section Time Calculations
1631
1632 These functions perform calendrical computations using time values
1633(the kind of list that @code{current-time} returns).
1634
1635@defun time-less-p t1 t2
1636This returns @code{t} if time value @var{t1} is less than time value
1637@var{t2}.
1638@end defun
1639
1640@defun time-subtract t1 t2
1641This returns the time difference @var{t1} @minus{} @var{t2} between
1642two time values, in the same format as a time value.
1643@end defun
1644
1645@defun time-add t1 t2
1646This returns the sum of two time values, one of which ought to
1647represent a time difference rather than a point in time.
1648Here is how to add a number of seconds to a time value:
1649
1650@example
1651(time-add @var{time} (seconds-to-time @var{seconds}))
1652@end example
1653@end defun
1654
1655@defun time-to-days time
1656This function returns the number of days between the beginning of year
16571 and @var{time}.
1658@end defun
1659
1660@defun time-to-day-in-year time
1661This returns the day number within the year corresponding to @var{time}.
1662@end defun
1663
1664@defun date-leap-year-p year
1665This function returns @code{t} if @var{year} is a leap year.
1666@end defun
1667
1668@node Timers
1669@section Timers for Delayed Execution
1670@cindex timer
1671
1672 You can set up a @dfn{timer} to call a function at a specified
1673future time or after a certain length of idleness.
1674
1675 Emacs cannot run timers at any arbitrary point in a Lisp program; it
1676can run them only when Emacs could accept output from a subprocess:
1677namely, while waiting or inside certain primitive functions such as
1678@code{sit-for} or @code{read-event} which @emph{can} wait. Therefore, a
1679timer's execution may be delayed if Emacs is busy. However, the time of
1680execution is very precise if Emacs is idle.
1681
1682 Emacs binds @code{inhibit-quit} to @code{t} before calling the timer
1683function, because quitting out of many timer functions can leave
1684things in an inconsistent state. This is normally unproblematical
1685because most timer functions don't do a lot of work. Indeed, for a
1686timer to call a function that takes substantial time to run is likely
1687to be annoying. If a timer function needs to allow quitting, it
1688should use @code{with-local-quit} (@pxref{Quitting}). For example, if
1689a timer function calls @code{accept-process-output} to receive output
1690from an external process, that call should be wrapped inside
1691@code{with-local-quit}, to ensure that @kbd{C-g} works if the external
1692process hangs.
1693
1694 It is usually a bad idea for timer functions to alter buffer
1695contents. When they do, they usually should call @code{undo-boundary}
1696both before and after changing the buffer, to separate the timer's
1697changes from user commands' changes and prevent a single undo entry
1698from growing to be quite large.
1699
1700 Timer functions should also avoid calling functions that cause Emacs
1701to wait, such as @code{sit-for} (@pxref{Waiting}). This can lead to
1702unpredictable effects, since other timers (or even the same timer) can
1703run while waiting. If a timer function needs to perform an action
1704after a certain time has elapsed, it can do this by scheduling a new
1705timer.
1706
1707 If a timer function calls functions that can change the match data,
1708it should save and restore the match data. @xref{Saving Match Data}.
1709
1710@deffn Command run-at-time time repeat function &rest args
1711This sets up a timer that calls the function @var{function} with
1712arguments @var{args} at time @var{time}. If @var{repeat} is a number
1713(integer or floating point), the timer is scheduled to run again every
1714@var{repeat} seconds after @var{time}. If @var{repeat} is @code{nil},
1715the timer runs only once.
1716
1717@var{time} may specify an absolute or a relative time.
1718
1719Absolute times may be specified using a string with a limited variety
1720of formats, and are taken to be times @emph{today}, even if already in
1721the past. The recognized forms are @samp{@var{xxxx}},
1722@samp{@var{x}:@var{xx}}, or @samp{@var{xx}:@var{xx}} (military time),
1723and @samp{@var{xx}am}, @samp{@var{xx}AM}, @samp{@var{xx}pm},
1724@samp{@var{xx}PM}, @samp{@var{xx}:@var{xx}am},
1725@samp{@var{xx}:@var{xx}AM}, @samp{@var{xx}:@var{xx}pm}, or
1726@samp{@var{xx}:@var{xx}PM}. A period can be used instead of a colon
1727to separate the hour and minute parts.
1728
1729To specify a relative time as a string, use numbers followed by units.
1730For example:
1731
1732@table @samp
1733@item 1 min
1734denotes 1 minute from now.
1735@item 1 min 5 sec
1736denotes 65 seconds from now.
1737@item 1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
1738denotes exactly 103 months, 123 days, and 10862 seconds from now.
1739@end table
1740
1741For relative time values, Emacs considers a month to be exactly thirty
1742days, and a year to be exactly 365.25 days.
1743
1744Not all convenient formats are strings. If @var{time} is a number
1745(integer or floating point), that specifies a relative time measured in
1746seconds. The result of @code{encode-time} can also be used to specify
1747an absolute value for @var{time}.
1748
1749In most cases, @var{repeat} has no effect on when @emph{first} call
1750takes place---@var{time} alone specifies that. There is one exception:
1751if @var{time} is @code{t}, then the timer runs whenever the time is a
1752multiple of @var{repeat} seconds after the epoch. This is useful for
1753functions like @code{display-time}.
1754
1755The function @code{run-at-time} returns a timer value that identifies
1756the particular scheduled future action. You can use this value to call
1757@code{cancel-timer} (see below).
1758@end deffn
1759
1760 A repeating timer nominally ought to run every @var{repeat} seconds,
1761but remember that any invocation of a timer can be late. Lateness of
1762one repetition has no effect on the scheduled time of the next
1763repetition. For instance, if Emacs is busy computing for long enough
1764to cover three scheduled repetitions of the timer, and then starts to
1765wait, it will immediately call the timer function three times in
1766immediate succession (presuming no other timers trigger before or
1767between them). If you want a timer to run again no less than @var{n}
1768seconds after the last invocation, don't use the @var{repeat} argument.
1769Instead, the timer function should explicitly reschedule the timer.
1770
78f3273a 1771@defopt timer-max-repeats
b8d4c8d0
GM
1772This variable's value specifies the maximum number of times to repeat
1773calling a timer function in a row, when many previously scheduled
1774calls were unavoidably delayed.
78f3273a 1775@end defopt
b8d4c8d0
GM
1776
1777@defmac with-timeout (seconds timeout-forms@dots{}) body@dots{}
1778Execute @var{body}, but give up after @var{seconds} seconds. If
1779@var{body} finishes before the time is up, @code{with-timeout} returns
1780the value of the last form in @var{body}. If, however, the execution of
1781@var{body} is cut short by the timeout, then @code{with-timeout}
1782executes all the @var{timeout-forms} and returns the value of the last
1783of them.
1784
1785This macro works by setting a timer to run after @var{seconds} seconds. If
1786@var{body} finishes before that time, it cancels the timer. If the
1787timer actually runs, it terminates execution of @var{body}, then
1788executes @var{timeout-forms}.
1789
1790Since timers can run within a Lisp program only when the program calls a
1791primitive that can wait, @code{with-timeout} cannot stop executing
1792@var{body} while it is in the midst of a computation---only when it
1793calls one of those primitives. So use @code{with-timeout} only with a
1794@var{body} that waits for input, not one that does a long computation.
1795@end defmac
1796
1797 The function @code{y-or-n-p-with-timeout} provides a simple way to use
1798a timer to avoid waiting too long for an answer. @xref{Yes-or-No
1799Queries}.
1800
1801@defun cancel-timer timer
1802This cancels the requested action for @var{timer}, which should be a
1803timer---usually, one previously returned by @code{run-at-time} or
1804@code{run-with-idle-timer}. This cancels the effect of that call to
1805one of these functions; the arrival of the specified time will not
1806cause anything special to happen.
1807@end defun
1808
1809@node Idle Timers
1810@section Idle Timers
1811
1812 Here is how to set up a timer that runs when Emacs is idle for a
1813certain length of time. Aside from how to set them up, idle timers
1814work just like ordinary timers.
1815
1816@deffn Command run-with-idle-timer secs repeat function &rest args
d15aac68 1817Set up a timer which runs the next time Emacs is idle for @var{secs}
09b73f08
PE
1818seconds. The value of @var{secs} may be a number or a value of the type
1819returned by @code{current-idle-time}.
b8d4c8d0
GM
1820
1821If @var{repeat} is @code{nil}, the timer runs just once, the first time
1822Emacs remains idle for a long enough time. More often @var{repeat} is
1823non-@code{nil}, which means to run the timer @emph{each time} Emacs
1824remains idle for @var{secs} seconds.
1825
1826The function @code{run-with-idle-timer} returns a timer value which you
1827can use in calling @code{cancel-timer} (@pxref{Timers}).
1828@end deffn
1829
1830@cindex idleness
d15aac68
CY
1831 Emacs becomes @dfn{idle} when it starts waiting for user input, and
1832it remains idle until the user provides some input. If a timer is set
1833for five seconds of idleness, it runs approximately five seconds after
1834Emacs first becomes idle. Even if @var{repeat} is non-@code{nil},
1835this timer will not run again as long as Emacs remains idle, because
1836the duration of idleness will continue to increase and will not go
1837down to five seconds again.
b8d4c8d0
GM
1838
1839 Emacs can do various things while idle: garbage collect, autosave or
1840handle data from a subprocess. But these interludes during idleness do
1841not interfere with idle timers, because they do not reset the clock of
1842idleness to zero. An idle timer set for 600 seconds will run when ten
1843minutes have elapsed since the last user command was finished, even if
1844subprocess output has been accepted thousands of times within those ten
1845minutes, and even if there have been garbage collections and autosaves.
1846
1847 When the user supplies input, Emacs becomes non-idle while executing the
1848input. Then it becomes idle again, and all the idle timers that are
1849set up to repeat will subsequently run another time, one by one.
1850
48de8b12
CY
1851 Do not write an idle timer function containing a loop which does a
1852certain amount of processing each time around, and exits when
1853@code{(input-pending-p)} is non-@code{nil}. This approach seems very
1854natural but has two problems:
1855
1856@itemize
1857@item
1858It blocks out all process output (since Emacs accepts process output
1859only while waiting).
1860
1861@item
1862It blocks out any idle timers that ought to run during that time.
1863@end itemize
1864
1865@noindent
1866Similarly, do not write an idle timer function that sets up another
1867idle timer (including the same idle timer) with @var{secs} argument
1868less than or equal to the current idleness time. Such a timer will
1869run almost immediately, and continue running again and again, instead
1870of waiting for the next time Emacs becomes idle. The correct approach
1871is to reschedule with an appropriate increment of the current value of
1872the idleness time, as described below.
1873
b8d4c8d0 1874@defun current-idle-time
17bec671 1875If Emacs is idle, this function returns the length of time Emacs has
d35af63c
PE
1876been idle, as a list of four integers: @code{(@var{sec-high}
1877@var{sec-low} @var{microsec} @var{picosec})}, using the same format as
1878@code{current-time} (@pxref{Time of Day}).
b8d4c8d0 1879
17bec671
RS
1880When Emacs is not idle, @code{current-idle-time} returns @code{nil}.
1881This is a convenient way to test whether Emacs is idle.
48de8b12 1882@end defun
17bec671 1883
48de8b12
CY
1884 The main use of @code{current-idle-time} is when an idle timer
1885function wants to ``take a break'' for a while. It can set up another
1886idle timer to call the same function again, after a few seconds more
1887idleness. Here's an example:
b8d4c8d0 1888
48de8b12
CY
1889@example
1890(defvar my-resume-timer nil
1891 "Timer for `my-timer-function' to reschedule itself, or nil.")
b8d4c8d0 1892
48de8b12
CY
1893(defun my-timer-function ()
1894 ;; @r{If the user types a command while @code{my-resume-timer}}
b8d4c8d0 1895 ;; @r{is active, the next time this function is called from}
48de8b12
CY
1896 ;; @r{its main idle timer, deactivate @code{my-resume-timer}.}
1897 (when my-resume-timer
1898 (cancel-timer my-resume-timer))
b8d4c8d0
GM
1899 ...@var{do the work for a while}...
1900 (when @var{taking-a-break}
48de8b12 1901 (setq my-resume-timer
b8d4c8d0
GM
1902 (run-with-idle-timer
1903 ;; Compute an idle time @var{break-length}
1904 ;; more than the current value.
1905 (time-add (current-idle-time)
1906 (seconds-to-time @var{break-length}))
1907 nil
48de8b12
CY
1908 'my-timer-function))))
1909@end example
b8d4c8d0
GM
1910
1911@node Terminal Input
1912@section Terminal Input
1913@cindex terminal input
1914
1915 This section describes functions and variables for recording or
1916manipulating terminal input. See @ref{Display}, for related
1917functions.
1918
1919@menu
d24880de
GM
1920* Input Modes:: Options for how input is processed.
1921* Recording Input:: Saving histories of recent or all input events.
b8d4c8d0
GM
1922@end menu
1923
1924@node Input Modes
1925@subsection Input Modes
1926@cindex input modes
1927@cindex terminal input modes
1928
1929@defun set-input-mode interrupt flow meta &optional quit-char
1930This function sets the mode for reading keyboard input. If
de586f99
XF
1931@var{interrupt} is non-@code{nil}, then Emacs uses input interrupts.
1932If it is @code{nil}, then it uses @sc{cbreak} mode. The default
1933setting is system-dependent. Some systems always use @sc{cbreak} mode
1934regardless of what is specified.
b8d4c8d0
GM
1935
1936When Emacs communicates directly with X, it ignores this argument and
1937uses interrupts if that is the way it knows how to communicate.
1938
1939If @var{flow} is non-@code{nil}, then Emacs uses @sc{xon/xoff}
1940(@kbd{C-q}, @kbd{C-s}) flow control for output to the terminal. This
1941has no effect except in @sc{cbreak} mode.
1942
b8d4c8d0
GM
1943The argument @var{meta} controls support for input character codes
1944above 127. If @var{meta} is @code{t}, Emacs converts characters with
1945the 8th bit set into Meta characters. If @var{meta} is @code{nil},
1946Emacs disregards the 8th bit; this is necessary when the terminal uses
1947it as a parity bit. If @var{meta} is neither @code{t} nor @code{nil},
1948Emacs uses all 8 bits of input unchanged. This is good for terminals
1949that use 8-bit character sets.
1950
b8d4c8d0
GM
1951If @var{quit-char} is non-@code{nil}, it specifies the character to
1952use for quitting. Normally this character is @kbd{C-g}.
1953@xref{Quitting}.
1954@end defun
1955
1956The @code{current-input-mode} function returns the input mode settings
1957Emacs is currently using.
1958
b8d4c8d0
GM
1959@defun current-input-mode
1960This function returns the current mode for reading keyboard input. It
1961returns a list, corresponding to the arguments of @code{set-input-mode},
1962of the form @code{(@var{interrupt} @var{flow} @var{meta} @var{quit})} in
1963which:
1964@table @var
1965@item interrupt
1966is non-@code{nil} when Emacs is using interrupt-driven input. If
1967@code{nil}, Emacs is using @sc{cbreak} mode.
1968@item flow
1969is non-@code{nil} if Emacs uses @sc{xon/xoff} (@kbd{C-q}, @kbd{C-s})
1970flow control for output to the terminal. This value is meaningful only
1971when @var{interrupt} is @code{nil}.
1972@item meta
1973is @code{t} if Emacs treats the eighth bit of input characters as
1974the meta bit; @code{nil} means Emacs clears the eighth bit of every
1975input character; any other value means Emacs uses all eight bits as the
1976basic character code.
1977@item quit
1978is the character Emacs currently uses for quitting, usually @kbd{C-g}.
1979@end table
1980@end defun
1981
1982@node Recording Input
1983@subsection Recording Input
1984@cindex recording input
1985
1986@defun recent-keys
1987This function returns a vector containing the last 300 input events from
1988the keyboard or mouse. All input events are included, whether or not
1989they were used as parts of key sequences. Thus, you always get the last
f961c7d8 1990300 input events, not counting events generated by keyboard macros.
b8d4c8d0
GM
1991(These are excluded because they are less interesting for debugging; it
1992should be enough to see the events that invoked the macros.)
1993
1994A call to @code{clear-this-command-keys} (@pxref{Command Loop Info})
1995causes this function to return an empty vector immediately afterward.
1996@end defun
1997
1998@deffn Command open-dribble-file filename
1999@cindex dribble file
2000This function opens a @dfn{dribble file} named @var{filename}. When a
2001dribble file is open, each input event from the keyboard or mouse (but
2002not those from keyboard macros) is written in that file. A
2003non-character event is expressed using its printed representation
50ea0f87
GM
2004surrounded by @samp{<@dots{}>}. Be aware that sensitive information
2005(such as passwords) may end up recorded in the dribble file.
b8d4c8d0
GM
2006
2007You close the dribble file by calling this function with an argument
2008of @code{nil}.
b8d4c8d0
GM
2009@end deffn
2010
2011 See also the @code{open-termscript} function (@pxref{Terminal Output}).
2012
2013@node Terminal Output
2014@section Terminal Output
2015@cindex terminal output
2016
2017 The terminal output functions send output to a text terminal, or keep
2018track of output sent to the terminal. The variable @code{baud-rate}
2019tells you what Emacs thinks is the output speed of the terminal.
2020
01f17ae2 2021@defopt baud-rate
b8d4c8d0
GM
2022This variable's value is the output speed of the terminal, as far as
2023Emacs knows. Setting this variable does not change the speed of actual
2024data transmission, but the value is used for calculations such as
2025padding.
2026
2027 It also affects decisions about whether to scroll part of the
2028screen or repaint on text terminals. @xref{Forcing Redisplay},
2029for the corresponding functionality on graphical terminals.
2030
2031The value is measured in baud.
01f17ae2 2032@end defopt
b8d4c8d0
GM
2033
2034 If you are running across a network, and different parts of the
2035network work at different baud rates, the value returned by Emacs may be
2036different from the value used by your local terminal. Some network
2037protocols communicate the local terminal speed to the remote machine, so
2038that Emacs and other programs can get the proper value, but others do
2039not. If Emacs has the wrong value, it makes decisions that are less
2040than optimal. To fix the problem, set @code{baud-rate}.
2041
106e6894
CY
2042@defun send-string-to-terminal string &optional terminal
2043This function sends @var{string} to @var{terminal} without alteration.
b8d4c8d0 2044Control characters in @var{string} have terminal-dependent effects.
106e6894
CY
2045This function operates only on text terminals. @var{terminal} may be
2046a terminal object, a frame, or @code{nil} for the selected frame's
f804f446 2047terminal. In batch mode, @var{string} is sent to @code{stdout} when
f58a7c7e 2048@var{terminal} is @code{nil}.
b8d4c8d0
GM
2049
2050One use of this function is to define function keys on terminals that
2051have downloadable function key definitions. For example, this is how (on
2052certain terminals) to define function key 4 to move forward four
2053characters (by transmitting the characters @kbd{C-u C-f} to the
2054computer):
2055
2056@example
2057@group
2058(send-string-to-terminal "\eF4\^U\^F")
2059 @result{} nil
2060@end group
2061@end example
2062@end defun
2063
2064@deffn Command open-termscript filename
2065@cindex termscript file
2066This function is used to open a @dfn{termscript file} that will record
2067all the characters sent by Emacs to the terminal. It returns
2068@code{nil}. Termscript files are useful for investigating problems
2069where Emacs garbles the screen, problems that are due to incorrect
2070Termcap entries or to undesirable settings of terminal options more
2071often than to actual Emacs bugs. Once you are certain which characters
2072were actually output, you can determine reliably whether they correspond
2073to the Termcap specifications in use.
2074
b8d4c8d0
GM
2075@example
2076@group
2077(open-termscript "../junk/termscript")
2078 @result{} nil
2079@end group
2080@end example
de586f99
XF
2081
2082You close the termscript file by calling this function with an
2083argument of @code{nil}.
2084
2085See also @code{open-dribble-file} in @ref{Recording Input}.
b8d4c8d0
GM
2086@end deffn
2087
2088@node Sound Output
2089@section Sound Output
2090@cindex sound
2091
2092 To play sound using Emacs, use the function @code{play-sound}. Only
986bd52a
CY
2093certain systems are supported; if you call @code{play-sound} on a
2094system which cannot really do the job, it gives an error.
b8d4c8d0 2095
de586f99 2096@c FIXME: Add indexes for Au and WAV? --xfq
b8d4c8d0
GM
2097 The sound must be stored as a file in RIFF-WAVE format (@samp{.wav})
2098or Sun Audio format (@samp{.au}).
2099
2100@defun play-sound sound
2101This function plays a specified sound. The argument, @var{sound}, has
2102the form @code{(sound @var{properties}...)}, where the @var{properties}
2103consist of alternating keywords (particular symbols recognized
2104specially) and values corresponding to them.
2105
2106Here is a table of the keywords that are currently meaningful in
2107@var{sound}, and their meanings:
2108
2109@table @code
2110@item :file @var{file}
2111This specifies the file containing the sound to play.
2112If the file name is not absolute, it is expanded against
2113the directory @code{data-directory}.
2114
2115@item :data @var{data}
2116This specifies the sound to play without need to refer to a file. The
2117value, @var{data}, should be a string containing the same bytes as a
2118sound file. We recommend using a unibyte string.
2119
2120@item :volume @var{volume}
2121This specifies how loud to play the sound. It should be a number in the
2122range of 0 to 1. The default is to use whatever volume has been
2123specified before.
2124
2125@item :device @var{device}
2126This specifies the system device on which to play the sound, as a
2127string. The default device is system-dependent.
2128@end table
2129
2130Before actually playing the sound, @code{play-sound}
2131calls the functions in the list @code{play-sound-functions}.
2132Each function is called with one argument, @var{sound}.
2133@end defun
2134
0b128ac4 2135@deffn Command play-sound-file file &optional volume device
b8d4c8d0
GM
2136This function is an alternative interface to playing a sound @var{file}
2137specifying an optional @var{volume} and @var{device}.
0b128ac4 2138@end deffn
b8d4c8d0
GM
2139
2140@defvar play-sound-functions
2141A list of functions to be called before playing a sound. Each function
2142is called with one argument, a property list that describes the sound.
2143@end defvar
2144
2145@node X11 Keysyms
2146@section Operating on X11 Keysyms
2147@cindex X11 keysyms
2148
2149To define system-specific X11 keysyms, set the variable
2150@code{system-key-alist}.
2151
2152@defvar system-key-alist
2153This variable's value should be an alist with one element for each
2154system-specific keysym. Each element has the form @code{(@var{code}
2155. @var{symbol})}, where @var{code} is the numeric keysym code (not
2156including the ``vendor specific'' bit,
2157@ifnottex
09b73f08 2158@minus{}2**28),
b8d4c8d0
GM
2159@end ifnottex
2160@tex
2161$-2^{28}$),
2162@end tex
2163and @var{symbol} is the name for the function key.
2164
2165For example @code{(168 . mute-acute)} defines a system-specific key (used
2166by HP X servers) whose numeric code is
2167@ifnottex
09b73f08 2168@minus{}2**28
b8d4c8d0
GM
2169@end ifnottex
2170@tex
2171$-2^{28}$
2172@end tex
2173+ 168.
2174
2175It is not crucial to exclude from the alist the keysyms of other X
2176servers; those do no harm, as long as they don't conflict with the ones
2177used by the X server actually in use.
2178
2179The variable is always local to the current terminal, and cannot be
3ec61d4e 2180buffer-local. @xref{Multiple Terminals}.
b8d4c8d0
GM
2181@end defvar
2182
2183You can specify which keysyms Emacs should use for the Meta, Alt, Hyper, and Super modifiers by setting these variables:
2184
2185@defvar x-alt-keysym
2186@defvarx x-meta-keysym
2187@defvarx x-hyper-keysym
2188@defvarx x-super-keysym
2189The name of the keysym that should stand for the Alt modifier
2190(respectively, for Meta, Hyper, and Super). For example, here is
2191how to swap the Meta and Alt modifiers within Emacs:
2192@lisp
2193(setq x-alt-keysym 'meta)
2194(setq x-meta-keysym 'alt)
2195@end lisp
2196@end defvar
2197
2198@node Batch Mode
2199@section Batch Mode
2200@cindex batch mode
2201
2202 The command-line option @samp{-batch} causes Emacs to run
2203noninteractively. In this mode, Emacs does not read commands from the
2204terminal, it does not alter the terminal modes, and it does not expect
2205to be outputting to an erasable screen. The idea is that you specify
2206Lisp programs to run; when they are finished, Emacs should exit. The
2207way to specify the programs to run is with @samp{-l @var{file}}, which
2208loads the library named @var{file}, or @samp{-f @var{function}}, which
2209calls @var{function} with no arguments, or @samp{--eval @var{form}}.
2210
2211 Any Lisp program output that would normally go to the echo area,
2212either using @code{message}, or using @code{prin1}, etc., with @code{t}
2213as the stream, goes instead to Emacs's standard error descriptor when
2214in batch mode. Similarly, input that would normally come from the
2215minibuffer is read from the standard input descriptor.
2216Thus, Emacs behaves much like a noninteractive
2217application program. (The echo area output that Emacs itself normally
2218generates, such as command echoing, is suppressed entirely.)
2219
2220@defvar noninteractive
2221This variable is non-@code{nil} when Emacs is running in batch mode.
2222@end defvar
2223
2224@node Session Management
2225@section Session Management
2226@cindex session manager
2227
dca019f8
CY
2228Emacs supports the X Session Management Protocol, which is used to
2229suspend and restart applications. In the X Window System, a program
2230called the @dfn{session manager} is responsible for keeping track of
2231the applications that are running. When the X server shuts down, the
2232session manager asks applications to save their state, and delays the
2233actual shutdown until they respond. An application can also cancel
2234the shutdown.
b8d4c8d0
GM
2235
2236When the session manager restarts a suspended session, it directs
2237these applications to individually reload their saved state. It does
2238this by specifying a special command-line argument that says what
2239saved session to restore. For Emacs, this argument is @samp{--smid
2240@var{session}}.
2241
2242@defvar emacs-save-session-functions
4ae3802f 2243@cindex session file
dca019f8
CY
2244Emacs supports saving state via a hook called
2245@code{emacs-save-session-functions}. Emacs runs this hook when the
2246session manager tells it that the window system is shutting down. The
2247functions are called with no arguments, and with the current buffer
2248set to a temporary buffer. Each function can use @code{insert} to add
2249Lisp code to this buffer. At the end, Emacs saves the buffer in a
2250file, called the @dfn{session file}.
2251
2252@findex emacs-session-restore
2253Subsequently, when the session manager restarts Emacs, it loads the
2254session file automatically (@pxref{Loading}). This is performed by a
2255function named @code{emacs-session-restore}, which is called during
2256startup. @xref{Startup Summary}.
b8d4c8d0
GM
2257
2258If a function in @code{emacs-save-session-functions} returns
2259non-@code{nil}, Emacs tells the session manager to cancel the
2260shutdown.
2261@end defvar
2262
2bb0eca1 2263Here is an example that just inserts some text into @file{*scratch*} when
b8d4c8d0
GM
2264Emacs is restarted by the session manager.
2265
2266@example
2267@group
2268(add-hook 'emacs-save-session-functions 'save-yourself-test)
2269@end group
2270
2271@group
2272(defun save-yourself-test ()
c57008f6 2273 (insert "(save-current-buffer
b8d4c8d0
GM
2274 (switch-to-buffer \"*scratch*\")
2275 (insert \"I am restored\"))")
2276 nil)
2277@end group
2278@end example
2279
32813ea7 2280@node Desktop Notifications
9ff687e1
MA
2281@section Desktop Notifications
2282@cindex desktop notifications
4ae3802f 2283@cindex notifications, on desktop
9ff687e1 2284
97f4a299 2285Emacs is able to send @dfn{notifications} on systems that support the
a7972adf
CY
2286freedesktop.org Desktop Notifications Specification. In order to use
2287this functionality, Emacs must have been compiled with D-Bus support,
4ae3802f
XF
2288and the @code{notifications} library must be loaded. @xref{Top, ,
2289D-Bus,dbus,D-Bus integration in Emacs}.
9ff687e1
MA
2290
2291@defun notifications-notify &rest params
a7972adf
CY
2292This function sends a notification to the desktop via D-Bus,
2293consisting of the parameters specified by the @var{params} arguments.
2294These arguments should consist of alternating keyword and value pairs.
2295The supported keywords and values are as follows:
9ff687e1
MA
2296
2297@table @code
a43d02f0
MA
2298@item :bus @var{bus}
2299The D-Bus bus. This argument is needed only if a bus other than
2300@code{:session} shall be used.
2301
9ff687e1
MA
2302@item :title @var{title}
2303The notification title.
2304
2305@item :body @var{text}
2306The notification body text. Depending on the implementation of the
2307notification server, the text could contain HTML markups, like
a43d02f0
MA
2308@samp{"<b>bold text</b>"}, hyperlinks, or images. Special HTML
2309characters must be encoded, as @samp{"Contact
2310&lt;postmaster@@localhost&gt;!"}.
9ff687e1
MA
2311
2312@item :app-name @var{name}
97f4a299 2313The name of the application sending the notification. The default is
9ff687e1
MA
2314@code{notifications-application-name}.
2315
2316@item :replaces-id @var{id}
2317The notification @var{id} that this notification replaces. @var{id}
2318must be the result of a previous @code{notifications-notify} call.
2319
2320@item :app-icon @var{icon-file}
2321The file name of the notification icon. If set to @code{nil}, no icon
97f4a299 2322is displayed. The default is @code{notifications-application-icon}.
9ff687e1
MA
2323
2324@item :actions (@var{key} @var{title} @var{key} @var{title} ...)
2325A list of actions to be applied. @var{key} and @var{title} are both
2326strings. The default action (usually invoked by clicking the
2327notification) should have a key named @samp{"default"}. The title can
2328be anything, though implementations are free not to display it.
2329
2330@item :timeout @var{timeout}
2331The timeout time in milliseconds since the display of the notification
09b73f08 2332at which the notification should automatically close. If @minus{}1, the
9ff687e1
MA
2333notification's expiration time is dependent on the notification
2334server's settings, and may vary for the type of notification. If 0,
09b73f08 2335the notification never expires. Default value is @minus{}1.
9ff687e1
MA
2336
2337@item :urgency @var{urgency}
97f4a299 2338The urgency level. It can be @code{low}, @code{normal}, or @code{critical}.
9ff687e1 2339
ab0fa4e4 2340@item :action-items
e43042fe
MA
2341When this keyword is given, the @var{title} string of the actions is
2342interpreted as icon name.
2343
9ff687e1 2344@item :category @var{category}
a43d02f0
MA
2345The type of notification this is, a string. See the
2346@uref{http://developer.gnome.org/notification-spec/#categories,
2347Desktop Notifications Specification} for a list of standard
2348categories.
9ff687e1
MA
2349
2350@item :desktop-entry @var{filename}
2351This specifies the name of the desktop filename representing the
2352calling program, like @samp{"emacs"}.
2353
2354@item :image-data (@var{width} @var{height} @var{rowstride} @var{has-alpha} @var{bits} @var{channels} @var{data})
97f4a299
GM
2355This is a raw data image format that describes the width, height,
2356rowstride, whether there is an alpha channel, bits per sample,
2357channels and image data, respectively.
9ff687e1
MA
2358
2359@item :image-path @var{path}
2360This is represented either as a URI (@samp{file://} is the only URI
2361schema supported right now) or a name in a freedesktop.org-compliant
84f4a531 2362icon theme from @samp{$XDG_DATA_DIRS/icons}.
9ff687e1
MA
2363
2364@item :sound-file @var{filename}
2365The path to a sound file to play when the notification pops up.
2366
2367@item :sound-name @var{name}
2368A themable named sound from the freedesktop.org sound naming
2369specification from @samp{$XDG_DATA_DIRS/sounds}, to play when the
2370notification pops up. Similar to the icon name, only for sounds. An
2371example would be @samp{"message-new-instant"}.
2372
2373@item :suppress-sound
2374Causes the server to suppress playing any sounds, if it has that
2375ability.
2376
e43042fe
MA
2377@item :resident
2378When set the server will not automatically remove the notification
2379when an action has been invoked. The notification will remain resident
2380in the server until it is explicitly removed by the user or by the
2381sender. This hint is likely only useful when the server has the
2382@code{:persistence} capability.
2383
2384@item :transient
2385When set the server will treat the notification as transient and
2386by-pass the server's persistence capability, if it should exist.
2387
9ff687e1
MA
2388@item :x @var{position}
2389@itemx :y @var{position}
97f4a299 2390Specifies the X, Y location on the screen that the
9ff687e1
MA
2391notification should point to. Both arguments must be used together.
2392
2393@item :on-action @var{function}
2394Function to call when an action is invoked. The notification @var{id}
2395and the @var{key} of the action are passed as arguments to the
2396function.
2397
2398@item :on-close @var{function}
2399Function to call when the notification has been closed by timeout or
2400by the user. The function receive the notification @var{id} and the closing
2401@var{reason} as arguments:
2402
2403@itemize
2404@item @code{expired} if the notification has expired
2405@item @code{dismissed} if the notification was dismissed by the user
2406@item @code{close-notification} if the notification was closed by a call to
2407@code{notifications-close-notification}
2408@item @code{undefined} if the notification server hasn't provided a reason
2409@end itemize
2410@end table
2411
b613912b
MA
2412Which parameters are accepted by the notification server can be
2413checked via @code{notifications-get-capabilities}.
2414
9ff687e1
MA
2415This function returns a notification id, an integer, which can be used
2416to manipulate the notification item with
2417@code{notifications-close-notification} or the @code{:replaces-id}
97f4a299 2418argument of another @code{notifications-notify} call. For example:
9ff687e1
MA
2419
2420@example
2421@group
2422(defun my-on-action-function (id key)
2423 (message "Message %d, key \"%s\" pressed" id key))
2424 @result{} my-on-action-function
2425@end group
2426
2427@group
2428(defun my-on-close-function (id reason)
2429 (message "Message %d, closed due to \"%s\"" id reason))
2430 @result{} my-on-close-function
2431@end group
2432
2433@group
2434(notifications-notify
2435 :title "Title"
2436 :body "This is <b>important</b>."
2437 :actions '("Confirm" "I agree" "Refuse" "I disagree")
2438 :on-action 'my-on-action-function
2439 :on-close 'my-on-close-function)
2440 @result{} 22
2441@end group
2442
2443@group
2444A message window opens on the desktop. Press "I agree"
2445 @result{} Message 22, key "Confirm" pressed
2446 Message 22, closed due to "dismissed"
2447@end group
2448@end example
2449@end defun
2450
a43d02f0 2451@defun notifications-close-notification id &optional bus
97f4a299 2452This function closes a notification with identifier @var{id}.
a43d02f0
MA
2453@var{bus} can be a string denoting a D-Bus connection, the default is
2454@code{:session}.
9ff687e1
MA
2455@end defun
2456
a43d02f0
MA
2457@defun notifications-get-capabilities &optional bus
2458Returns the capabilities of the notification server, a list of
2459symbols. @var{bus} can be a string denoting a D-Bus connection, the
2460default is @code{:session}. The following capabilities can be
2461expected:
b613912b 2462
e43042fe
MA
2463@table @code
2464@item :actions
b613912b
MA
2465The server will provide the specified actions to the user.
2466
e43042fe 2467@item :body
b613912b
MA
2468Supports body text.
2469
e43042fe 2470@item :body-hyperlinks
b613912b
MA
2471The server supports hyperlinks in the notifications.
2472
e43042fe 2473@item :body-images
b613912b
MA
2474The server supports images in the notifications.
2475
e43042fe 2476@item :body-markup
b613912b
MA
2477Supports markup in the body text.
2478
e43042fe 2479@item :icon-multi
b613912b
MA
2480The server will render an animation of all the frames in a given image
2481array.
2482
e43042fe 2483@item :icon-static
b613912b 2484Supports display of exactly 1 frame of any given image array. This
e43042fe
MA
2485value is mutually exclusive with @code{:icon-multi}.
2486
2487@item :persistence
2488The server supports persistence of notifications.
b613912b 2489
e43042fe 2490@item :sound
b613912b
MA
2491The server supports sounds on notifications.
2492@end table
2493
e43042fe
MA
2494Further vendor-specific caps start with @code{:x-vendor}, like
2495@code{:x-gnome-foo-cap}.
b613912b
MA
2496@end defun
2497
a43d02f0
MA
2498@defun notifications-get-server-information &optional bus
2499Return information on the notification server, a list of strings.
2500@var{bus} can be a string denoting a D-Bus connection, the default is
2501@code{:session}. The returned list is @code{(@var{name} @var{vendor}
2502@var{version} @var{spec-version})}.
2503
2504@table @var
2505@item name
2506The product name of the server.
2507
2508@item vendor
2509The vendor name. For example, @samp{"KDE"}, @samp{"GNOME"}.
2510
2511@item version
2512The server's version number.
2513
2514@item spec-version
2515The specification version the server is compliant with.
2516@end table
2517
2518If @var{SPEC_VERSION} is @code{nil}, the server supports a
2519specification prior to @samp{"1.0"}.
2520@end defun
2521
32813ea7
MA
2522@node File Notifications
2523@section Notifications on File Changes
2524@cindex file notifications
a6e3a5d5 2525@cindex watch, for filesystem events
32813ea7
MA
2526
2527Several operating systems support watching of filesystems for changes
2528of files. If configured properly, Emacs links a respective library
2529like @file{gfilenotify}, @file{inotify}, or @file{w32notify}
2530statically. These libraries enable watching of filesystems on the
2531local machine.
2532
2533It is also possible to watch filesystems on remote machines,
2534@pxref{Remote Files,, Remote Files, emacs, The GNU Emacs Manual}
2535This does not depend on one of the libraries linked to Emacs.
2536
2537Since all these libraries emit different events on notified file
2538changes, there is the Emacs library @code{filenotify} which provides a
2539unique interface.
2540
32813ea7
MA
2541@defun file-notify-add-watch file flags callback
2542Add a watch for filesystem events pertaining to @var{file}. This
2543arranges for filesystem events pertaining to @var{file} to be reported
2544to Emacs.
2545
2546The returned value is a descriptor for the added watch. Its type
2547depends on the underlying library, it cannot be assumed to be an
2548integer as in the example below. It should be used for comparison by
2549@code{equal} only.
2550
2551If the @var{file} cannot be watched for some reason, this function
2552signals a @code{file-notify-error} error.
2553
95e6e62b
MA
2554Sometimes, mounted filesystems cannot be watched for file changes.
2555This is not detected by this function, a non-@code{nil} return value
2556does not guarantee that changes on @var{file} will be notified.
2557
32813ea7
MA
2558@var{flags} is a list of conditions to set what will be watched for.
2559It can include the following symbols:
2560
2561@table @code
2562@item change
2563watch for file changes
2564@item attribute-change
2565watch for file attribute changes, like permissions or modification
2566time
2567@end table
2568
2569If @var{file} is a directory, changes for all files in that directory
2570will be notified. This does not work recursively.
2571
2572When any event happens, Emacs will call the @var{callback} function
2573passing it a single argument @var{event}, which is of the form
2574
2575@lisp
2576(@var{descriptor} @var{action} @var{file} [@var{file1}])
2577@end lisp
2578
2579@var{descriptor} is the same object as the one returned by this
2580function. @var{action} is the description of the event. It could be
2581any one of the following symbols:
2582
2583@table @code
2584@item created
2585@var{file} was created
2586@item deleted
2587@var{file} was deleted
2588@item changed
2589@var{file} has changed
2590@item renamed
2591@var{file} has been renamed to @var{file1}
2592@item attribute-changed
2593a @var{file} attribute was changed
2594@end table
2595
2596@var{file} and @var{file1} are the name of the file(s) whose event is
2597being reported. For example:
2598
2599@example
2600@group
2601(require 'filenotify)
2602 @result{} filenotify
2603@end group
2604
2605@group
2606(defun my-notify-callback (event)
2607 (message "Event %S" event))
2608 @result{} my-notify-callback
2609@end group
2610
2611@group
2612(file-notify-add-watch
2613 "/tmp" '(change attribute-change) 'my-notify-callback)
2614 @result{} 35025468
2615@end group
2616
2617@group
2618(write-region "foo" nil "/tmp/foo")
2619 @result{} Event (35025468 created "/tmp/.#foo")
2620 Event (35025468 created "/tmp/foo")
2621 Event (35025468 changed "/tmp/foo")
2622 Event (35025468 deleted "/tmp/.#foo")
2623@end group
2624
2625@group
2626(write-region "bla" nil "/tmp/foo")
2627 @result{} Event (35025468 created "/tmp/.#foo")
2628 Event (35025468 changed "/tmp/foo") [2 times]
2629 Event (35025468 deleted "/tmp/.#foo")
2630@end group
2631
2632@group
2633(set-file-modes "/tmp/foo" (default-file-modes))
2634 @result{} Event (35025468 attribute-changed "/tmp/foo")
2635@end group
2636@end example
2637
2638Whether the action @code{renamed} is returned, depends on the used
2639watch library. It can be expected, when a directory is watched, and
2640both @var{file} and @var{file1} belong to this directory. Otherwise,
2641the actions @code{deleted} and @code{created} could be returned in a
2642random order.
2643
2644@example
2645@group
2646(rename-file "/tmp/foo" "/tmp/bla")
2647 @result{} Event (35025468 renamed "/tmp/foo" "/tmp/bla")
2648@end group
2649
2650@group
2651(file-notify-add-watch
2652 "/var/tmp" '(change attribute-change) 'my-notify-callback)
2653 @result{} 35025504
2654@end group
2655
2656@group
2657(rename-file "/tmp/bla" "/var/tmp/bla")
2658 @result{} ;; gfilenotify
2659 Event (35025468 renamed "/tmp/bla" "/var/tmp/bla")
2660
2661 @result{} ;; inotify
2662 Event (35025504 created "/var/tmp/bla")
2663 Event (35025468 deleted "/tmp/bla")
2664@end group
2665@end example
2666@end defun
2667
2668@defun file-notify-rm-watch descriptor
2669Removes an existing file watch specified by its @var{descriptor}.
2670@var{descriptor} should be an object returned by
2671@code{file-notify-add-watch}.
2672@end defun
b613912b 2673
00f113eb
JB
2674@node Dynamic Libraries
2675@section Dynamically Loaded Libraries
2676@cindex dynamic libraries
2677
2678 A @dfn{dynamically loaded library} is a library that is loaded on
2679demand, when its facilities are first needed. Emacs supports such
2680on-demand loading of support libraries for some of its features.
2681
2682@defvar dynamic-library-alist
2683This is an alist of dynamic libraries and external library files
2684implementing them.
2685
2686Each element is a list of the form
2687@w{@code{(@var{library} @var{files}@dots{})}}, where the @code{car} is
2688a symbol representing a supported external library, and the rest are
2689strings giving alternate filenames for that library.
2690
2691Emacs tries to load the library from the files in the order they
84f4a531
CY
2692appear in the list; if none is found, the Emacs session won't have
2693access to that library, and the features it provides will be
2694unavailable.
00f113eb
JB
2695
2696Image support on some platforms uses this facility. Here's an example
2697of setting this variable for supporting images on MS-Windows:
2698
84f4a531 2699@example
00f113eb
JB
2700(setq dynamic-library-alist
2701 '((xpm "libxpm.dll" "xpm4.dll" "libXpm-nox4.dll")
2702 (png "libpng12d.dll" "libpng12.dll" "libpng.dll"
84f4a531
CY
2703 "libpng13d.dll" "libpng13.dll")
2704 (jpeg "jpeg62.dll" "libjpeg.dll" "jpeg-62.dll"
2705 "jpeg.dll")
00f113eb
JB
2706 (tiff "libtiff3.dll" "libtiff.dll")
2707 (gif "giflib4.dll" "libungif4.dll" "libungif.dll")
2708 (svg "librsvg-2-2.dll")
2709 (gdk-pixbuf "libgdk_pixbuf-2.0-0.dll")
2710 (glib "libglib-2.0-0.dll")
2711 (gobject "libgobject-2.0-0.dll")))
84f4a531 2712@end example
00f113eb
JB
2713
2714Note that image types @code{pbm} and @code{xbm} do not need entries in
2715this variable because they do not depend on external libraries and are
2716always available in Emacs.
2717
2718Also note that this variable is not meant to be a generic facility for
2719accessing external libraries; only those already known by Emacs can
2720be loaded through it.
2721
2722This variable is ignored if the given @var{library} is statically
2723linked into Emacs.
2724@end defvar