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