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