*** empty log message ***
[bpt/emacs.git] / lispref / internals.texi
CommitLineData
a44af9f2
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
fd897522
GM
3@c Copyright (C) 1990, 1991, 1992, 1993, 1998, 1999
4@c Free Software Foundation, Inc.
a44af9f2
RS
5@c See the file elisp.texi for copying conditions.
6@setfilename ../info/internals
7@node GNU Emacs Internals, Standard Errors, Tips, Top
8@comment node-name, next, previous, up
9@appendix GNU Emacs Internals
10
11This chapter describes how the runnable Emacs executable is dumped with
12the preloaded Lisp libraries in it, how storage is allocated, and some
13internal aspects of GNU Emacs that may be of interest to C programmers.
14
15@menu
969fe9b5 16* Building Emacs:: How to the dumped Emacs is made.
a44af9f2
RS
17* Pure Storage:: A kludge to make preloaded Lisp functions sharable.
18* Garbage Collection:: Reclaiming space for Lisp objects no longer used.
969fe9b5 19* Memory Usage:: Info about total size of Lisp objects made so far.
a44af9f2
RS
20* Writing Emacs Primitives:: Writing C code for Emacs.
21* Object Internals:: Data formats of buffers, windows, processes.
22@end menu
23
969fe9b5 24@node Building Emacs
a44af9f2
RS
25@appendixsec Building Emacs
26@cindex building Emacs
27@pindex temacs
28
29 This section explains the steps involved in building the Emacs
30executable. You don't have to know this material to build and install
31Emacs, since the makefiles do all these things automatically. This
32information is pertinent to Emacs maintenance.
33
34 Compilation of the C source files in the @file{src} directory
35produces an executable file called @file{temacs}, also called a
36@dfn{bare impure Emacs}. It contains the Emacs Lisp interpreter and I/O
37routines, but not the editing commands.
38
39@cindex @file{loadup.el}
40 The command @w{@samp{temacs -l loadup}} uses @file{temacs} to create
41the real runnable Emacs executable. These arguments direct
42@file{temacs} to evaluate the Lisp files specified in the file
43@file{loadup.el}. These files set up the normal Emacs editing
574efc83 44environment, resulting in an Emacs that is still impure but no longer
a44af9f2
RS
45bare.
46
47 It takes a substantial time to load the standard Lisp files. Luckily,
48you don't have to do this each time you run Emacs; @file{temacs} can
574efc83 49dump out an executable program called @file{emacs} that has these files
a44af9f2
RS
50preloaded. @file{emacs} starts more quickly because it does not need to
51load the files. This is the Emacs executable that is normally
52installed.
53
54 To create @file{emacs}, use the command @samp{temacs -batch -l loadup
55dump}. The purpose of @samp{-batch} here is to prevent @file{temacs}
56from trying to initialize any of its data on the terminal; this ensures
57that the tables of terminal information are empty in the dumped Emacs.
58The argument @samp{dump} tells @file{loadup.el} to dump a new executable
59named @file{emacs}.
60
61 Some operating systems don't support dumping. On those systems, you
62must start Emacs with the @samp{temacs -l loadup} command each time you
a890e1b0
RS
63use it. This takes a substantial time, but since you need to start
64Emacs once a day at most---or once a week if you never log out---the
65extra time is not too severe a problem.
a44af9f2
RS
66
67@cindex @file{site-load.el}
95260b26 68
a44af9f2 69 You can specify additional files to preload by writing a library named
95260b26
GM
70@file{site-load.el} that loads them. You may need to add a definition
71
72@example
73#define SITELOAD_PURESIZE_EXTRA @var{n}
74@end example
75
76@noindent
77to make @var{n} added bytes of pure space to hold the additional files.
78(Try adding increments of 20000 until it is big enough.) However, the
79advantage of preloading additional files decreases as machines get
80faster. On modern machines, it is usually not advisable.
a44af9f2 81
2a664e73
RS
82 After @file{loadup.el} reads @file{site-load.el}, it finds the
83documentation strings for primitive and preloaded functions (and
84variables) in the file @file{etc/DOC} where they are stored, by calling
85@code{Snarf-documentation} (@pxref{Accessing Documentation}).
86
a44af9f2 87@cindex @file{site-init.el}
a890e1b0 88 You can specify other Lisp expressions to execute just before dumping
2a664e73
RS
89by putting them in a library named @file{site-init.el}. This file is
90executed after the documentation strings are found.
a44af9f2 91
2a664e73
RS
92 If you want to preload function or variable definitions, there are
93three ways you can do this and make their documentation strings
94accessible when you subsequently run Emacs:
95
96@itemize @bullet
97@item
98Arrange to scan these files when producing the @file{etc/DOC} file,
99and load them with @file{site-load.el}.
100
101@item
102Load the files with @file{site-init.el}, then copy the files into the
103installation directory for Lisp files when you install Emacs.
104
105@item
106Specify a non-@code{nil} value for
8241495d 107@code{byte-compile-dynamic-docstrings} as a local variable in each of these
2a664e73
RS
108files, and load them with either @file{site-load.el} or
109@file{site-init.el}. (This method has the drawback that the
110documentation strings take up space in Emacs all the time.)
111@end itemize
112
113 It is not advisable to put anything in @file{site-load.el} or
114@file{site-init.el} that would alter any of the features that users
115expect in an ordinary unmodified Emacs. If you feel you must override
116normal features for your site, do it with @file{default.el}, so that
8241495d 117users can override your changes if they wish. @xref{Startup Summary}.
a44af9f2
RS
118
119@defun dump-emacs to-file from-file
120@cindex unexec
cb017dde 121This function dumps the current state of Emacs into an executable file
a44af9f2
RS
122@var{to-file}. It takes symbols from @var{from-file} (this is normally
123the executable file @file{temacs}).
124
cb017dde
RS
125If you want to use this function in an Emacs that was already dumped,
126you must run Emacs with @samp{-batch}.
a44af9f2
RS
127@end defun
128
969fe9b5 129@node Pure Storage
a44af9f2
RS
130@appendixsec Pure Storage
131@cindex pure storage
132
a890e1b0
RS
133 Emacs Lisp uses two kinds of storage for user-created Lisp objects:
134@dfn{normal storage} and @dfn{pure storage}. Normal storage is where
8241495d 135all the new data created during an Emacs session are kept; see the
574efc83
RS
136following section for information on normal storage. Pure storage is
137used for certain data in the preloaded standard Lisp files---data that
138should never change during actual use of Emacs.
a44af9f2
RS
139
140 Pure storage is allocated only while @file{temacs} is loading the
141standard preloaded Lisp libraries. In the file @file{emacs}, it is
574efc83 142marked as read-only (on operating systems that permit this), so that
a44af9f2
RS
143the memory space can be shared by all the Emacs jobs running on the
144machine at once. Pure storage is not expandable; a fixed amount is
145allocated when Emacs is compiled, and if that is not sufficient for the
a890e1b0
RS
146preloaded libraries, @file{temacs} crashes. If that happens, you must
147increase the compilation parameter @code{PURESIZE} in the file
a44af9f2
RS
148@file{src/puresize.h}. This normally won't happen unless you try to
149preload additional libraries or add features to the standard ones.
150
151@defun purecopy object
8241495d
RS
152This function makes a copy in pure storage of @var{object}, and returns
153it. It copies a string by simply making a new string with the same
a44af9f2 154characters in pure storage. It recursively copies the contents of
a890e1b0
RS
155vectors and cons cells. It does not make copies of other objects such
156as symbols, but just returns them unchanged. It signals an error if
a44af9f2
RS
157asked to copy markers.
158
c2cd5fb7
RS
159This function is a no-op except while Emacs is being built and dumped;
160it is usually called only in the file @file{emacs/lisp/loaddefs.el}, but
161a few packages call it just in case you decide to preload them.
a44af9f2
RS
162@end defun
163
164@defvar pure-bytes-used
a890e1b0 165The value of this variable is the number of bytes of pure storage
a44af9f2
RS
166allocated so far. Typically, in a dumped Emacs, this number is very
167close to the total amount of pure storage available---if it were not,
168we would preallocate less.
169@end defvar
170
171@defvar purify-flag
a890e1b0 172This variable determines whether @code{defun} should make a copy of the
a44af9f2
RS
173function definition in pure storage. If it is non-@code{nil}, then the
174function definition is copied into pure storage.
175
a890e1b0 176This flag is @code{t} while loading all of the basic functions for
a44af9f2 177building Emacs initially (allowing those functions to be sharable and
a890e1b0
RS
178non-collectible). Dumping Emacs as an executable always writes
179@code{nil} in this variable, regardless of the value it actually has
180before and after dumping.
a44af9f2 181
a890e1b0 182You should not change this flag in a running Emacs.
a44af9f2
RS
183@end defvar
184
969fe9b5 185@node Garbage Collection
a44af9f2
RS
186@appendixsec Garbage Collection
187@cindex garbage collector
188
189@cindex memory allocation
190 When a program creates a list or the user defines a new function (such
a890e1b0
RS
191as by loading a library), that data is placed in normal storage. If
192normal storage runs low, then Emacs asks the operating system to
a44af9f2 193allocate more memory in blocks of 1k bytes. Each block is used for one
a890e1b0
RS
194type of Lisp object, so symbols, cons cells, markers, etc., are
195segregated in distinct blocks in memory. (Vectors, long strings,
196buffers and certain other editing types, which are fairly large, are
197allocated in individual blocks, one per object, while small strings are
198packed into blocks of 8k bytes.)
199
200 It is quite common to use some storage for a while, then release it by
201(for example) killing a buffer or deleting the last pointer to an
a44af9f2
RS
202object. Emacs provides a @dfn{garbage collector} to reclaim this
203abandoned storage. (This name is traditional, but ``garbage recycler''
204might be a more intuitive metaphor for this facility.)
205
a890e1b0
RS
206 The garbage collector operates by finding and marking all Lisp objects
207that are still accessible to Lisp programs. To begin with, it assumes
208all the symbols, their values and associated function definitions, and
574efc83 209any data presently on the stack, are accessible. Any objects that can
a890e1b0
RS
210be reached indirectly through other accessible objects are also
211accessible.
a44af9f2 212
a890e1b0 213 When marking is finished, all objects still unmarked are garbage. No
a44af9f2 214matter what the Lisp program or the user does, it is impossible to refer
a890e1b0 215to them, since there is no longer a way to reach them. Their space
574efc83
RS
216might as well be reused, since no one will miss them. The second
217(``sweep'') phase of the garbage collector arranges to reuse them.
a44af9f2 218
05aea714 219@c ??? Maybe add something describing weak hash tables here?
95260b26 220
a44af9f2 221@cindex free list
a890e1b0
RS
222 The sweep phase puts unused cons cells onto a @dfn{free list}
223for future allocation; likewise for symbols and markers. It compacts
224the accessible strings so they occupy fewer 8k blocks; then it frees the
574efc83 225other 8k blocks. Vectors, buffers, windows, and other large objects are
a890e1b0 226individually allocated and freed using @code{malloc} and @code{free}.
a44af9f2
RS
227
228@cindex CL note---allocate more storage
229@quotation
574efc83 230@b{Common Lisp note:} Unlike other Lisps, GNU Emacs Lisp does not
a44af9f2
RS
231call the garbage collector when the free list is empty. Instead, it
232simply requests the operating system to allocate more storage, and
233processing continues until @code{gc-cons-threshold} bytes have been
234used.
235
236This means that you can make sure that the garbage collector will not
237run during a certain portion of a Lisp program by calling the garbage
238collector explicitly just before it (provided that portion of the
239program does not use so much space as to force a second garbage
240collection).
241@end quotation
242
243@deffn Command garbage-collect
a890e1b0 244This command runs a garbage collection, and returns information on
a44af9f2
RS
245the amount of space in use. (Garbage collection can also occur
246spontaneously if you use more than @code{gc-cons-threshold} bytes of
247Lisp data since the previous garbage collection.)
248
a890e1b0 249@code{garbage-collect} returns a list containing the following
a44af9f2
RS
250information:
251
a890e1b0 252@example
a44af9f2
RS
253@group
254((@var{used-conses} . @var{free-conses})
255 (@var{used-syms} . @var{free-syms})
a890e1b0 256@end group
969fe9b5 257 (@var{used-miscs} . @var{free-miscs})
a44af9f2
RS
258 @var{used-string-chars}
259 @var{used-vector-slots}
f9f59935
RS
260 (@var{used-floats} . @var{free-floats})
261 (@var{used-intervals} . @var{free-intervals}))
969fe9b5
RS
262@end example
263
264Here is an example:
265
266@example
a890e1b0 267@group
a44af9f2 268(garbage-collect)
f9f59935
RS
269 @result{} ((106886 . 13184) (9769 . 0)
270 (7731 . 4651) 347543 121628
271 (31 . 94) (1273 . 168))
a44af9f2 272@end group
a890e1b0 273@end example
a44af9f2
RS
274
275Here is a table explaining each element:
276
277@table @var
278@item used-conses
279The number of cons cells in use.
280
281@item free-conses
282The number of cons cells for which space has been obtained from the
283operating system, but that are not currently being used.
284
285@item used-syms
286The number of symbols in use.
287
288@item free-syms
289The number of symbols for which space has been obtained from the
290operating system, but that are not currently being used.
291
969fe9b5
RS
292@item used-miscs
293The number of miscellaneous objects in use. These include markers and
294overlays, plus certain objects not visible to users.
a44af9f2 295
969fe9b5
RS
296@item free-miscs
297The number of miscellaneous objects for which space has been obtained
298from the operating system, but that are not currently being used.
a44af9f2
RS
299
300@item used-string-chars
301The total size of all strings, in characters.
302
303@item used-vector-slots
304The total number of elements of existing vectors.
305
306@item used-floats
307@c Emacs 19 feature
308The number of floats in use.
309
310@item free-floats
311@c Emacs 19 feature
312The number of floats for which space has been obtained from the
313operating system, but that are not currently being used.
a9f0a989
RS
314
315@item used-intervals
316The number of intervals in use. Intervals are an internal
317data structure used for representing text properties.
318
319@item free-intervals
320The number of intervals for which space has been obtained
321from the operating system, but that are not currently being used.
a44af9f2
RS
322@end table
323@end deffn
324
d64c55d8
RS
325@defopt garbage-collection-messages
326If this variable is non-@code{nil}, Emacs displays a message at the
327beginning and end of garbage collection. The default value is
328@code{nil}, meaning there are no such messages.
329@end defopt
330
a44af9f2 331@defopt gc-cons-threshold
a890e1b0 332The value of this variable is the number of bytes of storage that must
a44af9f2 333be allocated for Lisp objects after one garbage collection in order to
a890e1b0 334trigger another garbage collection. A cons cell counts as eight bytes,
a44af9f2 335a string as one byte per character plus a few bytes of overhead, and so
a890e1b0
RS
336on; space allocated to the contents of buffers does not count. Note
337that the subsequent garbage collection does not happen immediately when
338the threshold is exhausted, but only the next time the Lisp evaluator is
a44af9f2
RS
339called.
340
f9f59935 341The initial threshold value is 400,000. If you specify a larger
a44af9f2
RS
342value, garbage collection will happen less often. This reduces the
343amount of time spent garbage collecting, but increases total memory use.
574efc83 344You may want to do this when running a program that creates lots of
a44af9f2
RS
345Lisp data.
346
a890e1b0 347You can make collections more frequent by specifying a smaller value,
a44af9f2
RS
348down to 10,000. A value less than 10,000 will remain in effect only
349until the subsequent garbage collection, at which time
350@code{garbage-collect} will set the threshold back to 10,000.
351@end defopt
352
969fe9b5
RS
353 The value return by @code{garbage-collect} describes the amount of
354memory used by Lisp data, broken down by data type. By contrast, the
355function @code{memory-limit} provides information on the total amount of
356memory Emacs is currently using.
357
a44af9f2
RS
358@c Emacs 19 feature
359@defun memory-limit
360This function returns the address of the last byte Emacs has allocated,
361divided by 1024. We divide the value by 1024 to make sure it fits in a
362Lisp integer.
363
364You can use this to get a general idea of how your actions affect the
365memory usage.
366@end defun
367
969fe9b5
RS
368@node Memory Usage
369@section Memory Usage
370
371 These functions and variables give information about the total amount
372of memory allocation that Emacs has done, broken down by data type.
373Note the difference between these and the values returned by
374@code{(garbage-collect)}; those count objects that currently exist, but
375these count the number or size of all allocations, including those for
376objects that have since been freed.
377
378@defvar cons-cells-consed
379The total number of cons cells that have been allocated so far
380in this Emacs session.
381@end defvar
382
383@defvar floats-consed
384The total number of floats that have been allocated so far
385in this Emacs session.
386@end defvar
387
388@defvar vector-cells-consed
389The total number of vector cells that have been allocated so far
390in this Emacs session.
391@end defvar
392
393@defvar symbols-consed
394The total number of symbols that have been allocated so far
395in this Emacs session.
396@end defvar
397
398@defvar string-chars-consed
399The total number of string characters that have been allocated so far
400in this Emacs session.
401@end defvar
402
403@defvar misc-objects-consed
404The total number of miscellaneous objects that have been allocated so
405far in this Emacs session. These include markers and overlays, plus
406certain objects not visible to users.
407@end defvar
408
409@defvar intervals-consed
410The total number of intervals that have been allocated so far
411in this Emacs session.
412@end defvar
413
414@node Writing Emacs Primitives
a44af9f2
RS
415@appendixsec Writing Emacs Primitives
416@cindex primitive function internals
417
418 Lisp primitives are Lisp functions implemented in C. The details of
419interfacing the C function so that Lisp can call it are handled by a few
420C macros. The only way to really understand how to write new C code is
421to read the source, but we can explain some things here.
422
423 An example of a special form is the definition of @code{or}, from
424@file{eval.c}. (An ordinary function would have the same general
425appearance.)
426
427@cindex garbage collection protection
428@smallexample
429@group
430DEFUN ("or", For, Sor, 0, UNEVALLED, 0,
9e2b495b 431 "Eval args until one of them yields non-nil; return that value.\n\
a44af9f2
RS
432The remaining args are not evalled at all.\n\
433@end group
434@group
a890e1b0 435If all args return nil, return nil.")
a44af9f2
RS
436 (args)
437 Lisp_Object args;
438@{
439 register Lisp_Object val;
440 Lisp_Object args_left;
441 struct gcpro gcpro1;
442@end group
443
444@group
95260b26 445 if (NILP (args))
a44af9f2
RS
446 return Qnil;
447
448 args_left = args;
449 GCPRO1 (args_left);
450@end group
451
452@group
453 do
454 @{
455 val = Feval (Fcar (args_left));
95260b26 456 if (!NILP (val))
a44af9f2
RS
457 break;
458 args_left = Fcdr (args_left);
459 @}
95260b26 460 while (!NILP (args_left));
a44af9f2
RS
461@end group
462
463@group
464 UNGCPRO;
465 return val;
466@}
467@end group
468@end smallexample
469
470 Let's start with a precise explanation of the arguments to the
a890e1b0 471@code{DEFUN} macro. Here is a template for them:
a44af9f2
RS
472
473@example
474DEFUN (@var{lname}, @var{fname}, @var{sname}, @var{min}, @var{max}, @var{interactive}, @var{doc})
475@end example
476
477@table @var
478@item lname
a890e1b0
RS
479This is the name of the Lisp symbol to define as the function name; in
480the example above, it is @code{or}.
a44af9f2
RS
481
482@item fname
483This is the C function name for this function. This is
484the name that is used in C code for calling the function. The name is,
485by convention, @samp{F} prepended to the Lisp name, with all dashes
486(@samp{-}) in the Lisp name changed to underscores. Thus, to call this
487function from C code, call @code{For}. Remember that the arguments must
488be of type @code{Lisp_Object}; various macros and functions for creating
489values of type @code{Lisp_Object} are declared in the file
490@file{lisp.h}.
491
492@item sname
493This is a C variable name to use for a structure that holds the data for
494the subr object that represents the function in Lisp. This structure
495conveys the Lisp symbol name to the initialization routine that will
496create the symbol and store the subr object as its definition. By
497convention, this name is always @var{fname} with @samp{F} replaced with
498@samp{S}.
499
500@item min
a890e1b0
RS
501This is the minimum number of arguments that the function requires. The
502function @code{or} allows a minimum of zero arguments.
a44af9f2
RS
503
504@item max
a890e1b0
RS
505This is the maximum number of arguments that the function accepts, if
506there is a fixed maximum. Alternatively, it can be @code{UNEVALLED},
507indicating a special form that receives unevaluated arguments, or
508@code{MANY}, indicating an unlimited number of evaluated arguments (the
509equivalent of @code{&rest}). Both @code{UNEVALLED} and @code{MANY} are
510macros. If @var{max} is a number, it may not be less than @var{min} and
511it may not be greater than seven.
a44af9f2
RS
512
513@item interactive
514This is an interactive specification, a string such as might be used as
515the argument of @code{interactive} in a Lisp function. In the case of
516@code{or}, it is 0 (a null pointer), indicating that @code{or} cannot be
a890e1b0
RS
517called interactively. A value of @code{""} indicates a function that
518should receive no arguments when called interactively.
a44af9f2
RS
519
520@item doc
521This is the documentation string. It is written just like a
522documentation string for a function defined in Lisp, except you must
523write @samp{\n\} at the end of each line. In particular, the first line
524should be a single sentence.
525@end table
526
a890e1b0
RS
527 After the call to the @code{DEFUN} macro, you must write the argument
528name list that every C function must have, followed by ordinary C
529declarations for the arguments. For a function with a fixed maximum
530number of arguments, declare a C argument for each Lisp argument, and
574efc83
RS
531give them all type @code{Lisp_Object}. When a Lisp function has no
532upper limit on the number of arguments, its implementation in C actually
533receives exactly two arguments: the first is the number of Lisp
534arguments, and the second is the address of a block containing their
535values. They have types @code{int} and @w{@code{Lisp_Object *}}.
a44af9f2
RS
536
537 Within the function @code{For} itself, note the use of the macros
538@code{GCPRO1} and @code{UNGCPRO}. @code{GCPRO1} is used to ``protect''
539a variable from garbage collection---to inform the garbage collector that
540it must look in that variable and regard its contents as an accessible
541object. This is necessary whenever you call @code{Feval} or anything
542that can directly or indirectly call @code{Feval}. At such a time, any
543Lisp object that you intend to refer to again must be protected somehow.
544@code{UNGCPRO} cancels the protection of the variables that are
545protected in the current function. It is necessary to do this explicitly.
546
a890e1b0
RS
547 For most data types, it suffices to protect at least one pointer to
548the object; as long as the object is not recycled, all pointers to it
549remain valid. This is not so for strings, because the garbage collector
550can move them. When the garbage collector moves a string, it relocates
551all the pointers it knows about; any other pointers become invalid.
552Therefore, you must protect all pointers to strings across any point
553where garbage collection may be possible.
554
555 The macro @code{GCPRO1} protects just one local variable. If you want
556to protect two, use @code{GCPRO2} instead; repeating @code{GCPRO1} will
557not work. Macros @code{GCPRO3} and @code{GCPRO4} also exist.
558
559 These macros implicitly use local variables such as @code{gcpro1}; you
560must declare these explicitly, with type @code{struct gcpro}. Thus, if
561you use @code{GCPRO2}, you must declare @code{gcpro1} and @code{gcpro2}.
562Alas, we can't explain all the tricky details here.
563
e610024b 564 You must not use C initializers for static or global variables unless
05aea714 565the variables are never written once Emacs is dumped. These variables
8241495d
RS
566with initializers are allocated in an area of memory that becomes
567read-only (on certain operating systems) as a result of dumping Emacs.
568@xref{Pure Storage}.
e610024b
RS
569
570 Do not use static variables within functions---place all static
571variables at top level in the file. This is necessary because Emacs on
572some operating systems defines the keyword @code{static} as a null
573macro. (This definition is used because those systems put all variables
574declared static in a place that becomes read-only after dumping, whether
575they have initializers or not.)
77223f05 576
a890e1b0
RS
577 Defining the C function is not enough to make a Lisp primitive
578available; you must also create the Lisp symbol for the primitive and
579store a suitable subr object in its function cell. The code looks like
580this:
a44af9f2
RS
581
582@example
583defsubr (&@var{subr-structure-name});
584@end example
585
586@noindent
a890e1b0
RS
587Here @var{subr-structure-name} is the name you used as the third
588argument to @code{DEFUN}.
589
590 If you add a new primitive to a file that already has Lisp primitives
591defined in it, find the function (near the end of the file) named
592@code{syms_of_@var{something}}, and add the call to @code{defsubr}
593there. If the file doesn't have this function, or if you create a new
594file, add to it a @code{syms_of_@var{filename}} (e.g.,
595@code{syms_of_myfile}). Then find the spot in @file{emacs.c} where all
596of these functions are called, and add a call to
597@code{syms_of_@var{filename}} there.
a44af9f2 598
8241495d 599@vindex byte-boolean-vars
574efc83
RS
600 The function @code{syms_of_@var{filename}} is also the place to define
601any C variables that are to be visible as Lisp variables.
a890e1b0
RS
602@code{DEFVAR_LISP} makes a C variable of type @code{Lisp_Object} visible
603in Lisp. @code{DEFVAR_INT} makes a C variable of type @code{int}
604visible in Lisp with a value that is always an integer.
605@code{DEFVAR_BOOL} makes a C variable of type @code{int} visible in Lisp
8241495d
RS
606with a value that is either @code{t} or @code{nil}. Note that variables
607defined with @code{DEFVAR_BOOL} are automatically added to the list
608@code{byte-boolean-vars} used by the byte compiler.
a44af9f2 609
969fe9b5 610 If you define a file-scope C variable of type @code{Lisp_Object},
8241495d 611you must protect it from garbage-collection by calling @code{staticpro}
969fe9b5
RS
612in @code{syms_of_@var{filename}}, like this:
613
614@example
615staticpro (&@var{variable});
616@end example
617
a890e1b0 618 Here is another example function, with more complicated arguments.
969fe9b5
RS
619This comes from the code in @file{window.c}, and it demonstrates the use
620of macros and functions to manipulate Lisp objects.
a44af9f2
RS
621
622@smallexample
623@group
624DEFUN ("coordinates-in-window-p", Fcoordinates_in_window_p,
625 Scoordinates_in_window_p, 2, 2,
626 "xSpecify coordinate pair: \nXExpression which evals to window: ",
969fe9b5
RS
627 "Return non-nil if COORDINATES is in WINDOW.\n\
628COORDINATES is a cons of the form (X . Y), X and Y being distances\n\
629...
a44af9f2
RS
630@end group
631@group
969fe9b5
RS
632If they are on the border between WINDOW and its right sibling,\n\
633 `vertical-line' is returned.")
634 (coordinates, window)
635 register Lisp_Object coordinates, window;
a44af9f2 636@{
969fe9b5 637 int x, y;
a44af9f2
RS
638@end group
639
640@group
969fe9b5
RS
641 CHECK_LIVE_WINDOW (window, 0);
642 CHECK_CONS (coordinates, 1);
643 x = XINT (Fcar (coordinates));
644 y = XINT (Fcdr (coordinates));
a44af9f2 645@end group
969fe9b5 646
a44af9f2 647@group
969fe9b5
RS
648 switch (coordinates_in_window (XWINDOW (window), &x, &y))
649 @{
650 case 0: /* NOT in window at all. */
651 return Qnil;
a44af9f2 652@end group
969fe9b5 653
a44af9f2 654@group
969fe9b5
RS
655 case 1: /* In text part of window. */
656 return Fcons (make_number (x), make_number (y));
a44af9f2 657@end group
969fe9b5 658
a44af9f2 659@group
969fe9b5
RS
660 case 2: /* In mode line of window. */
661 return Qmode_line;
a44af9f2 662@end group
969fe9b5 663
a44af9f2 664@group
969fe9b5
RS
665 case 3: /* On right border of window. */
666 return Qvertical_line;
667@end group
668
669@group
670 default:
671 abort ();
672 @}
a44af9f2
RS
673@}
674@end group
675@end smallexample
676
a890e1b0
RS
677 Note that C code cannot call functions by name unless they are defined
678in C. The way to call a function written in Lisp is to use
679@code{Ffuncall}, which embodies the Lisp function @code{funcall}. Since
680the Lisp function @code{funcall} accepts an unlimited number of
681arguments, in C it takes two: the number of Lisp-level arguments, and a
682one-dimensional array containing their values. The first Lisp-level
683argument is the Lisp function to call, and the rest are the arguments to
684pass to it. Since @code{Ffuncall} can call the evaluator, you must
685protect pointers from garbage collection around the call to
686@code{Ffuncall}.
687
688 The C functions @code{call0}, @code{call1}, @code{call2}, and so on,
689provide handy ways to call a Lisp function conveniently with a fixed
690number of arguments. They work by calling @code{Ffuncall}.
a44af9f2
RS
691
692 @file{eval.c} is a very good file to look through for examples;
693@file{lisp.h} contains the definitions for some important macros and
694functions.
695
8241495d
RS
696 If you define a function which is side-effect free, update the code in
697@file{byte-opt.el} which binds @code{side-effect-free-fns} and
698@code{side-effect-and-error-free-fns} to include it. This will help the
699optimizer.
700
969fe9b5 701@node Object Internals
a44af9f2
RS
702@appendixsec Object Internals
703@cindex object internals
704
705 GNU Emacs Lisp manipulates many different types of data. The actual
f9f59935
RS
706data are stored in a heap and the only access that programs have to it
707is through pointers. Pointers are thirty-two bits wide in most
a44af9f2 708implementations. Depending on the operating system and type of machine
f9f59935
RS
709for which you compile Emacs, twenty-eight bits are used to address the
710object, and the remaining four bits are used for a GC mark bit and the
a44af9f2
RS
711tag that identifies the object's type.
712
a890e1b0
RS
713 Because Lisp objects are represented as tagged pointers, it is always
714possible to determine the Lisp data type of any object. The C data type
715@code{Lisp_Object} can hold any Lisp object of any data type. Ordinary
716variables have type @code{Lisp_Object}, which means they can hold any
717type of Lisp value; you can determine the actual data type only at run
718time. The same is true for function arguments; if you want a function
719to accept only a certain type of argument, you must check the type
720explicitly using a suitable predicate (@pxref{Type Predicates}).
a44af9f2
RS
721@cindex type checking internals
722
723@menu
724* Buffer Internals:: Components of a buffer structure.
725* Window Internals:: Components of a window structure.
726* Process Internals:: Components of a process structure.
727@end menu
728
969fe9b5 729@node Buffer Internals
a44af9f2
RS
730@appendixsubsec Buffer Internals
731@cindex internals, of buffer
732@cindex buffer internals
733
734 Buffers contain fields not directly accessible by the Lisp programmer.
735We describe them here, naming them by the names used in the C code.
736Many are accessible indirectly in Lisp programs via Lisp primitives.
737
95260b26
GM
738Two structures are used to represent buffers in C. The
739@code{buffer_text} structure contains fields describing the text of a
740buffer; the @code{buffer} structure holds other fields. In the case
741of indirect buffers, two or more @code{buffer} structures reference
742the same @code{buffer_text} structure.
743
744Here is a list of the @code{struct buffer_text} fields:
745
a44af9f2 746@table @code
95260b26 747@item beg
05aea714 748This field contains the actual address of the buffer contents.
95260b26
GM
749
750@item got
751This holds the character position of the gap in the buffer.
752
753@item z
754This field contains the character position of the end of the buffer
755text.
756
757@item gpt_byte
758Contains the byte position of the gap.
759
760@item z_byte
761Holds the byte position of the end of the buffer text.
762
763@item gap_size
764Contains the size of buffer's gap.
765
766@item modiff
767This field counts buffer-modification events for this buffer. It is
768incremented for each such event, and never otherwise changed.
769
770@item save_modiff
771Contains the previous value of @code{modiff}, as of the last time a
772buffer was visited or saved in a file.
773
774@item overlay_modiff
775Counts modifications to overlays analogous to @code{modiff}.
776
777@item beg_unchanged
778Holds the number of characters at the start of the text that are known
779to be unchanged since the last redisplay that finished.
780
781@item end_unchanged
782Holds the number of characters at the end of the text that are known to
783be unchanged since the last redisplay that finished.
784
785@item unchanged_modified
786Contains the value of @code{modiff} at the time of the last redisplay
787that finished. If this value matches @code{modiff},
788@code{beg_unchanged} and @code{end_unchanged} contain no useful
789information.
790
791@item overlay_unchanged_modified
792Contains the value of @code{overlay_modiff} at the time of the last
793redisplay that finished. If this value matches @code{overlay_modiff},
794@code{beg_unchanged} and @code{end_unchanged} contain no useful
795information.
796
797@item markers
798The markers that refer to this buffer. This is actually a single
799marker, and successive elements in its marker @code{chain} are the other
800markers referring to this buffer text.
a44af9f2 801
95260b26
GM
802@item intervals
803Contains the interval tree which records the text properties of this
804buffer.
805@end table
806
807The fields of @code{struct buffer} are:
808
809@table @code
810@item next
811Points to the next buffer, in the chain of all buffers including killed
812buffers. This chain is used only for garbage collection, in order to
813collect killed buffers properly. Note that vectors, and most kinds of
814objects allocated as vectors, are all on one chain, but buffers are on a
815separate chain of their own.
816
817@item own_text
818This is a @code{struct buffer_text} structure. In an ordinary buffer,
819it holds the buffer contents. In indirect buffers, this field is not
820used.
821
822@item text
823This points to the @code{buffer_text} structure that is used for this
824buffer. In an ordinary buffer, this is the @code{own_text} field above.
825In an indirect buffer, this is the @code{own_text} field of the base
826buffer.
827
828@item pt
829Contains the character position of point in a buffer.
830
831@item pt_byte
832Contains the byte position of point in a buffer.
833
834@item begv
835This field contains the character position of the beginning of the
836accessible range of text in the buffer.
837
838@item begv_byte
839This field contains the byte position of the beginning of the
840accessible range of text in the buffer.
841
842@item zv
843This field contains the character position of the end of the
844accessible range of text in the buffer.
845
846@item zv_byte
847This field contains the byte position of the end of the
848accessible range of text in the buffer.
849
850@item base_buffer
851In an indirect buffer, this points to the base buffer. In an ordinary
852buffer, it is null.
853
854@item local_var_flags
855This field contains flags indicating that certain variables are local in
856this buffer. Such variables are declared in the C code using
857@code{DEFVAR_PER_BUFFER}, and their buffer-local bindings are stored in
858fields in the buffer structure itself. (Some of these fields are
859described in this table.)
a44af9f2
RS
860
861@item modtime
862This field contains the modification time of the visited file. It is
8241495d
RS
863set when the file is written or read. Before writing the buffer into a
864file, this field is compared to the modification time of the file to see
865if the file has changed on disk. @xref{Buffer Modification}.
a44af9f2
RS
866
867@item auto_save_modified
868This field contains the time when the buffer was last auto-saved.
869
95260b26
GM
870@item auto_save_failure_time
871The time at which we detected a failure to auto-save, or -1 if we didn't
872have a failure.
873
a44af9f2
RS
874@item last_window_start
875This field contains the @code{window-start} position in the buffer as of
876the last time the buffer was displayed in a window.
877
95260b26
GM
878@item clip_changed
879This flag is set when narrowing changes in a buffer.
880
881@item prevent_redisplay_optimizations_p
05aea714 882this flag indicates that redisplay optimizations should not be used
95260b26
GM
883to display this buffer.
884
a890e1b0
RS
885@item undo_list
886This field points to the buffer's undo list. @xref{Undo}.
a44af9f2 887
95260b26
GM
888@item name
889The buffer name is a string that names the buffer. It is guaranteed to
890be unique. @xref{Buffer Names}.
891
892@item filename
893The name of the file visited in this buffer, or @code{nil}.
894
895@item directory
896The directory for expanding relative file names.
897
898@item save_length
899Length of the file this buffer is visiting, when last read or saved.
900This and other fields concerned with saving are not kept in the
901@code{buffer_text} structure because indirect buffers are never saved.
902
903@item auto_save_file_name
904File name used for auto-saving this buffer. This is not in the
905@code{buffer_text} because it's not used in indirect buffers at all.
906
907@item read_only
908Non-@code{nil} means this buffer is read-only.
909
910@item mark
911This field contains the mark for the buffer. The mark is a marker,
912hence it is also included on the list @code{markers}. @xref{The Mark}.
913
914@item local_var_alist
915This field contains the association list describing the buffer-local
916variable bindings of this buffer, not including the built-in
917buffer-local bindings that have special slots in the buffer object.
918(Those slots are omitted from this table.) @xref{Buffer-Local
919Variables}.
920
921@item major_mode
922Symbol naming the major mode of this buffer, e.g., @code{lisp-mode}.
923
924@item mode_name
925Pretty name of major mode, e.g., @code{"Lisp"}.
926
927@item mode_line_format
928Mode line element that controls the format of the mode line. If this
929is @code{nil}, no mode line will be displayed.
930
931@item header_line_format
932This field is analoguous to @code{mode_line_format} for the mode
933line displayed at the top of windows.
934
935@item keymap
936This field holds the buffer's local keymap. @xref{Keymaps}.
937
938@item abbrev_table
939This buffer's local abbrevs.
940
941@item syntax_table
a44af9f2
RS
942This field contains the syntax table for the buffer. @xref{Syntax Tables}.
943
95260b26
GM
944@item category_table
945This field contains the category table for the buffer.
946
947@item case_fold_search
948The value of @code{case-fold-search} in this buffer.
949
950@item tab_width
951The value of @code{tab-width} in this buffer.
952
953@item fill_column
954The value of @code{fill-column} in this buffer.
955
956@item left_margin
957The value of @code{left-margin} in this buffer.
958
959@item auto_fill_function
960The value of @code{auto-fill-function} in this buffer.
961
a44af9f2
RS
962@item downcase_table
963This field contains the conversion table for converting text to lower case.
969fe9b5 964@xref{Case Tables}.
a44af9f2
RS
965
966@item upcase_table
967This field contains the conversion table for converting text to upper case.
969fe9b5 968@xref{Case Tables}.
a44af9f2
RS
969
970@item case_canon_table
971This field contains the conversion table for canonicalizing text for
969fe9b5 972case-folding search. @xref{Case Tables}.
a44af9f2
RS
973
974@item case_eqv_table
975This field contains the equivalence table for case-folding search.
969fe9b5 976@xref{Case Tables}.
a44af9f2 977
95260b26
GM
978@item truncate_lines
979The value of @code{truncate-lines} in this buffer.
a44af9f2 980
95260b26
GM
981@item ctl_arrow
982The value of @code{ctl-arrow} in this buffer.
a44af9f2 983
95260b26
GM
984@item selective_display
985The value of @code{selective-display} in this buffer.
a44af9f2 986
95260b26
GM
987@item selective_display_ellipsis
988The value of @code{selective-display-ellipsis} in this buffer.
a44af9f2 989
95260b26
GM
990@item minor_modes
991An alist of the minor modes of this buffer.
a890e1b0 992
95260b26
GM
993@item overwrite_mode
994The value of @code{overwrite_mode} in this buffer.
a890e1b0 995
95260b26
GM
996@item abbrev_mode
997The value of @code{abbrev-mode} in this buffer.
bfe721d1 998
95260b26
GM
999@item display_table
1000This field contains the buffer's display table, or @code{nil} if it doesn't
1001have one. @xref{Display Tables}.
a890e1b0 1002
95260b26
GM
1003@item save_modified
1004This field contains the time when the buffer was last saved, as an integer.
1005@xref{Buffer Modification}.
1006
1007@item mark_active
1008This field is non-@code{nil} if the buffer's mark is active.
a890e1b0
RS
1009
1010@item overlays_before
1011This field holds a list of the overlays in this buffer that end at or
1012before the current overlay center position. They are sorted in order of
1013decreasing end position.
1014
1015@item overlays_after
1016This field holds a list of the overlays in this buffer that end after
1017the current overlay center position. They are sorted in order of
1018increasing beginning position.
969fe9b5 1019
95260b26
GM
1020@item overlay_center
1021This field holds the current overlay center position. @xref{Overlays}.
1022
969fe9b5
RS
1023@item enable_multibyte_characters
1024This field holds the buffer's local value of
1025@code{enable-multibyte-characters}---either @code{t} or @code{nil}.
95260b26
GM
1026
1027@item buffer_file_coding_system
1028The value of @code{buffer-file-coding-system} in this buffer.
1029
1030@item file_format
1031The value of @code{buffer-file-format} in this buffer.
1032
1033@item pt_marker
1034In an indirect buffer, or a buffer that is the base of an indirect
1035buffer, this holds a marker that records point for this buffer when the
1036buffer is not current.
1037
1038@item begv_marker
1039In an indirect buffer, or a buffer that is the base of an indirect
1040buffer, this holds a marker that records @code{begv} for this buffer
1041when the buffer is not current.
1042
1043@item zv_marker
1044In an indirect buffer, or a buffer that is the base of an indirect
1045buffer, this holds a marker that records @code{zv} for this buffer when
1046the buffer is not current.
1047
1048@item file_truename
1049The truename of the visited file, or @code{nil}.
1050
1051@item invisibility_spec
1052The value of @code{buffer-invisibility-spec} in this buffer.
1053
1054@item last_selected_window
1055This is the last window that was selected with this buffer in it, or @code{nil}
1056if that window no longer displays this buffer.
1057
1058@item display_count
1059This field is incremented each time the buffer is displayed in a window.
1060
1061@item left_margin_width
1062The value of @code{left-margin-width} in this buffer.
1063
1064@item right_margin_width
1065The value of @code{right-margin-width} in this buffer.
1066
1067@item indicate_empty_lines
1068Non-@code{nil} means indicate empty lines (lines with no text) with a
1069small bitmap in the fringe, when using a window system that can do it.
1070
1071@item display_time
1072This holds a time stamp that is updated each time this buffer is
1073displayed in a window.
1074
1075@item scroll_up_aggressively
1076The value of @code{scroll-up-aggressively} in this buffer.
1077
1078@item scroll_down_aggressively
1079The value of @code{scroll-down-aggressively} in this buffer.
a44af9f2
RS
1080@end table
1081
969fe9b5 1082@node Window Internals
a44af9f2
RS
1083@appendixsubsec Window Internals
1084@cindex internals, of window
1085@cindex window internals
1086
1087 Windows have the following accessible fields:
1088
1089@table @code
1090@item frame
a890e1b0 1091The frame that this window is on.
a44af9f2
RS
1092
1093@item mini_p
a890e1b0 1094Non-@code{nil} if this window is a minibuffer window.
a44af9f2 1095
95260b26
GM
1096@item parent
1097Internally, Emacs arranges windows in a tree; each group of siblings has
1098a parent window whose area includes all the siblings. This field points
1099to a window's parent.
1100
1101Parent windows do not display buffers, and play little role in display
1102except to shape their child windows. Emacs Lisp programs usually have
1103no access to the parent windows; they operate on the windows at the
1104leaves of the tree, which actually display buffers.
1105
1106The following four fields also describe the window tree structure.
1107
1108@item hchild
1109In a window subdivided horizontally by child windows, the leftmost child.
1110Otherwise, @code{nil}.
1111
1112@item vchild
1113In a window subdivided vertically by child windows, the topmost child.
1114Otherwise, @code{nil}.
1115
1116@item next
1117The next sibling of this window. It is @code{nil} in a window that is
1118the rightmost or bottommost of a group of siblings.
1119
1120@item prev
1121The previous sibling of this window. It is @code{nil} in a window that
1122is the leftmost or topmost of a group of siblings.
1123
1124@item left
1125This is the left-hand edge of the window, measured in columns. (The
1126leftmost column on the screen is @w{column 0}.)
1127
1128@item top
1129This is the top edge of the window, measured in lines. (The top line on
1130the screen is @w{line 0}.)
1131
1132@item height
1133The height of the window, measured in lines.
1134
1135@item width
1136The width of the window, measured in columns. This width includes the
1137scroll bar and fringes, and/or the separator line on the right of the
1138window (if any).
1139
a44af9f2 1140@item buffer
574efc83 1141The buffer that the window is displaying. This may change often during
a44af9f2
RS
1142the life of the window.
1143
95260b26
GM
1144@item start
1145The position in the buffer that is the first character to be displayed
1146in the window.
a44af9f2
RS
1147
1148@item pointm
1149@cindex window point internals
a890e1b0 1150This is the value of point in the current buffer when this window is
a44af9f2
RS
1151selected; when it is not selected, it retains its previous value.
1152
a890e1b0
RS
1153@item force_start
1154If this flag is non-@code{nil}, it says that the window has been
1155scrolled explicitly by the Lisp program. This affects what the next
1156redisplay does if point is off the screen: instead of scrolling the
1157window to show the text around point, it moves point to a location that
1158is on the screen.
1159
95260b26
GM
1160@item frozen_window_start_p
1161This field is set temporarily to 1 to indicate to redisplay that
1162@code{start} of this window should not be changed, even if point
1163gets invisible.
1164
1165@item start_at_line_beg
1166Non-@code{nil} means current value of @code{start} was the beginning of a line
1167when it was chosen.
1168
1169@item too_small_ok
1170Non-@code{nil} means don't delete this window for becoming ``too small''.
1171
1172@item height_fixed_p
1173This field is temporarily set to 1 to fix the height of the selected
1174window when the echo area is resized.
1175
1176@item use_time
1177This is the last time that the window was selected. The function
1178@code{get-lru-window} uses this field.
1179
1180@item sequence_number
1181A unique number assigned to this window when it was created.
1182
a890e1b0 1183@item last_modified
95260b26 1184The @code{modiff} field of the window's buffer, as of the last time
a890e1b0
RS
1185a redisplay completed in this window.
1186
95260b26
GM
1187@item last_overlay_modified
1188The @code{overlay_modiff} field of the window's buffer, as of the last
1189time a redisplay completed in this window.
1190
a890e1b0 1191@item last_point
95260b26
GM
1192The buffer's value of point, as of the last time a redisplay completed
1193in this window.
a890e1b0 1194
95260b26
GM
1195@item last_had_star
1196A non-@code{nil} value means the window's buffer was ``modified'' when the
1197window was last updated.
a44af9f2 1198
95260b26
GM
1199@item vertical_scroll_bar
1200This window's vertical scroll bar.
a44af9f2 1201
95260b26
GM
1202@item left_margin_width
1203The width of the left margin in this window, or @code{nil} not to
1204specify it (in which case the buffer's value of @code{left-margin-width}
1205is used.
a890e1b0 1206
95260b26
GM
1207@item right_margin_width
1208Likewise for the right margin.
a890e1b0 1209
13ede7fc 1210@ignore
95260b26
GM
1211@item last_mark_x
1212@item last_mark_y
1213???Not used.
1214@end ignore
a44af9f2 1215
95260b26
GM
1216@item window_end_pos
1217This is computed as @code{z} minus the buffer position of the last glyph
1218in the current matrix of the window. The value is only valid if
1219@code{window_end_valid} is not @code{nil}.
a44af9f2 1220
95260b26
GM
1221@item window_end_bytepos
1222The byte position corresponding to @code{window_end_pos}.
a890e1b0 1223
95260b26
GM
1224@item window_end_vpos
1225The window-relative vertical position of the line containing
1226@code{window_end_pos}.
a44af9f2 1227
95260b26
GM
1228@item window_end_valid
1229This field is set to a non-@code{nil} value if @code{window_end_pos} is truly
1230valid. This is @code{nil} if nontrivial redisplay is preempted since in that
1231case the display that @code{window_end_pos} was computed for did not get
1232onto the screen.
1233
1234@item redisplay_end_trigger
1235If redisplay in this window goes beyond this buffer position, it runs
1236run the @code{redisplay-end-trigger-hook}.
1237
13ede7fc 1238@ignore
95260b26
GM
1239@item orig_height
1240@item orig_top
1241??? Are temporary storage areas.
1242@end ignore
1243
1244@item cursor
1245A structure describing where the cursor is in this window.
1246
1247@item last_cursor
1248The value of @code{cursor} as of the last redisplay that finished.
1249
1250@item phys_cursor
1251A structure describing where the cursor of this window physically is.
1252
1253@item phys_cursor_type
1254The type of cursor that was last displayed on this window.
1255
1256@item phys_cursor_on_p
1257This field is non-zero if the cursor is physically on.
1258
1259@item cursor_off_p
1260Non-zero means the cursor in this window is logically on.
1261
1262@item last_cursor_off_p
1263This field contains the value of @code{cursor_off_p} as of the time of
1264the last redisplay.
1265
1266@item must_be_updated_p
1267This is set to 1 during redisplay when this window must be updated.
1268
a44af9f2 1269@item hscroll
a890e1b0 1270This is the number of columns that the display in the window is scrolled
a44af9f2
RS
1271horizontally to the left. Normally, this is 0.
1272
95260b26
GM
1273@item vscroll
1274Vertical scroll amount, in pixels. Normally, this is 0.
1275
1276@item dedicated
1277Non-@code{nil} if this window is dedicated to its buffer.
a44af9f2
RS
1278
1279@item display_table
a890e1b0
RS
1280The window's display table, or @code{nil} if none is specified for it.
1281
1282@item update_mode_line
1283Non-@code{nil} means this window's mode line needs to be updated.
1284
1285@item base_line_number
1286The line number of a certain position in the buffer, or @code{nil}.
1287This is used for displaying the line number of point in the mode line.
1288
1289@item base_line_pos
1290The position in the buffer for which the line number is known, or
1291@code{nil} meaning none is known.
1292
1293@item region_showing
1294If the region (or part of it) is highlighted in this window, this field
1295holds the mark position that made one end of that region. Otherwise,
1296this field is @code{nil}.
95260b26
GM
1297
1298@item column_number_displayed
1299The column number currently displayed in this window's mode line, or @code{nil}
1300if column numbers are not being displayed.
1301
1302@item current_matrix
1303A glyph matrix describing the current display of this window.
1304
1305@item desired_matrix
1306A glyph matrix describing the desired display of this window.
a44af9f2
RS
1307@end table
1308
969fe9b5 1309@node Process Internals
a44af9f2
RS
1310@appendixsubsec Process Internals
1311@cindex internals, of process
1312@cindex process internals
1313
1314 The fields of a process are:
1315
1316@table @code
1317@item name
1318A string, the name of the process.
1319
1320@item command
1321A list containing the command arguments that were used to start this
1322process.
1323
1324@item filter
1325A function used to accept output from the process instead of a buffer,
1326or @code{nil}.
1327
1328@item sentinel
1329A function called whenever the process receives a signal, or @code{nil}.
1330
1331@item buffer
1332The associated buffer of the process.
1333
1334@item pid
1335An integer, the Unix process @sc{id}.
1336
1337@item childp
1338A flag, non-@code{nil} if this is really a child process.
1339It is @code{nil} for a network connection.
1340
a44af9f2 1341@item mark
574efc83
RS
1342A marker indicating the position of the end of the last output from this
1343process inserted into the buffer. This is often but not always the end
1344of the buffer.
a44af9f2
RS
1345
1346@item kill_without_query
a890e1b0
RS
1347If this is non-@code{nil}, killing Emacs while this process is still
1348running does not ask for confirmation about killing the process.
1349
1350@item raw_status_low
1351@itemx raw_status_high
1352These two fields record 16 bits each of the process status returned by
1353the @code{wait} system call.
1354
1355@item status
1356The process status, as @code{process-status} should return it.
1357
1358@item tick
1359@itemx update_tick
1360If these two fields are not equal, a change in the status of the process
1361needs to be reported, either by running the sentinel or by inserting a
1362message in the process buffer.
1363
1364@item pty_flag
1365Non-@code{nil} if communication with the subprocess uses a @sc{pty};
1366@code{nil} if it uses a pipe.
1367
1368@item infd
1369The file descriptor for input from the process.
1370
1371@item outfd
1372The file descriptor for output to the process.
1373
1374@item subtty
1375The file descriptor for the terminal that the subprocess is using. (On
1376some systems, there is no need to record this, so the value is
1377@code{nil}.)
bfe721d1
KH
1378
1379@item tty_name
1380The name of the terminal that the subprocess is using,
1381or @code{nil} if it is using pipes.
95260b26
GM
1382
1383@item decode_coding_system
1384Coding-system for decoding the input from this process.
1385
1386@item decoding_buf
1387A working buffer for decoding.
1388
1389@item decoding_carryover
1390Size of carryover in decoding.
1391
1392@item encode_coding_system
1393Coding-system for encoding the output to this process.
1394
1395@item encoding_buf
1396A working buffer for enecoding.
1397
1398@item encoding_carryover
1399Size of carryover in encoding.
1400
1401@item inherit_coding_system_flag
1402Flag to set @code{coding-system} of the process buffer from the
1403coding system used to decode process output.
a44af9f2 1404@end table