* m/delta.h: (SYSTEM_MALLOC): defined as gnu malloc does not work.
[bpt/emacs.git] / lispref / os.texi
CommitLineData
73804d4b
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
4@c See the file elisp.texi for copying conditions.
5@setfilename ../info/os
6@node System Interface, Display, Processes, Top
7@chapter Operating System Interface
8
9 This chapter is about starting and getting out of Emacs, access to
10values in the operating system environment, and terminal input, output
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.
23* Timers:: Setting a timer to call a function at a certain time.
24* Terminal Input:: Recording terminal input for debugging.
25* Terminal Output:: Recording terminal output for debugging.
26* Special Keysyms:: Defining system-specific key symbols for X windows.
27* Flow Control:: How to turn output flow control on or off.
28* Batch Mode:: Running Emacs without terminal interaction.
29@end menu
30
31@node Starting Up
32@section Starting Up Emacs
33
34 This section describes what Emacs does when it is started, and how you
35can customize these actions.
36
37@menu
38* Start-up Summary:: Sequence of actions Emacs performs at start-up.
39* Init File:: Details on reading the init file (@file{.emacs}).
40* Terminal-Specific:: How the terminal-specific Lisp file is read.
41* Command Line Arguments:: How command line arguments are processed,
42 and how you can customize them.
43@end menu
44
45@node Start-up Summary
46@subsection Summary: Sequence of Actions at Start Up
47@cindex initialization
48@cindex start up of Emacs
49@cindex @file{startup.el}
50
51 The order of operations performed (in @file{startup.el}) by Emacs when
52it is started up is as follows:
53
54@enumerate
55@item
56It loads the initialization library for the window system, if you are
57using a window system. This library's name is
58@file{term/@var{windowsystem}-win.el}.
59
60@item
61It initializes the X window frame and faces, if appropriate.
62
63@item
64It runs the normal hook @code{before-init-hook}.
65
66@item
67It loads the library @file{site-start}, unless the option
68@samp{-no-site-file} was specified. The library's file name is usually
69@file{site-start.el}.
70@cindex @file{site-start.el}
71
72@item
73It loads the file @file{~/.emacs} unless @samp{-q} was specified on
74command line. (This is not done in @samp{-batch} mode.) The @samp{-u}
75option can specify the user name whose home directory should be used
76instead of @file{~}.
77
78@item
79It loads the library @file{default} unless @code{inhibit-default-init}
80is non-@code{nil}. (This is not done in @samp{-batch} mode or if
81@samp{-q} was specified on command line.) The library's file name is
82usually @file{default.el}.
83@cindex @file{default.el}
84
85@item
86It runs the normal hook @code{after-init-hook}.
87
88@item
89It sets the major mode according to @code{initial-major-mode}, provided
90the buffer @samp{*scratch*} is still current and still in Fundamental
91mode.
92
93@item
94It loads the terminal-specific Lisp file, if any, except when in batch
95mode or using a window system.
96
97@item
98It displays the initial echo area message, unless you have suppressed
99that with @code{inhibit-startup-echo-area-message}.
100
101@item
102It processes any remaining command line arguments.
103
104@item
105It runs @code{term-setup-hook}.
106
107@item
108It calls @code{frame-notice-user-settings}, which modifies the
109parameters of the selected frame according to whatever the init files
110specify.
111
112@item
113It runs @code{window-setup-hook}. @xref{Window Systems}.
114
115@item
116It displays copyleft, nonwarranty and basic use information, provided
117there were no remaining command line arguments (a few steps above) and
118the value of @code{inhibit-startup-message} is @code{nil}.
119@end enumerate
120
121@defopt inhibit-startup-message
122This variable inhibits the initial startup messages (the nonwarranty,
123etc.). If it is non-@code{nil}, then the messages are not printed.
124
125This variable exists so you can set it in your personal init file, once
126you are familiar with the contents of the startup message. Do not set
127this variable in the init file of a new user, or in a way that affects
128more than one user, because that would prevent new users from receiving
129the information they are supposed to see.
130@end defopt
131
132@defopt inhibit-startup-echo-area-message
133This variable controls the display of the startup echo area message.
134You can suppress the startup echo area message by adding text with this
135form to your @file{.emacs} file:
136
137@example
138(setq inhibit-startup-echo-area-message
139 "@var{your-login-name}")
140@end example
141
142Simply setting @code{inhibit-startup-echo-area-message} to your login
143name is not sufficient to inhibit the message; Emacs explicitly checks
144whether @file{.emacs} contains an expression as shown above. Your login
145name must appear in the expression as a Lisp string constant.
146
147This way, you can easily inhibit the message for yourself if you wish,
148but thoughtless copying of your @file{.emacs} file will not inhibit the
149message for someone else.
150@end defopt
151
152@node Init File
153@subsection The Init File: @file{.emacs}
154@cindex init file
155@cindex @file{.emacs}
156
157 When you start Emacs, it normally attempts to load the file
158@file{.emacs} from your home directory. This file, if it exists, must
159contain Lisp code. It is called your @dfn{init file}. The command line
160switches @samp{-q} and @samp{-u} affect the use of the init file;
161@samp{-q} says not to load an init file, and @samp{-u} says to load a
a890e1b0 162specified user's init file instead of yours. @xref{Entering Emacs,,,
73804d4b
RS
163emacs, The GNU Emacs Manual}.
164
165@cindex default init file
166 A site may have a @dfn{default init file}, which is the library named
167@file{default.el}. Emacs finds the @file{default.el} file through the
168standard search path for libraries (@pxref{How Programs Do Loading}).
169The Emacs distribution does not come with this file; sites may provide
170one for local customizations. If the default init file exists, it is
171loaded whenever you start Emacs, except in batch mode or if @samp{-q} is
172specified. But your own personal init file, if any, is loaded first; if
173it sets @code{inhibit-default-init} to a non-@code{nil} value, then
174Emacs does not subsequently load the @file{default.el} file.
175
176 Another file for site-customization is @file{site-start.el}. Emacs
177loads this @emph{before} the user's init file. You can inhibit the
178loading of this file with the option @samp{-no-site-file}.
179
180 If there is a great deal of code in your @file{.emacs} file, you
181should move it into another file named @file{@var{something}.el},
182byte-compile it (@pxref{Byte Compilation}), and make your @file{.emacs}
183file load the other file using @code{load} (@pxref{Loading}).
184
a890e1b0 185 @xref{Init File Examples,,, emacs, The GNU Emacs Manual}, for
73804d4b
RS
186examples of how to make various commonly desired customizations in your
187@file{.emacs} file.
188
189@defopt inhibit-default-init
190This variable prevents Emacs from loading the default initialization
191library file for your session of Emacs. If its value is non-@code{nil},
192then the default library is not loaded. The default value is
193@code{nil}.
194@end defopt
195
196@defvar before-init-hook
197@defvarx after-init-hook
198These two normal hooks are run just before, and just after, loading of
199the user's init file, @file{default.el}, and/or @file{site-start.el}.
200@end defvar
201
202@node Terminal-Specific
203@subsection Terminal-Specific Initialization
204@cindex terminal-specific initialization
205
206 Each terminal type can have its own Lisp library that Emacs loads when
207run on that type of terminal. For a terminal type named @var{termtype},
208the library is called @file{term/@var{termtype}}. Emacs finds the file
209by searching the @code{load-path} directories as it does for other
210files, and trying the @samp{.elc} and @samp{.el} suffixes. Normally,
211terminal-specific Lisp library is located in @file{emacs/lisp/term}, a
212subdirectory of the @file{emacs/lisp} directory in which most Emacs Lisp
213libraries are kept.@refill
214
215 The library's name is constructed by concatenating the value of the
216variable @code{term-file-prefix} and the terminal type. Normally,
217@code{term-file-prefix} has the value @code{"term/"}; changing this
218is not recommended.
219
220 The usual function of a terminal-specific library is to enable special
221keys to send sequences that Emacs can recognize. It may also need to
222set or add to @code{function-key-map} if the Termcap entry does not
223specify all the terminal's function keys. @xref{Terminal Input}.
224
225@cindex Termcap
226 When the name of the terminal type contains a hyphen, only the part of
227the name before the first hyphen is significant in choosing the library
228name. Thus, terminal types @samp{aaa-48} and @samp{aaa-30-rv} both use
229the @file{term/aaa} library. If necessary, the library can evaluate
230@code{(getenv "TERM")} to find the full name of the terminal
231type.@refill
232
233 Your @file{.emacs} file can prevent the loading of the
234terminal-specific library by setting the variable
235@code{term-file-prefix} to @code{nil}. This feature is useful when
236experimenting with your own peculiar customizations.
237
238 You can also arrange to override some of the actions of the
239terminal-specific library by setting the variable
240@code{term-setup-hook}. This is a normal hook which Emacs runs using
241@code{run-hooks} at the end of Emacs initialization, after loading both
242your @file{.emacs} file and any terminal-specific libraries. You can
243use this variable to define initializations for terminals that do not
244have their own libraries. @xref{Hooks}.
245
246@defvar term-file-prefix
247@cindex @code{TERM} environment variable
248If the @code{term-file-prefix} variable is non-@code{nil}, Emacs loads
249a terminal-specific initialization file as follows:
250
251@example
252(load (concat term-file-prefix (getenv "TERM")))
253@end example
254
255@noindent
256You may set the @code{term-file-prefix} variable to @code{nil} in your
257@file{.emacs} file if you do not wish to load the
258terminal-initialization file. To do this, put the following in
259your @file{.emacs} file: @code{(setq term-file-prefix nil)}.
260@end defvar
261
262@defvar term-setup-hook
263This variable is a normal hook which Emacs runs after loading your
264@file{.emacs} file, the default initialization file (if any) and the
265terminal-specific Lisp file.
266
267You can use @code{term-setup-hook} to override the definitions made by a
268terminal-specific file.
269@end defvar
270
271 See @code{window-setup-hook} in @ref{Window Systems}, for a related
272feature.
273
274@node Command Line Arguments
275@subsection Command Line Arguments
276@cindex command line arguments
277
278 You can use command line arguments to request various actions when you
279start Emacs. Since you do not need to start Emacs more than once per
280day, and will often leave your Emacs session running longer than that,
281command line arguments are hardly ever used. As a practical matter, it
282is best to avoid making the habit of using them, since this habit would
283encourage you to kill and restart Emacs unnecessarily often. These
284options exist for two reasons: to be compatible with other editors (for
285invocation by other programs) and to enable shell scripts to run
286specific Lisp programs.
287
288 This section describes how Emacs processes command line arguments,
289and how you can customize them.
290
291@ignore
292 (Note that some other editors require you to start afresh each time
293you want to edit a file. With this kind of editor, you will probably
294specify the file as a command line argument. The recommended way to
295use GNU Emacs is to start it only once, just after you log in, and do
296all your editing in the same Emacs process. Each time you want to edit
297a different file, you visit it with the existing Emacs, which eventually
298comes to have many files in it ready for editing. Usually you do not
299kill the Emacs until you are about to log out.)
300@end ignore
301
302@defun command-line
303This function parses the command line which Emacs was called with,
304processes it, loads the user's @file{.emacs} file and displays the
305initial nonwarranty information, etc.
306@end defun
307
308@defvar command-line-processed
309The value of this variable is @code{t} once the command line has been
310processed.
311
312If you redump Emacs by calling @code{dump-emacs}, you may wish to set
313this variable to @code{nil} first in order to cause the new dumped Emacs
314to process its new command line arguments.
315@end defvar
316
317@defvar command-switch-alist
318@cindex switches on command line
319@cindex options on command line
320@cindex command line options
321The value of this variable is an alist of user-defined command-line
322options and associated handler functions. This variable exists so you
323can add elements to it.
324
325A @dfn{command line option} is an argument on the command line of the
326form:
327
328@example
329-@var{option}
330@end example
331
332The elements of the @code{command-switch-alist} look like this:
333
334@example
335(@var{option} . @var{handler-function})
336@end example
337
338The @var{handler-function} is called to handle @var{option} and receives
339the option name as its sole argument.
340
341In some cases, the option is followed in the command line by an
342argument. In these cases, the @var{handler-function} can find all the
343remaining command-line arguments in the variable
344@code{command-line-args-left}. (The entire list of command-line
345arguments is in @code{command-line-args}.)
346
347The command line arguments are parsed by the @code{command-line-1}
348function in the @file{startup.el} file. See also @ref{Command
349Switches, , Command Line Switches and Arguments, emacs, The GNU Emacs
350Manual}.
351@end defvar
352
353@defvar command-line-args
354The value of this variable is the list of command line arguments passed
355to Emacs.
356@end defvar
357
358@defvar command-line-functions
359This variable's value is a list of functions for handling an
360unrecognized command-line argument. Each time the next argument to be
361processed has no special meaning, the functions in this list are called,
362in the order they appear, until one of them returns a non-@code{nil}
363value.
364
365These functions are called with no arguments. They can access the
366command-line argument under consideration through the variable
367@code{argi}. The remaining arguments (not including the current one)
368are in the variable @code{command-line-args-left}.
369
370When a function recognizes and processes the argument in @code{argi}, it
371should return a non-@code{nil} value to say it has dealt with that
372argument. If it has also dealt with some of the following arguments, it
373can indicate that by deleting them from @code{command-line-args-left}.
374
375If all of these functions return @code{nil}, then the argument is used
376as a file name to visit.
377@end defvar
378
379@node Getting Out
380@section Getting Out of Emacs
381@cindex exiting Emacs
382
383 There are two ways to get out of Emacs: you can kill the Emacs job,
384which exits permanently, or you can suspend it, which permits you to
385reenter the Emacs process later. As a practical matter, you seldom kill
386Emacs---only when you are about to log out. Suspending is much more
387common.
388
389@menu
390* Killing Emacs:: Exiting Emacs irreversibly.
391* Suspending Emacs:: Exiting Emacs reversibly.
392@end menu
393
394@node Killing Emacs
395@comment node-name, next, previous, up
396@subsection Killing Emacs
397@cindex killing Emacs
398
399 Killing Emacs means ending the execution of the Emacs process. The
400parent process normally resumes control. The low-level primitive for
401killing Emacs is @code{kill-emacs}.
402
403@defun kill-emacs &optional exit-data
404This function exits the Emacs process and kills it.
405
406If @var{exit-data} is an integer, then it is used as the exit status
407of the Emacs process. (This is useful primarily in batch operation; see
408@ref{Batch Mode}.)
409
410If @var{exit-data} is a string, its contents are stuffed into the
411terminal input buffer so that the shell (or whatever program next reads
412input) can read them.
413@end defun
414
415 All the information in the Emacs process, aside from files that have
416been saved, is lost when the Emacs is killed. Because killing Emacs
417inadvertently can lose a lot of work, Emacs queries for confirmation
418before actually terminating if you have buffers that need saving or
419subprocesses that are running. This is done in the function
420@code{save-buffers-kill-emacs}.
421
422@defvar kill-emacs-query-functions
423After asking the standard questions, @code{save-buffers-kill-emacs}
424calls the functions in the list @code{kill-buffer-query-functions}, in
425order of appearance, with no arguments. These functions can ask for
426additional confirmation from the user. If any of them returns
427non-@code{nil}, Emacs is not killed.
428@end defvar
429
430@defvar kill-emacs-hook
431This variable is a normal hook; once @code{save-buffers-kill-emacs} is
432finished with all file saving and confirmation, it runs the functions in
433this hook.
434@end defvar
435
436@node Suspending Emacs
437@subsection Suspending Emacs
438@cindex suspending Emacs
439
440 @dfn{Suspending Emacs} means stopping Emacs temporarily and returning
441control to its superior process, which is usually the shell. This
442allows you to resume editing later in the same Emacs process, with the
443same buffers, the same kill ring, the same undo history, and so on. To
444resume Emacs, use the appropriate command in the parent shell---most
445likely @code{fg}.
446
447 Some operating systems do not support suspension of jobs; on these
448systems, ``suspension'' actually creates a new shell temporarily as a
449subprocess of Emacs. Then you would exit the shell to return to Emacs.
450
451 Suspension is not useful with window systems such as X, because the
452Emacs job may not have a parent that can resume it again, and in any
453case you can give input to some other job such as a shell merely by
454moving to a different window. Therefore, suspending is not allowed
455when Emacs is an X client.
456
457@defun suspend-emacs string
458This function stops Emacs and returns control to the superior process.
459If and when the superior process resumes Emacs, @code{suspend-emacs}
460returns @code{nil} to its caller in Lisp.
461
462If @var{string} is non-@code{nil}, its characters are sent to be read
463as terminal input by Emacs's superior shell. The characters in
464@var{string} are not echoed by the superior shell; only the results
465appear.
466
467Before suspending, @code{suspend-emacs} runs the normal hook
468@code{suspend-hook}. In Emacs version 18, @code{suspend-hook} was not a
469normal hook; its value was a single function, and if its value was
470non-@code{nil}, then @code{suspend-emacs} returned immediately without
471actually suspending anything.
472
473After the user resumes Emacs, it runs the normal hook
474@code{suspend-resume-hook}. @xref{Hooks}.
475
476The next redisplay after resumption will redraw the entire screen,
477unless the variable @code{no-redraw-on-reenter} is non-@code{nil}
478(@pxref{Refresh Screen}).
479
480In the following example, note that @samp{pwd} is not echoed after
481Emacs is suspended. But it is read and executed by the shell.
482
483@smallexample
484@group
485(suspend-emacs)
486 @result{} nil
487@end group
488
489@group
490(add-hook 'suspend-hook
491 (function (lambda ()
492 (or (y-or-n-p
493 "Really suspend? ")
494 (error "Suspend cancelled")))))
495 @result{} (lambda nil
496 (or (y-or-n-p "Really suspend? ")
497 (error "Suspend cancelled")))
498@end group
499@group
500(add-hook 'suspend-resume-hook
501 (function (lambda () (message "Resumed!"))))
502 @result{} (lambda nil (message "Resumed!"))
503@end group
504@group
505(suspend-emacs "pwd")
506 @result{} nil
507@end group
508@group
509---------- Buffer: Minibuffer ----------
510Really suspend? @kbd{y}
511---------- Buffer: Minibuffer ----------
512@end group
513
514@group
515---------- Parent Shell ----------
516lewis@@slug[23] % /user/lewis/manual
517lewis@@slug[24] % fg
518@end group
519
520@group
521---------- Echo Area ----------
522Resumed!
523@end group
524@end smallexample
525@end defun
526
527@defvar suspend-hook
528This variable is a normal hook run before suspending.
529@end defvar
530
531@defvar suspend-resume-hook
532This variable is a normal hook run after suspending.
533@end defvar
534
535@node System Environment
536@section Operating System Environment
537@cindex operating system environment
538
539 Emacs provides access to variables in the operating system environment
540through various functions. These variables include the name of the
541system, the user's @sc{uid}, and so on.
542
543@defvar system-type
544The value of this variable is a symbol indicating the type of
545operating system Emacs is operating on. Here is a table of the symbols
546for the operating systems that Emacs can run on up to version 19.1.
547
548@table @code
549@item aix-v3
550AIX.
551
552@item berkeley-unix
553Berkeley BSD.
554
555@item hpux
556Hewlett-Packard operating system.
557
558@item irix
559Silicon Graphics Irix system.
560
561@item rtu
562Masscomp RTU, UCB universe.
563
564@item unisoft-unix
565UniSoft UniPlus.
566
567@item usg-unix-v
568AT&T System V.
569
570@item vax-vms
571VAX VMS.
572
573@item xenix
574SCO Xenix 386.
575@end table
576
577We do not wish to add new symbols to make finer distinctions unless it
578is absolutely necessary! In fact, we hope to eliminate some of these
579alternatives in the future. We recommend using
580@code{system-configuration} to distinguish between different operating
581systems.
582@end defvar
583
584@defvar system-configuration
585This variable holds the three-part configuration name for the
586hardware/software configuration of your system, as a string. The
587convenient way to test parts of this string is with @code{string-match}.
588@end defvar
589
590@defun system-name
591This function returns the name of the machine you are running on.
592@example
593(system-name)
594 @result{} "prep.ai.mit.edu"
595@end example
596@end defun
597
598@defun getenv var
599@cindex environment variable access
600This function returns the value of the environment variable @var{var},
601as a string. Within Emacs, the environment variable values are kept in
602the Lisp variable @code{process-environment}.
603
604@example
605@group
606(getenv "USER")
607 @result{} "lewis"
608@end group
609
610@group
611lewis@@slug[10] % printenv
612PATH=.:/user/lewis/bin:/usr/bin:/usr/local/bin
613USER=lewis
614@end group
615@group
616TERM=ibmapa16
617SHELL=/bin/csh
618HOME=/user/lewis
619@end group
620@end example
621@end defun
622
623@c Emacs 19 feature
624@deffn Command setenv variable value
625This command sets the value of the environment variable named
626@var{variable} to @var{value}. Both arguments should be strings. This
627function works by modifying @code{process-environment}; binding that
628variable with @code{let} is also reasonable practice.
629@end deffn
630
631@defvar process-environment
632This variable is a list of strings, each describing one environment
633variable. The functions @code{getenv} and @code{setenv} work by means
634of this variable.
635
636@smallexample
637@group
638process-environment
639@result{} ("l=/usr/stanford/lib/gnuemacs/lisp"
640 "PATH=.:/user/lewis/bin:/usr/class:/nfsusr/local/bin"
641 "USER=lewis"
642@end group
643@group
644 "TERM=ibmapa16"
645 "SHELL=/bin/csh"
646 "HOME=/user/lewis")
647@end group
648@end smallexample
649@end defvar
650
a890e1b0
RS
651@defvar invocation-name
652This variable holds the program name under which Emacs was invoked. The
653value is a string, and does not include a directory name.
654@end defvar
655
656@defvar invocation-directory
657This variable holds the directory from which the Emacs executable was
658invoked, or perhaps @code{nil} if that directory cannot be determined.
659@end defvar
660
661@defvar installation-directory
662If non-@code{nil}, this is a directory within which to look for the
663@file{lib-src} and @file{etc} subdirectories. This is non-@code{nil}
664when Emacs can't find those directories in their standard installed
665locations, but can find them near where the Emacs executable was found.
666@end defvar
667
73804d4b
RS
668@defun load-average
669This function returns the current 1 minute, 5 minute and 15 minute
670load averages in a list. The values are integers that are 100 times
671the system load averages. (The load averages indicate the number of
672processes trying to run.)
673
674@example
675@group
676(load-average)
677 @result{} (169 48 36)
678@end group
679
680@group
681lewis@@rocky[5] % uptime
682 11:55am up 1 day, 19:37, 3 users,
683 load average: 1.69, 0.48, 0.36
684@end group
685@end example
686@end defun
687
688@defun emacs-pid
689This function returns the process @sc{id} of the Emacs process.
690@end defun
691
692@defun setprv privilege-name &optional setp getprv
693This function sets or resets a VMS privilege. (It does not exist on
694Unix.) The first arg is the privilege name, as a string. The second
695argument, @var{setp}, is @code{t} or @code{nil}, indicating whether the
696privilege is to be turned on or off. Its default is @code{nil}. The
697function returns @code{t} if successful, @code{nil} otherwise.
698
699 If the third argument, @var{getprv}, is non-@code{nil}, @code{setprv}
700does not change the privilege, but returns @code{t} or @code{nil}
701indicating whether the privilege is currently enabled.
702@end defun
703
704@node User Identification
705@section User Identification
706
707@defun user-login-name
708This function returns the name under which the user is logged in. If
709the environment variable @code{LOGNAME} is set, that value is used.
710Otherwise, if the environment variable @code{USER} is set, that value is
711used. Otherwise, the value is based on the effective @sc{uid}, not the
712real @sc{uid}.
713
714@example
715@group
716(user-login-name)
717 @result{} "lewis"
718@end group
719@end example
720@end defun
721
722@defun user-real-login-name
723This function returns the user name corresponding to Emacs's real
724@sc{uid}. This ignores the effective @sc{uid} and ignores the
725environment variables @code{LOGNAME} and @code{USER}.
726@end defun
727
728@defun user-full-name
729This function returns the full name of the user.
730
731@example
732@group
733(user-full-name)
734 @result{} "Bil Lewis"
735@end group
736@end example
737@end defun
738
739@defun user-real-uid
740This function returns the real @sc{uid} of the user.
741
742@example
743@group
744(user-real-uid)
745 @result{} 19
746@end group
747@end example
748@end defun
749
750@defun user-uid
751This function returns the effective @sc{uid} of the user.
752@end defun
753
754@node Time of Day
755@section Time of Day
756
757 This section explains how to determine the current time and the time
758zone.
759
760@defun current-time-string &optional time-value
761This function returns the current time and date as a humanly-readable
762string. The format of the string is unvarying; the number of characters
763used for each part is always the same, so you can reliably use
764@code{substring} to extract pieces of it. However, it would be wise to
765count the characters from the beginning of the string rather than from
766the end, as additional information may be added at the end.
767
768@c Emacs 19 feature
769The argument @var{time-value}, if given, specifies a time to format
770instead of the current time. The argument should be a cons cell
771containing two integers, or a list whose first two elements are
772integers. Thus, you can use times obtained from @code{current-time}
773(see below) and from @code{file-attributes} (@pxref{File Attributes}).
774
775@example
776@group
777(current-time-string)
778 @result{} "Wed Oct 14 22:21:05 1987"
779@end group
780@end example
781@end defun
782
783@c Emacs 19 feature
784@defun current-time
785This function returns the system's time value as a list of three
786integers: @code{(@var{high} @var{low} @var{microsec})}. The integers
787@var{high} and @var{low} combine to give the number of seconds since
7880:00 January 1, 1970, which is
789@ifinfo
790@var{high} * 2**16 + @var{low}.
791@end ifinfo
792@tex
793$high*-2^{16}+low$.
794@end tex
795
796The third element, @var{microsec}, gives the microseconds since the
797start of the current second (or 0 for systems that return time only on
798the resolution of a second).
799
800The first two elements can be compared with file time values such as you
801get with the function @code{file-attributes}. @xref{File Attributes}.
802@end defun
803
804@c Emacs 19 feature
805@defun current-time-zone &optional time-value
806This function returns a list describing the time zone that the user is
807in.
808
809The value has the form @code{(@var{offset} @var{name})}. Here
810@var{offset} is an integer giving the number of seconds ahead of UTC
811(east of Greenwich). A negative value means west of Greenwich. The
812second element, @var{name} is a string giving the name of the time
813zone. Both elements change when daylight savings time begins or ends;
814if the user has specified a time zone that does not use a seasonal time
815adjustment, then the value is constant through time.
816
817If the operating system doesn't supply all the information necessary to
818compute the value, both elements of the list are @code{nil}.
819
820The argument @var{time-value}, if given, specifies a time to analyze
821instead of the current time. The argument should be a cons cell
822containing two integers, or a list whose first two elements are
823integers. Thus, you can use times obtained from @code{current-time}
824(see below) and from @code{file-attributes} (@pxref{File Attributes}).
825@end defun
826
827@node Timers
828@section Timers
829
830You can set up a timer to call a function at a specified future time.
831
832@defun run-at-time time repeat function &rest args
833This function arranges to call @var{function} with arguments @var{args}
834at time @var{time}. The argument @var{function} is a function to call
835later, and @var{args} are the arguments to give it when it is called.
836The time @var{time} is specified as a string.
837
838Absolute times may be specified in a wide variety of formats; The form
839@samp{@var{hour}:@var{min}:@var{sec} @var{timezone}
840@var{month}/@var{day}/@var{year}}, where all fields are numbers, works;
841the format that @code{current-time-string} returns is also allowed.
842
843To specify a relative time, use numbers followed by units.
844For example:
845
846@table @samp
847@item 1 min
848denotes 1 minute from now.
849@item 1 min 5 sec
850denotes 65 seconds from now.
851@item 1 min 2 sec 3 hour 4 day 5 week 6 fortnight 7 month 8 year
852denotes exactly 103 months, 123 days, and 10862 seconds from now.
853@end table
854
855If @var{time} is an integer, that specifies a relative time measured in
856seconds.
857
858The argument @var{repeat} specifies how often to repeat the call. If
859@var{repeat} is @code{nil}, there are no repetitions; @var{function} is
860called just once, at @var{time}. If @var{repeat} is an integer, it
861specifies a repetition period measured in seconds.
862@end defun
863
864@defun cancel-timer timer
865Cancel the requested action for @var{timer}, which should be a value
866previously returned by @code{run-at-time}. This cancels the effect of
867that call to @code{run-at-time}; the arrival of the specified time will
868not cause anything special to happen.
869@end defun
870
871@node Terminal Input
872@section Terminal Input
873@cindex terminal input
874
875 This section describes functions and variables for recording or
876manipulating terminal input. See @ref{Display}, for related
877functions.
878
879@menu
880* Input Modes:: Options for how input is processed.
881* Translating Input:: Low level conversion of some characters or events
882 into others.
883* Recording Input:: Saving histories of recent or all input events.
884@end menu
885
886@node Input Modes
887@subsection Input Modes
888@cindex input modes
889@cindex terminal input modes
890
891@defun set-input-mode interrupt flow meta quit-char
892This function sets the mode for reading keyboard input. If
893@var{interrupt} is non-null, then Emacs uses input interrupts. If it is
894@code{nil}, then it uses @sc{cbreak} mode.
895
896If @var{flow} is non-@code{nil}, then Emacs uses @sc{xon/xoff} (@kbd{C-q},
897@kbd{C-s}) flow control for output to terminal. This has no effect except
898in @sc{cbreak} mode. @xref{Flow Control}.
899
900The default setting is system dependent. Some systems always use
901@sc{cbreak} mode regardless of what is specified.
902
903@c Emacs 19 feature
904The argument @var{meta} controls support for input character codes
905above 127. If @var{meta} is @code{t}, Emacs converts characters with
906the 8th bit set into Meta characters. If @var{meta} is @code{nil},
907Emacs disregards the 8th bit; this is necessary when the terminal uses
908it as a parity bit. If @var{meta} is neither @code{t} nor @code{nil},
909Emacs uses all 8 bits of input unchanged. This is good for terminals
910using European 8-bit character sets.
911
912@c Emacs 19 feature
913If @var{quit-char} is non-@code{nil}, it specifies the character to
914use for quitting. Normally this character is @kbd{C-g}.
915@xref{Quitting}.
916@end defun
917
918The @code{current-input-mode} function returns the input mode settings
919Emacs is currently using.
920
921@c Emacs 19 feature
922@defun current-input-mode
923This function returns current mode for reading keyboard input. It
924returns a list, corresponding to the arguments of @code{set-input-mode},
925of the form @code{(@var{interrupt} @var{flow} @var{meta} @var{quit})} in
926which:
927@table @var
928@item interrupt
929is non-@code{nil} when Emacs is using interrupt-driven input. If
930@code{nil}, Emacs is using @sc{cbreak} mode.
931@item flow
932is non-@code{nil} if Emacs uses @sc{xon/xoff} (@kbd{C-q}, @kbd{C-s})
933flow control for output to the terminal. This value has no effect
934unless @var{interrupt} is non-@code{nil}.
935@item meta
936is non-@code{t} if Emacs treats the eighth bit of input characters as
937the meta bit; @code{nil} means Emacs clears the eighth bit of every
938input character; any other value means Emacs uses all eight bits as the
939basic character code.
940@item quit
941is the character Emacs currently uses for quitting, usually @kbd{C-g}.
942@end table
943@end defun
944
945@defvar meta-flag
946This variable used to control whether to treat the eight bit in keyboard
947input characters as the @key{Meta} bit. @code{nil} meant no, and
948anything else meant yes. This variable existed in Emacs versions 18 and
949earlier but no longer exists in Emacs 19; use @code{set-input-mode}
950instead.
951@end defvar
952
953@node Translating Input
954@subsection Translating Input Events
955@cindex translating input events
956
957 This section describes features for translating input events into other
958input events before they become part of key sequences.
959
960@c Emacs 19 feature
961@defvar extra-keyboard-modifiers
962This variable lets Lisp programs ``press'' the modifier keys on the
963keyboard. The value is a bit mask:
964
965@table @asis
966@item 1
967The @key{SHIFT} key.
968@item 2
969The @key{LOCK} key.
970@item 4
971The @key{CTL} key.
972@item 8
973The @key{META} key.
974@end table
975
976Each time the user types a keyboard key, it is altered as if the
977modifier keys specified in the bit mask were held down.
978
979When you use X windows, the program can ``press'' any of the modifier
980keys in this way. Otherwise, only the @key{CTL} and @key{META} keys can
981be virtually pressed.
982@end defvar
983
984@defvar keyboard-translate-table
985This variable is the translate table for keyboard characters. It lets
986you reshuffle the keys on the keyboard without changing any command
987bindings. Its value must be a string or @code{nil}.
988
989If @code{keyboard-translate-table} is a string, then each character read
990from the keyboard is looked up in this string and the character in the
991string is used instead. If the string is of length @var{n}, character codes
992@var{n} and up are untranslated.
993
994In the example below, we set @code{keyboard-translate-table} to a
995string of 128 characters. Then we fill it in to swap the characters
996@kbd{C-s} and @kbd{C-\} and the characters @kbd{C-q} and @kbd{C-^}.
997Subsequently, typing @kbd{C-\} has all the usual effects of typing
998@kbd{C-s}, and vice versa. (@xref{Flow Control} for more information on
999this subject.)
1000
1001@cindex flow control example
1002@example
1003@group
1004(defun evade-flow-control ()
1005 "Replace C-s with C-\ and C-q with C-^."
1006 (interactive)
1007@end group
1008@group
1009 (let ((the-table (make-string 128 0)))
1010 (let ((i 0))
1011 (while (< i 128)
1012 (aset the-table i i)
1013 (setq i (1+ i))))
1014@end group
1015 ;; @r{Swap @kbd{C-s} and @kbd{C-\}.}
1016 (aset the-table ?\034 ?\^s)
1017 (aset the-table ?\^s ?\034)
1018@group
1019 ;; @r{Swap @kbd{C-q} and @kbd{C-^}.}
1020 (aset the-table ?\036 ?\^q)
1021 (aset the-table ?\^q ?\036)
1022 (setq keyboard-translate-table the-table)))
1023@end group
1024@end example
1025
1026Note that this translation is the first thing that happens to a
1027character after it is read from the terminal. Record-keeping features
1028such as @code{recent-keys} and dribble files record the characters after
1029translation.
1030@end defvar
1031
1032@defun keyboard-translate from to
1033This function modifies @code{keyboard-translate-table} to translate
1034character code @var{from} into character code @var{to}. It creates
1035or enlarges the translate table if necessary.
1036@end defun
1037
1038@defvar function-key-map
1039This variable holds a keymap which describes the character sequences
1040sent by function keys on an ordinary character terminal. This keymap
1041uses the data structure as other keymaps, but is used differently: it
1042specifies translations to make while reading events.
1043
1044If @code{function-key-map} ``binds'' a key sequence @var{k} to a vector
1045@var{v}, then when @var{k} appears as a subsequence @emph{anywhere} in a
1046key sequence, it is replaced with the events in @var{v}.
1047
1048For example, VT100 terminals send @kbd{@key{ESC} O P} when the
1049keypad PF1 key is pressed. Therefore, we want Emacs to translate
1050that sequence of events into the single event @code{pf1}. We accomplish
1051this by ``binding'' @kbd{@key{ESC} O P} to @code{[pf1]} in
1052@code{function-key-map}, when using a VT100.
1053
1054Thus, typing @kbd{C-c @key{PF1}} sends the character sequence @kbd{C-c
1055@key{ESC} O P}; later the function @code{read-key-sequence} translates
1056this back into @kbd{C-c @key{PF1}}, which it returns as the vector
1057@code{[?\C-c pf1]}.
1058
1059Entries in @code{function-key-map} are ignored if they conflict with
1060bindings made in the minor mode, local, or global keymaps. The intent
1061is that the character sequences that function keys send should not have
1062command bindings in their own right.
1063
1064The value of @code{function-key-map} is usually set up automatically
1065according to the terminal's Terminfo or Termcap entry, but sometimes
1066those need help from terminal-specific Lisp files. Emacs comes with
1067terminal-specific files for many common terminals; their main purpose is
1068to make entries in @code{function-key-map} beyond those that can be
1069deduced from Termcap and Terminfo. @xref{Terminal-Specific}.
1070
1071Emacs versions 18 and earlier used totally different means of detecting
1072the character sequences that represent function keys.
1073@end defvar
1074
1075@defvar key-translation-map
1076This variable is another keymap used just like @code{function-key-map}
1077to translate input events into other events. It differs from
1078@code{function-key-map} in two ways:
1079
1080@itemize @bullet
1081@item
1082@code{key-translation-map} goes to work after @code{function-key-map} is
1083finished; it receives the results of translation by
1084@code{function-key-map}.
1085
1086@item
1087@code{key-translation-map} overrides actual key bindings.
1088@end itemize
1089
1090The intent of @code{key-translation-map} is for users to map one
1091character set to another, including ordinary characters normally bound
1092to @code{self-insert-command}.
1093@end defvar
1094
1095@cindex key translation function
1096You can use @code{function-key-map} or @code{key-translation-map} for
1097more than simple aliases, by using a function, instead of a key
1098sequence, as the ``translation'' of a key. Then this function is called
1099to compute the translation of that key.
1100
1101The key translation function receives one argument, which is the prompt
1102that was specified in @code{read-key-sequence}---or @code{nil} if the
1103key sequence is being read by the editor command loop. In most cases
1104you can ignore the prompt value.
1105
1106If the function reads input itself, it can have the effect of altering
1107the event that follows. For example, here's how to define @kbd{C-c h}
1108to turn the character that follows into a Hyper character:
1109
1110@example
1111(defun hyperify (prompt)
1112 (let ((e (read-event)))
1113 (vector (if (numberp e)
1114 (logior (lsh 1 20) e)
1115 (if (memq 'hyper (event-modifiers e))
1116 e
1117 (add-event-modifier "H-" e))))))
1118
1119(defun add-event-modifier (string e)
1120 (let ((symbol (if (symbolp e) e (car e))))
1121 (setq symbol (intern (concat string
1122 (symbol-name symbol))))
1123 (if (symbolp e)
1124 symbol
1125 (cons symbol (cdr e)))))
1126
1127(define-key function-key-map "\C-ch" 'hyperify)
1128@end example
1129
1130@pindex iso-transl
1131@cindex Latin-1 character set (input)
1132@cindex ISO Latin-1 characters (input)
1133The @file{iso-transl} library uses this feature to provide a way of
1134inputting non-ASCII Latin-1 characters.
1135
1136@node Recording Input
1137@subsection Recording Input
1138
1139@defun recent-keys
1140This function returns a vector containing the last 100 input events
1141from the keyboard or mouse. All input events are included, whether or
1142not they were used as parts of key sequences. Thus, you always get the
1143last 100 inputs, not counting keyboard macros. (Events from keyboard
1144macros are excluded because they are less interesting for debugging; it
1145should be enough to see the events which invoked the macros.)
1146@end defun
1147
1148@deffn Command open-dribble-file filename
1149@cindex dribble file
1150This function opens a @dfn{dribble file} named @var{filename}. When a
1151dribble file is open, each input event from the keyboard or mouse (but
1152not those from keyboard macros) is written in that file. A
1153non-character event is expressed using its printed representation
1154surrounded by @samp{<@dots{}>}.
1155
1156You close the dribble file by calling this function with an argument
1157of @code{nil}.
1158
1159This function is normally used to record the input necessary to
1160trigger an Emacs bug, for the sake of a bug report.
1161
1162@example
1163@group
1164(open-dribble-file "~/dribble")
1165 @result{} nil
1166@end group
1167@end example
1168@end deffn
1169
1170 See also the @code{open-termscript} function (@pxref{Terminal Output}).
1171
1172@node Terminal Output
1173@section Terminal Output
1174@cindex terminal output
1175
1176 The terminal output functions send output to the terminal or keep
1177track of output sent to the terminal. The variable @code{baud-rate}
1178tells you what Emacs thinks is the output speed of the terminal.
1179
1180@defvar baud-rate
1181This variable's value is the output speed of the terminal, as far as
1182Emacs knows. Setting this variable does not change the speed of actual
1183data transmission, but the value is used for calculations such as
1184padding. It also affects decisions about whether to scroll part of the
1185screen or repaint---even when using a window system, (We designed it
1186this way despite the fact that a window system has no true ``output
1187speed'', to give you a way to tune these decisions.)
1188
1189The value is measured in baud.
1190@end defvar
1191
1192 If you are running across a network, and different parts of the
1193network work at different baud rates, the value returned by Emacs may be
1194different from the value used by your local terminal. Some network
1195protocols communicate the local terminal speed to the remote machine, so
1196that Emacs and other programs can get the proper value, but others do
1197not. If Emacs has the wrong value, it makes decisions that are less
1198than optimal. To fix the problem, set @code{baud-rate}.
1199
1200@defun baud-rate
1201This function returns the value of the variable @code{baud-rate}. In
1202Emacs versions 18 and earlier, this was the only way to find out the
1203terminal speed.
1204@end defun
1205
1206@defun send-string-to-terminal string
1207This function sends @var{string} to the terminal without alteration.
1208Control characters in @var{string} have terminal-dependent effects.
1209
1210One use of this function is to define function keys on terminals that
1211have downloadable function key definitions. For example, this is how on
1212certain terminals to define function key 4 to move forward four
1213characters (by transmitting the characters @kbd{C-u C-f} to the
1214computer):
1215
1216@example
1217@group
1218(send-string-to-terminal "\eF4\^U\^F")
1219 @result{} nil
1220@end group
1221@end example
1222@end defun
1223
1224@deffn Command open-termscript filename
1225@cindex termscript file
1226This function is used to open a @dfn{termscript file} that will record
1227all the characters sent by Emacs to the terminal. It returns
1228@code{nil}. Termscript files are useful for investigating problems
1229where Emacs garbles the screen, problems that are due to incorrect
1230Termcap entries or to undesirable settings of terminal options more
1231often than to actual Emacs bugs. Once you are certain which characters
1232were actually output, you can determine reliably whether they correspond
1233to the Termcap specifications in use.
1234
1235See also @code{open-dribble-file} in @ref{Terminal Input}.
1236
1237@example
1238@group
1239(open-termscript "../junk/termscript")
1240 @result{} nil
1241@end group
1242@end example
1243@end deffn
1244
1245@node Special Keysyms
1246@section System-Specific X11 Keysyms
1247
1248To define system-specific X11 keysyms, set the variable
1249@code{system-key-alist}.
1250
1251@defvar system-key-alist
1252This variable's value should be an alist with one element for each
1253system-specific keysym. An element has this form: @code{(@var{code}
1254. @var{symbol})}, where @var{code} is the numeric keysym code (not
1255including the ``vendor specific'' bit, 1 << 28), and @var{symbol} is the
1256name for the function key.
1257
1258For example @code{(168 . mute-acute)} defines a system-specific key used
1259by HP X servers whose numeric code is (1 << 28) + 168.
1260
1261It is not a problem if the alist defines keysyms for other X servers, as
1262long as they don't conflict with the ones used by the X server actually
1263in use.
1264@end defvar
1265
1266@node Flow Control
1267@section Flow Control
1268@cindex flow control characters
1269
1270 This section attempts to answer the question ``Why does Emacs choose
1271to use flow-control characters in its command character set?'' For a
1272second view on this issue, read the comments on flow control in the
1273@file{emacs/INSTALL} file from the distribution; for help with Termcap
1274entries and DEC terminal concentrators, see @file{emacs/etc/TERMS}.
1275
1276@cindex @kbd{C-s}
1277@cindex @kbd{C-q}
1278 At one time, most terminals did not need flow control, and none used
1279@code{C-s} and @kbd{C-q} for flow control. Therefore, the choice of
1280@kbd{C-s} and @kbd{C-q} as command characters was uncontroversial.
1281Emacs, for economy of keystrokes and portability, used nearly all the
1282@sc{ASCII} control characters, with mnemonic meanings when possible;
1283thus, @kbd{C-s} for search and @kbd{C-q} for quote.
1284
1285 Later, some terminals were introduced which required these characters
1286for flow control. They were not very good terminals for full-screen
1287editing, so Emacs maintainers did not pay attention. In later years,
1288flow control with @kbd{C-s} and @kbd{C-q} became widespread among
1289terminals, but by this time it was usually an option. And the majority
1290of users, who can turn flow control off, were unwilling to switch to
1291less mnemonic key bindings for the sake of flow control.
1292
1293 So which usage is ``right'', Emacs's or that of some terminal and
1294concentrator manufacturers? This question has no simple answer.
1295
1296 One reason why we are reluctant to cater to the problems caused by
1297@kbd{C-s} and @kbd{C-q} is that they are gratuitous. There are other
1298techniques (albeit less common in practice) for flow control that
1299preserve transparency of the character stream. Note also that their use
1300for flow control is not an official standard. Interestingly, on the
1301model 33 teletype with a paper tape punch (which is very old), @kbd{C-s}
1302and @kbd{C-q} were sent by the computer to turn the punch on and off!
1303
1304 GNU Emacs version 19 provides a convenient way of enabling flow
1305control if you want it: call the function @code{enable-flow-control}.
1306
1307@defun enable-flow-control
1308This function enables use of @kbd{C-s} and @kbd{C-q} for output flow
1309control, and provides the characters @kbd{C-\} and @kbd{C-^} as aliases
1310for them using @code{keyboard-translate-table} (@pxref{Translating Input}).
1311@end defun
1312
1313You can use the function @code{enable-flow-control-on} in your
1314@file{.emacs} file to enable flow control automatically on certain
1315terminal types.
1316
1317@defun enable-flow-control-on &rest termtypes
1318This function enables flow control, and the aliases @kbd{C-\} and @kbd{C-^},
1319if the terminal type is one of @var{termtypes}. For example:
1320
1321@smallexample
1322(enable-flow-control-on "vt200" "vt300" "vt101" "vt131")
1323@end smallexample
1324@end defun
1325
1326 Here is how @code{enable-flow-control} does its job:
1327
1328@enumerate
1329@item
1330@cindex @sc{cbreak}
1331It sets @sc{cbreak} mode for terminal input, and tells the operating
1332system to handle flow control, with @code{(set-input-mode nil t)}.
1333
1334@item
1335It sets up @code{keyboard-translate-table} to translate @kbd{C-\} and
1336@kbd{C-^} into @kbd{C-s} and @kbd{C-q} were typed. Except at its very
1337lowest level, Emacs never knows that the characters typed were anything
1338but @kbd{C-s} and @kbd{C-q}, so you can in effect type them as @kbd{C-\}
1339and @kbd{C-^} even when they are input for other commands.
1340@xref{Translating Input}.
a890e1b0 1341@end enumerate
73804d4b
RS
1342
1343If the terminal is the source of the flow control characters, then once
1344you enable kernel flow control handling, you probably can make do with
1345less padding than normal for that terminal. You can reduce the amount
1346of padding by customizing the Termcap entry. You can also reduce it by
1347setting @code{baud-rate} to a smaller value so that Emacs uses a smaller
1348speed when calculating the padding needed. @xref{Terminal Output}.
1349
1350@node Batch Mode
1351@section Batch Mode
1352@cindex batch mode
1353@cindex noninteractive use
1354
1355 The command line option @samp{-batch} causes Emacs to run
1356noninteractively. In this mode, Emacs does not read commands from the
1357terminal, it does not alter the terminal modes, and it does not expect
1358to be outputting to an erasable screen. The idea is that you specify
1359Lisp programs to run; when they are finished, Emacs should exit. The
1360way to specify the programs to run is with @samp{-l @var{file}}, which
1361loads the library named @var{file}, and @samp{-f @var{function}}, which
1362calls @var{function} with no arguments.
1363
1364 Any Lisp program output that would normally go to the echo area,
1365either using @code{message} or using @code{prin1}, etc., with @code{t}
1366as the stream, goes instead to Emacs's standard output descriptor when
1367in batch mode. Thus, Emacs behaves much like a noninteractive
1368application program. (The echo area output that Emacs itself normally
1369generates, such as command echoing, is suppressed entirely.)
1370
1371@defvar noninteractive
1372This variable is non-@code{nil} when Emacs is running in batch mode.
1373@end defvar