annotate lispref/internals.texi @ 69478:e8bb5df2ba7a

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