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