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