Mercurial > hg > xemacs-beta
view man/lispref/annotations.texi @ 70:131b0175ea99 r20-0b30
Import from CVS: tag r20-0b30
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:02:59 +0200 |
parents | 05472e90ae02 |
children | 1856695b1fa9 |
line wrap: on
line source
@c -*-texinfo-*- @c This is part of the XEmacs Lisp Reference Manual. @c Copyright (C) 1990, 1991, 1992, 1993 Free Software Foundation, Inc. @c Copyright (C) 1995 Ben Wing. @c See the file lispref.texi for copying conditions. @setfilename ../../info/annotations.info @node Annotations, Display, Glyphs, top @chapter Annotations @cindex annotation An @dfn{annotation} is a pixmap or string that is not part of a buffer's text but is displayed next to a particular location in a buffer. Annotations can be displayed intermixed with text, in any whitespace at the beginning or end of a line, or in a special area at the left or right side of the frame called a @dfn{margin}, whose size is controllable. Annotations are implemented using extents (@pxref{Extents}); but you can work with annotations without knowing how extents work. @menu * Annotation Basics:: Introduction to annotations. * Annotation Primitives:: Creating and deleting annotations. * Annotation Properties:: Retrieving and changing the characteristics of an annotation. * Margin Primitives:: Controlling the size of the margins. * Locating Annotations:: Looking for annotations in a buffer. * Annotation Hooks:: Hooks called at certain times during an annotation's lifetime. @end menu @node Annotation Basics @section Annotation Basics @cindex margin Marginal annotations are notes associated with a particular location in a buffer. They may be displayed in a margin created on the left-hand or right-hand side of the frame, in any whitespace at the beginning or end of a line, or inside of the text itself. Every annotation may have an associated action to be performed when the annotation is selected. The term @dfn{annotation} is used to refer to an individual note. The term @dfn{margin} is generically used to refer to the whitespace before the first character on a line or after the last character on a line. Each annotation has the following characteristics: @table @var @item glyph This is a glyph object and is used as the displayed representation of the annotation. @item down-glyph If given, this glyph is used as the displayed representation of the annotation when the mouse is pressed down over the annotation. @item face The face with which to display the glyph. @item side Which side of the text (left or right) the annotation is displayed at. @item action If non-@code{nil}, this field must contain a function capable of being the first argument to @code{funcall}. This function is normally evaluated with a single argument, the value of the @var{data} field, each time the annotation is selected. However, if the @var{with-event} parameter to @code{make-annotation} is non-@code{nil}, the function is called with two arguments. The first argument is the same as before, and the second argument is the event (a button-up event, usually) that activated the annotation. @item data Not used internally. This field can contain any E-Lisp object. It is passed as the first argument to @var{action} described above. @item menu A menu displayed when the right mouse button is pressed over the annotation. @end table @cindex outside margin @cindex inside margin The margin is divided into @dfn{outside} and @dfn{inside}. The outside margin is space on the left or right side of the frame which normal text cannot be displayed in. The inside margin is that space between the leftmost or rightmost point at which text can be displayed and where the first or last character actually is. @cindex layout types There are four different @dfn{layout types} which affect the exact location an annotation appears. @table @code @item outside-margin The annotation is placed in the outside margin area. as close as possible to the edge of the frame. If the outside margin is not wide enough for an annotation to fit, it is not displayed. @item inside-margin The annotation is placed in the inside margin area, as close as possible to the edge of the frame. If the inside margin is not wide enough for the annotation to fit, it will be displayed using any available outside margin space if and only if the specifier @code{use-left-overflow} or @code{use-right-overflow} (depending on which side the annotation appears in) is non-@code{nil}. @item whitespace The annotation is placed in the inside margin area, as close as possible to the first or last non-whitespace character on a line. If the inside margin is not wide enough for the annotation to fit, it will be displayed if and only if the specifier @code{use-left-overflow} or @code{use-right-overflow} (depending on which side the annotation appears in) is non-@code{nil}. @item text The annotation is placed at the position it is inserted. It will create enough space for itself inside of the text area. It does not take up a place in the logical buffer, only in the display of the buffer. @end table @cindex layout policy The current layout policy is that all @code{whitespace} annotations are displayed first. Next, all @code{inside-margin} annotations are displayed using any remaining space. Finally as many @code{outside-margin} annotations are displayed as possible. The @code{text} annotations will always display as they create their own space to display in. @node Annotation Primitives @section Annotation Primitives @defun make-annotation glyph &optional position layout buffer with-event d-glyph rightp This function creates a marginal annotation at position @var{pos} in @var{buffer}. The annotation is displayed using @var{glyph}, which should be a glyph object or a string, and is positioned using layout policy @var{layout}. If @var{pos} is @code{nil}, point is used. If @var{layout} is @code{nil}, @code{whitespace} is used. If @var{buffer} is @code{nil}, the current buffer is used. If @var{with-event} is non-@code{nil}, then when an annotation is activated, the triggering event is passed as the second arg to the annotation function. If @var{d-glyph} is non-@code{nil} then it is used as the glyph that will be displayed when button1 is down. If @var{rightp} is non-@code{nil} then the glyph will be displayed on the right side of the buffer instead of the left. The newly created annotation is returned. @end defun @defun delete-annotation annotation This function removes @var{annotation} from its buffer. This does not modify the buffer text. The annotation deleted is returned. @end defun @defun annotationp annotation This function returns @code{t} if @var{annotation} is an annotation, @code{nil} otherwise. @end defun @node Annotation Properties @section Annotation Properties @defun annotation-glyph annotation This function returns the glyph object used to display @var{annotation}. @end defun @defun set-annotation-glyph annotation glyph &optional layout side This function sets the glyph of @var{annotation} to @var{glyph}, which should be a glyph object. If @var{layout} is non-@code{nil}, set the layout policy of @var{annotation} to @var{layout}. If @var{side} is @code{left} or @code{right}, change the side of the buffer at which the annotation is displayed to the given side. The new value of @code{annotation-glyph} is returned. @end defun @defun annotation-down-glyph annotation This function returns the glyph used to display @var{annotation} when the left mouse button is depressed on the annotation. @end defun @defun set-annotation-down-glyph annotation glyph This function returns the glyph used to display @var{annotation} when the left mouse button is depressed on the annotation to @var{glyph}, which should be a glyph object. @end defun @defun annotation-face annotation This function returns the face associated with @var{annotation}. @end defun @defun set-annotation-face annotation face This function sets the face associated with @var{annotation} to @var{face}. @end defun @defun annotation-layout annotation This function returns the layout policy of @var{annotation}. @end defun @defun set-annotation-layout annotation layout This function sets the layout policy of @var{annotation} to @var{layout}. @end defun @defun annotation-side annotation This function returns the side of the buffer that @var{annotation} is displayed on. Return value is a symbol, either @code{left} or @code{right}. @end defun @defun annotation-data annotation This function returns the data associated with @var{annotation}. @end defun @defun set-annotation-data annotation data This function sets the data field of @var{annotation} to @var{data}. @var{data} is returned. @end defun @defun annotation-action annotation This function returns the action associated with @var{annotation}. @end defun @defun set-annotation-action annotation action This function sets the action field of @var{annotation} to @var{action}. @var{action} is returned.. @end defun @defun annotation-menu annotation This function returns the menu associated with @var{annotation}. @end defun @defun set-annotation-menu annotation menu This function sets the menu associated with @var{annotation} to @var{menu}. This menu will be displayed when the right mouse button is pressed over the annotation. @end defun @defun annotation-visible annotation This function returns @code{t} if there is enough available space to display @var{annotation}, @code{nil} otherwise. @end defun @defun annotation-width annotation This function returns the width of @var{annotation} in pixels. @end defun @defun hide-annotation annotation This function removes @var{annotation}'s glyph, making it invisible. @end defun @defun reveal-annotation annotation This function restores @var{annotation}'s glyph, making it visible. @end defun @node Locating Annotations @section Locating Annotations @defun annotations-in-region start end buffer This function returns a list of all annotations in @var{buffer} which are between @var{start} and @var{end} inclusively. @end defun @defun annotations-at &optional position buffer This function returns a list of all annotations at @var{position} in @var{buffer}. If @var{position} is @code{nil} point is used. If @var{buffer} is @code{nil} the current buffer is used. @end defun @defun annotation-list &optional buffer This function returns a list of all annotations in @var{buffer}. If @var{buffer} is @code{nil}, the current buffer is used. @end defun @defun all-annotations This function returns a list of all annotations in all buffers in existence. @end defun @node Margin Primitives @section Margin Primitives @cindex margin width The margin widths are controllable on a buffer-local, window-local, frame-local, device-local, or device-type-local basis through the use of specifiers. @xref{Specifiers}. @defvr Specifier left-margin-width This is a specifier variable controlling the width of the left outside margin, in characters. Use @code{set-specifier} to change its value. @end defvr @defvr Specifier right-margin-width This is a specifier variable controlling the width of the right outside margin, in characters. Use @code{set-specifier} to change its value. @end defvr @defvr Specifier use-left-overflow If non-@code{nil}, use the left outside margin as extra whitespace when displaying @code{whitespace} and @code{inside-margin} annotations. Defaults to @code{nil}. This is a specifier variable; use @code{set-specifier} to change its value. @end defvr @defvr Specifier use-right-overflow If non-@code{nil}, use the right outside margin as extra whitespace when displaying @code{whitespace} and @code{inside-margin} annotations. Defaults to @code{nil}. This is a specifier variable; use @code{set-specifier} to change its value. @end defvr @defun window-left-margin-pixel-width &optional window This function returns the width in pixels of the left outside margin of @var{window}. If @var{window} is @code{nil}, the selected window is assumed. @end defun @defun window-right-margin-pixel-width &optional window This function returns the width in pixels of the right outside margin of @var{window}. If @var{window} is @code{nil}, the selected window is assumed. @end defun The margin colors are controlled by the faces @code{left-margin} and @code{right-margin}. These can be set using the X resources @code{Emacs.left-margin.background} and @code{Emacs.left-margin.foreground}; likewise for the right margin. @node Annotation Hooks @section Annotation Hooks @cindex annotation hooks The following three hooks are provided for use with the marginal annotations: @table @code @item before-delete-annotation-hook This hook is called immediately before an annotation is destroyed. It is passed a single argument, the annotation being destroyed. @item after-delete-annotation-hook This normal hook is called immediately after an annotation is destroyed. @item make-annotation-hook This hook is called immediately after an annotation is created. It is passed a single argument, the newly created annotation. @end table