428
+ − 1 @c -*-texinfo-*-
+ − 2 @c This is part of the XEmacs Lisp Reference Manual.
444
+ − 3 @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc.
428
+ − 4 @c Copyright (C) 1995 Ben Wing.
+ − 5 @c See the file lispref.texi for copying conditions.
+ − 6 @setfilename ../../info/annotations.info
+ − 7 @node Annotations, Display, Glyphs, top
+ − 8 @chapter Annotations
+ − 9 @cindex annotation
+ − 10
+ − 11 An @dfn{annotation} is a pixmap or string that is not part of a buffer's
+ − 12 text but is displayed next to a particular location in a buffer.
+ − 13 Annotations can be displayed intermixed with text, in any whitespace at
+ − 14 the beginning or end of a line, or in a special area at the left or
+ − 15 right side of the frame called a @dfn{margin}, whose size is
+ − 16 controllable. Annotations are implemented using extents
+ − 17 (@pxref{Extents}); but you can work with annotations without knowing how
+ − 18 extents work.
+ − 19
+ − 20 @menu
+ − 21 * Annotation Basics:: Introduction to annotations.
+ − 22 * Annotation Primitives:: Creating and deleting annotations.
+ − 23 * Annotation Properties:: Retrieving and changing the characteristics
+ − 24 of an annotation.
+ − 25 * Margin Primitives:: Controlling the size of the margins.
+ − 26 * Locating Annotations:: Looking for annotations in a buffer.
+ − 27 * Annotation Hooks:: Hooks called at certain times during an
+ − 28 annotation's lifetime.
+ − 29 @end menu
+ − 30
+ − 31 @node Annotation Basics
+ − 32 @section Annotation Basics
+ − 33
+ − 34 @cindex margin
+ − 35 Marginal annotations are notes associated with a particular location in
+ − 36 a buffer. They may be displayed in a margin created on the left-hand or
+ − 37 right-hand side of the frame, in any whitespace at the beginning or end
+ − 38 of a line, or inside of the text itself. Every annotation may have an
+ − 39 associated action to be performed when the annotation is selected. The
+ − 40 term @dfn{annotation} is used to refer to an individual note. The term
+ − 41 @dfn{margin} is generically used to refer to the whitespace before the
+ − 42 first character on a line or after the last character on a line.
+ − 43
+ − 44 Each annotation has the following characteristics:
+ − 45 @table @var
+ − 46 @item glyph
+ − 47 This is a glyph object and is used as the displayed representation
+ − 48 of the annotation.
+ − 49 @item down-glyph
+ − 50 If given, this glyph is used as the displayed representation
+ − 51 of the annotation when the mouse is pressed down over the annotation.
+ − 52 @item face
+ − 53 The face with which to display the glyph.
+ − 54 @item side
+ − 55 Which side of the text (left or right) the annotation is displayed at.
+ − 56 @item action
+ − 57 If non-@code{nil}, this field must contain a function capable of being
+ − 58 the first argument to @code{funcall}. This function is normally
+ − 59 evaluated with a single argument, the value of the @var{data} field,
+ − 60 each time the annotation is selected. However, if the @var{with-event}
+ − 61 parameter to @code{make-annotation} is non-@code{nil}, the function
+ − 62 is called with two arguments. The first argument is the same as
+ − 63 before, and the second argument is the event (a button-up event,
+ − 64 usually) that activated the annotation.
+ − 65 @item data
+ − 66 Not used internally. This field can contain any E-Lisp object. It is
+ − 67 passed as the first argument to @var{action} described above.
+ − 68 @item menu
+ − 69 A menu displayed when the right mouse button is pressed over the
+ − 70 annotation.
+ − 71 @end table
+ − 72
+ − 73 @cindex outside margin
+ − 74 @cindex inside margin
+ − 75 The margin is divided into @dfn{outside} and @dfn{inside}. The outside
+ − 76 margin is space on the left or right side of the frame which normal text
+ − 77 cannot be displayed in. The inside margin is that space between the
+ − 78 leftmost or rightmost point at which text can be displayed and where the
+ − 79 first or last character actually is.
+ − 80
+ − 81 @cindex layout types
+ − 82 There are four different @dfn{layout types} which affect the exact
+ − 83 location an annotation appears.
+ − 84
+ − 85 @table @code
+ − 86 @item outside-margin
+ − 87 The annotation is placed in the outside margin area. as close as
+ − 88 possible to the edge of the frame. If the outside margin is not wide
+ − 89 enough for an annotation to fit, it is not displayed.
+ − 90
+ − 91 @item inside-margin
+ − 92 The annotation is placed in the inside margin area, as close as possible
+ − 93 to the edge of the frame. If the inside margin is not wide enough for
+ − 94 the annotation to fit, it will be displayed using any available outside
+ − 95 margin space if and only if the specifier @code{use-left-overflow} or
+ − 96 @code{use-right-overflow} (depending on which side the annotation
+ − 97 appears in) is non-@code{nil}.
+ − 98
+ − 99 @item whitespace
+ − 100 The annotation is placed in the inside margin area, as close as possible
+ − 101 to the first or last non-whitespace character on a line. If the inside
+ − 102 margin is not wide enough for the annotation to fit, it will be
+ − 103 displayed if and only if the specifier @code{use-left-overflow} or
+ − 104 @code{use-right-overflow} (depending on which side the annotation
+ − 105 appears in) is non-@code{nil}.
+ − 106
+ − 107 @item text
+ − 108 The annotation is placed at the position it is inserted. It will create
+ − 109 enough space for itself inside of the text area. It does not take up a
+ − 110 place in the logical buffer, only in the display of the buffer.
+ − 111 @end table
+ − 112
+ − 113 @cindex layout policy
+ − 114 The current layout policy is that all @code{whitespace} annotations are
+ − 115 displayed first. Next, all @code{inside-margin} annotations are
+ − 116 displayed using any remaining space. Finally as many
+ − 117 @code{outside-margin} annotations are displayed as possible. The
+ − 118 @code{text} annotations will always display as they create their own
+ − 119 space to display in.
+ − 120
+ − 121
+ − 122 @node Annotation Primitives
+ − 123 @section Annotation Primitives
+ − 124
+ − 125 @defun make-annotation glyph &optional position layout buffer with-event d-glyph rightp
444
+ − 126 This function creates a marginal annotation at position @var{position} in
428
+ − 127 @var{buffer}. The annotation is displayed using @var{glyph}, which
+ − 128 should be a glyph object or a string, and is positioned using layout
444
+ − 129 policy @var{layout}. If @var{position} is @code{nil}, point is used. If
428
+ − 130 @var{layout} is @code{nil}, @code{whitespace} is used. If @var{buffer}
+ − 131 is @code{nil}, the current buffer is used.
+ − 132
+ − 133 If @var{with-event} is non-@code{nil}, then when an annotation is
+ − 134 activated, the triggering event is passed as the second arg to the
+ − 135 annotation function. If @var{d-glyph} is non-@code{nil} then it is used
+ − 136 as the glyph that will be displayed when button1 is down. If
+ − 137 @var{rightp} is non-@code{nil} then the glyph will be displayed on the
+ − 138 right side of the buffer instead of the left.
+ − 139
+ − 140 The newly created annotation is returned.
+ − 141 @end defun
+ − 142
+ − 143 @defun delete-annotation annotation
+ − 144 This function removes @var{annotation} from its buffer. This does not
+ − 145 modify the buffer text.
+ − 146 @end defun
+ − 147
+ − 148 @defun annotationp annotation
+ − 149 This function returns @code{t} if @var{annotation} is an annotation,
+ − 150 @code{nil} otherwise.
+ − 151 @end defun
+ − 152
+ − 153 @node Annotation Properties
+ − 154 @section Annotation Properties
+ − 155
+ − 156 @defun annotation-glyph annotation
+ − 157 This function returns the glyph object used to display @var{annotation}.
+ − 158 @end defun
+ − 159
+ − 160 @defun set-annotation-glyph annotation glyph &optional layout side
+ − 161 This function sets the glyph of @var{annotation} to @var{glyph}, which
+ − 162 should be a glyph object. If @var{layout} is non-@code{nil}, set the
+ − 163 layout policy of @var{annotation} to @var{layout}. If @var{side} is
+ − 164 @code{left} or @code{right}, change the side of the buffer at which the
+ − 165 annotation is displayed to the given side. The new value of
+ − 166 @code{annotation-glyph} is returned.
+ − 167 @end defun
+ − 168
+ − 169 @defun annotation-down-glyph annotation
+ − 170 This function returns the glyph used to display @var{annotation} when
+ − 171 the left mouse button is depressed on the annotation.
+ − 172 @end defun
+ − 173
+ − 174 @defun set-annotation-down-glyph annotation glyph
+ − 175 This function returns the glyph used to display @var{annotation} when
+ − 176 the left mouse button is depressed on the annotation to @var{glyph},
+ − 177 which should be a glyph object.
+ − 178 @end defun
+ − 179
+ − 180 @defun annotation-face annotation
+ − 181 This function returns the face associated with @var{annotation}.
+ − 182 @end defun
444
+ − 183
428
+ − 184 @defun set-annotation-face annotation face
+ − 185 This function sets the face associated with @var{annotation} to
+ − 186 @var{face}.
+ − 187 @end defun
+ − 188
+ − 189 @defun annotation-layout annotation
+ − 190 This function returns the layout policy of @var{annotation}.
+ − 191 @end defun
+ − 192
+ − 193 @defun set-annotation-layout annotation layout
+ − 194 This function sets the layout policy of @var{annotation} to
+ − 195 @var{layout}.
+ − 196 @end defun
+ − 197
+ − 198 @defun annotation-side annotation
+ − 199 This function returns the side of the buffer that @var{annotation} is
+ − 200 displayed on. Return value is a symbol, either @code{left} or
+ − 201 @code{right}.
+ − 202 @end defun
+ − 203
+ − 204 @defun annotation-data annotation
+ − 205 This function returns the data associated with @var{annotation}.
+ − 206 @end defun
+ − 207
+ − 208 @defun set-annotation-data annotation data
+ − 209 This function sets the data field of @var{annotation} to @var{data}.
+ − 210 @var{data} is returned.
+ − 211 @end defun
+ − 212
+ − 213 @defun annotation-action annotation
+ − 214 This function returns the action associated with @var{annotation}.
+ − 215 @end defun
+ − 216
+ − 217 @defun set-annotation-action annotation action
+ − 218 This function sets the action field of @var{annotation} to @var{action}.
+ − 219 @var{action} is returned..
+ − 220 @end defun
+ − 221
+ − 222 @defun annotation-menu annotation
+ − 223 This function returns the menu associated with @var{annotation}.
+ − 224 @end defun
+ − 225
+ − 226 @defun set-annotation-menu annotation menu
+ − 227 This function sets the menu associated with @var{annotation} to
+ − 228 @var{menu}. This menu will be displayed when the right mouse button is
+ − 229 pressed over the annotation.
+ − 230 @end defun
+ − 231
+ − 232 @defun annotation-visible annotation
+ − 233 This function returns @code{t} if there is enough available space to
+ − 234 display @var{annotation}, @code{nil} otherwise.
+ − 235 @end defun
+ − 236
+ − 237 @defun annotation-width annotation
+ − 238 This function returns the width of @var{annotation} in pixels.
+ − 239 @end defun
+ − 240
+ − 241 @defun hide-annotation annotation
+ − 242 This function removes @var{annotation}'s glyph, making it invisible.
+ − 243 @end defun
+ − 244
+ − 245 @defun reveal-annotation annotation
+ − 246 This function restores @var{annotation}'s glyph, making it visible.
+ − 247 @end defun
+ − 248
+ − 249 @node Locating Annotations
+ − 250 @section Locating Annotations
+ − 251
+ − 252 @defun annotations-in-region start end buffer
+ − 253 This function returns a list of all annotations in @var{buffer} which
+ − 254 are between @var{start} and @var{end} inclusively.
+ − 255 @end defun
+ − 256
+ − 257 @defun annotations-at &optional position buffer
+ − 258 This function returns a list of all annotations at @var{position} in
+ − 259 @var{buffer}. If @var{position} is @code{nil} point is used. If
+ − 260 @var{buffer} is @code{nil} the current buffer is used.
+ − 261 @end defun
+ − 262
+ − 263 @defun annotation-list &optional buffer
+ − 264 This function returns a list of all annotations in @var{buffer}. If
+ − 265 @var{buffer} is @code{nil}, the current buffer is used.
+ − 266 @end defun
+ − 267
+ − 268 @defun all-annotations
+ − 269 This function returns a list of all annotations in all buffers in
+ − 270 existence.
+ − 271 @end defun
+ − 272
+ − 273 @node Margin Primitives
+ − 274 @section Margin Primitives
+ − 275 @cindex margin width
+ − 276
+ − 277 The margin widths are controllable on a buffer-local, window-local,
+ − 278 frame-local, device-local, or device-type-local basis through the
+ − 279 use of specifiers. @xref{Specifiers}.
+ − 280
+ − 281 @defvr Specifier left-margin-width
+ − 282 This is a specifier variable controlling the width of the left outside
+ − 283 margin, in characters. Use @code{set-specifier} to change its value.
+ − 284 @end defvr
+ − 285
+ − 286 @defvr Specifier right-margin-width
+ − 287 This is a specifier variable controlling the width of the right outside
+ − 288 margin, in characters. Use @code{set-specifier} to change its value.
+ − 289 @end defvr
+ − 290
+ − 291 @defvr Specifier use-left-overflow
+ − 292 If non-@code{nil}, use the left outside margin as extra whitespace when
+ − 293 displaying @code{whitespace} and @code{inside-margin} annotations.
+ − 294 Defaults to @code{nil}. This is a specifier variable; use
+ − 295 @code{set-specifier} to change its value.
+ − 296 @end defvr
+ − 297
+ − 298 @defvr Specifier use-right-overflow
+ − 299 If non-@code{nil}, use the right outside margin as extra whitespace when
+ − 300 displaying @code{whitespace} and @code{inside-margin} annotations.
+ − 301 Defaults to @code{nil}. This is a specifier variable; use
+ − 302 @code{set-specifier} to change its value.
+ − 303 @end defvr
+ − 304
+ − 305 @defun window-left-margin-pixel-width &optional window
+ − 306 This function returns the width in pixels of the left outside margin of
+ − 307 @var{window}. If @var{window} is @code{nil}, the selected window is
+ − 308 assumed.
+ − 309 @end defun
+ − 310
+ − 311 @defun window-right-margin-pixel-width &optional window
+ − 312 This function returns the width in pixels of the right outside margin of
+ − 313 @var{window}. If @var{window} is @code{nil}, the selected window is
+ − 314 assumed.
+ − 315 @end defun
+ − 316
+ − 317 The margin colors are controlled by the faces @code{left-margin} and
+ − 318 @code{right-margin}. These can be set using the X resources
+ − 319 @code{Emacs.left-margin.background} and
+ − 320 @code{Emacs.left-margin.foreground}; likewise for the right margin.
+ − 321
+ − 322
+ − 323 @node Annotation Hooks
+ − 324 @section Annotation Hooks
+ − 325 @cindex annotation hooks
+ − 326
+ − 327 The following three hooks are provided for use with the marginal annotations:
+ − 328
+ − 329 @table @code
+ − 330 @item before-delete-annotation-hook
+ − 331 This hook is called immediately before an annotation is destroyed. It
+ − 332 is passed a single argument, the annotation being destroyed.
+ − 333
+ − 334 @item after-delete-annotation-hook
+ − 335 This normal hook is called immediately after an annotation is destroyed.
+ − 336
+ − 337 @item make-annotation-hook
+ − 338 This hook is called immediately after an annotation is created. It is
+ − 339 passed a single argument, the newly created annotation.
+ − 340 @end table