view man/lispref/gutter.texi @ 2367:ecf1ebac70d8

[xemacs-hg @ 2004-11-04 23:05:23 by ben] commit mega-patch configure.in: Turn off -Winline and -Wchar-subscripts. Use the right set of cflags when compiling modules. Rewrite ldap configuration to separate the inclusion of lber (needed in recent Cygwin) from the basic checks for the needed libraries. add a function for MAKE_JUNK_C; initially code was added to generate xemacs.def using this, but it will need to be rewritten. add an rm -f for junk.c to avoid weird Cygwin bug with cp -f onto an existing file. Sort list of auto-detected functions and eliminate unused checks for stpcpy, setlocale and getwd. Add autodetection of Cygwin scanf problems BETA: Rewrite section on configure to indicate what flags are important and what not. digest-doc.c, make-dump-id.c, profile.c, sorted-doc.c: Add proper decls for main(). make-msgfile.c: Document that this is old junk. Move proposal to text.c. make-msgfile.lex: Move proposal to text.c. make-mswin-unicode.pl: Convert error-generating code so that the entire message will be seen as a single unrecognized token. mule/mule-ccl.el: Update docs. lispref/mule.texi: Update CCL docs. ldap/eldap.c: Mule-ize. Use EXTERNAL_LIST_LOOP_2 instead of deleted EXTERNAL_LIST_LOOP. * XEmacs 21.5.18 "chestnut" is released. --------------------------------------------------------------- MULE-RELATED WORK: --------------------------------------------------------------- --------------------------- byte-char conversion --------------------------- buffer.c, buffer.h, insdel.c, text.c: Port FSF algorithm for byte-char conversion, replacing broken previous version. Track the char position of the gap. Add functions to do char-byte conversion downwards as well as upwards. Move comments about algorithm workings to internals manual. --------------------------- work on types --------------------------- alloc.c, console-x-impl.h, dump-data.c, dump-data.h, dumper.c, dialog-msw.c, dired-msw.c, doc.c, editfns.c, esd.c, event-gtk.h, event-msw.c, events.c, file-coding.c, file-coding.h, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-shared.c, glyphs-x.c, glyphs.c, glyphs.h, gui.c, hpplay.c, imgproc.c, intl-win32.c, lrecord.h, lstream.c, keymap.c, lisp.h, libsst.c, linuxplay.c, miscplay.c, miscplay.h, mule-coding.c, nas.c, nt.c, ntheap.c, ntplay.c, objects-msw.c, objects-tty.c, objects-x.c, print.c, process-nt.c, process.c, redisplay.h, select-common.h, select-gtk.c, select-x.c, sgiplay.c, sound.c, sound.h, sunplay.c, sysfile.h, sysdep.c, syswindows.h, text.c, unexnt.c, win32.c, xgccache.c: Further work on types. This creates a full set of types for all the basic semantics of `char' that I have so far identified, so that its semantics can always be identified for the purposes of proper Mule-safe code, and the raw use of `char' always avoided. (1) More type renaming, for consistency of naming. Char_ASCII -> Ascbyte UChar_ASCII -> UAscbyte Char_Binary -> CBinbyte UChar_Binary -> Binbyte SChar_Binary -> SBinbyte (2) Introduce Rawbyte, CRawbyte, Boolbyte, Chbyte, UChbyte, and Bitbyte and use them. (3) New types Itext, Wexttext and Textcount for separating out the concepts of bytes and textual units (different under UTF-16 and UTF-32, which are potential internal encodings). (4) qxestr*_c -> qxestr*_ascii. lisp.h: New; goes with other qxe() functions. #### Maybe goes in a different section. lisp.h: Group generic int-type defs together with EMACS_INT defs. lisp.h: * lisp.h (WEXTTEXT_IS_WIDE) New defns. lisp.h: New type to replace places where int occurs as a boolean. It's signed because occasionally people may want to use -1 as an error value, and because unsigned ints are viral -- see comments in the internals manual against using them. dynarr.c: int -> Bytecount. --------------------------- Mule-izing --------------------------- device-x.c: Partially Mule-ize. dumper.c, dumper.h: Mule-ize. Use Rawbyte. Use stderr_out not printf. Use wext_*(). sysdep.c, syswindows.h, text.c: New Wexttext API for manipulation of external text that may be Unicode (e.g. startup code under Windows). emacs.c: Mule-ize. Properly deal with argv in external encoding. Use wext_*() and Wexttext. Use Rawbyte. #if 0 some old junk on SCO that is unlikely to be correct. Rewrite allocation code in run-temacs. emacs.c, symsinit.h, win32.c: Rename win32 init function and call it even earlier, to initialize mswindows_9x_p even earlier, for use in startup code (XEUNICODE_P). process.c: Use _wenviron not environ under Windows, to get Unicode environment variables. event-Xt.c: Mule-ize drag-n-drop related stuff. dragdrop.c, dragdrop.h, frame-x.c: Mule-ize. text.h: Add some more stand-in defines for particular kinds of conversion; use in Mule-ization work in frame-x.c etc. --------------------------- Freshening --------------------------- intl-auto-encap-win32.c, intl-auto-encap-win32.h: Regenerate. --------------------------- Unicode-work --------------------------- intl-win32.c, syswindows.h: Factor out common options to MultiByteToWideChar and WideCharToMultiByte. Add convert_unicode_to_multibyte_malloc() and convert_unicode_to_multibyte_dynarr() and use. Add stuff for alloca() conversion of multibyte/unicode. alloc.c: Use dfc_external_data_len() in case of unicode coding system. alloc.c, mule-charset.c: Don't zero out and reinit charset Unicode tables. This fucks up dump-time loading. Anyway, either we load them at dump time or run time, never both. unicode.c: Dump the blank tables as well. --------------------------------------------------------------- DOCUMENTATION, MOSTLY MULE-RELATED: --------------------------------------------------------------- EmacsFrame.c, emodules.c, event-Xt.c, fileio.c, input-method-xlib.c, mule-wnnfns.c, redisplay-gtk.c, redisplay-tty.c, redisplay-x.c, regex.c, sysdep.c: Add comment about Mule work needed. text.h: Add more documentation describing why DFC routines were not written to return their value. Add some other DFC documentation. console-msw.c, console-msw.h: Add pointer to docs in win32.c. emacs.c: Add comments on sources of doc info. text.c, charset.h, unicode.c, intl-win32.c, intl-encap-win32.c, text.h, file-coding.c, mule-coding.c: Collect background comments and related to text matters and internationalization, and proposals for work to be done, in text.c or Internals manual, stuff related to specific textual API's in text.h, and stuff related to internal implementation of Unicode conversion in unicode.c. Put lots of pointers to the comments to make them easier to find. s/mingw32.h, s/win32-common.h, s/win32-native.h, s/windowsnt.h, win32.c: Add bunches of new documentation on the different kinds of builds and environments under Windows and how they work. Collect this info in win32.c. Add pointers to these docs in the relevant s/* files. emacs.c: Document places with long comments. Remove comment about exiting, move to internals manual, put in pointer. event-stream.c: Move docs about event queues and focus to internals manual, put in pointer. events.h: Move docs about event stream callbacks to internals manual, put in pointer. profile.c, redisplay.c, signal.c: Move documentation to the Internals manual. process-nt.c: Add pointer to comment in win32-native.el. lisp.h: Add comments about some comment conventions. lisp.h: Add comment about the second argument. device-msw.c, redisplay-msw.c: @@#### comments are out-of-date. --------------------------------------------------------------- PDUMP WORK (MOTIVATED BY UNICODE CHANGES) --------------------------------------------------------------- alloc.c, buffer.c, bytecode.c, console-impl.h, console.c, device.c, dumper.c, lrecord.h, elhash.c, emodules.h, events.c, extents.c, frame.c, glyphs.c, glyphs.h, mule-charset.c, mule-coding.c, objects.c, profile.c, rangetab.c, redisplay.c, specifier.c, specifier.h, window.c, lstream.c, file-coding.h, file-coding.c: PDUMP: Properly implement dump_add_root_block(), which never worked before, and is necessary for dumping Unicode tables. Pdump name changes for accuracy: XD_STRUCT_PTR -> XD_BLOCK_PTR. XD_STRUCT_ARRAY -> XD_BLOCK_ARRAY. XD_C_STRING -> XD_ASCII_STRING. *_structure_* -> *_block_*. lrecord.h: some comments added about dump_add_root_block() vs dump_add_root_block_ptr(). extents.c: remove incorrect comment about pdump problems with gap array. --------------------------------------------------------------- ALLOCATION --------------------------------------------------------------- abbrev.c, alloc.c, bytecode.c, casefiddle.c, device-msw.c, device-x.c, dired-msw.c, doc.c, doprnt.c, dragdrop.c, editfns.c, emodules.c, file-coding.c, fileio.c, filelock.c, fns.c, glyphs-eimage.c, glyphs-gtk.c, glyphs-msw.c, glyphs-x.c, gui-msw.c, gui-x.c, imgproc.c, intl-win32.c, lread.c, menubar-gtk.c, menubar.c, nt.c, objects-msw.c, objects-x.c, print.c, process-nt.c, process-unix.c, process.c, realpath.c, redisplay.c, search.c, select-common.c, symbols.c, sysdep.c, syswindows.h, text.c, text.h, ui-byhand.c: New macros {alloca,xnew}_{itext,{i,ext,raw,bin,asc}bytes} for more convenient allocation of these commonly requested items. Modify functions to use alloca_ibytes, alloca_array, alloca_extbytes, xnew_ibytes, etc. also XREALLOC_ARRAY, xnew. alloc.c: Rewrite the allocation functions to factor out repeated code. Add assertions for freeing dumped data. lisp.h: Moved down and consolidated with other allocation stuff. lisp.h, dynarr.c: New functions for allocation that's very efficient when mostly in LIFO order. lisp.h, text.c, text.h: Factor out some stuff for general use by alloca()-conversion funs. text.h, lisp.h: Fill out convenience routines for allocating various kinds of bytes and put them in lisp.h. Use them in place of xmalloc(), ALLOCA(). text.h: Fill out the convenience functions so the _MALLOC() kinds match the alloca() kinds. --------------------------------------------------------------- ERROR-CHECKING --------------------------------------------------------------- text.h: Create ASSERT_ASCTEXT_ASCII() and ASSERT_ASCTEXT_ASCII_LEN() from similar Eistring checkers and change the Eistring checkers to use them instead. --------------------------------------------------------------- MACROS IN LISP.H --------------------------------------------------------------- lisp.h: Redo GCPRO declarations. Create a "base" set of functions that can be used to generate any kind of gcpro sets -- regular, ngcpro, nngcpro, private ones used in GC_EXTERNAL_LIST_LOOP_2. buffer.c, callint.c, chartab.c, console-msw.c, device-x.c, dialog-msw.c, dired.c, extents.c, ui-gtk.c, rangetab.c, nt.c, mule-coding.c, minibuf.c, menubar-msw.c, menubar.c, menubar-gtk.c, lread.c, lisp.h, gutter.c, glyphs.c, glyphs-widget.c, fns.c, fileio.c, file-coding.c, specifier.c: Eliminate EXTERNAL_LIST_LOOP, which does not check for circularities. Use EXTERNAL_LIST_LOOP_2 instead or EXTERNAL_LIST_LOOP_3 or EXTERNAL_PROPERTY_LIST_LOOP_3 or GC_EXTERNAL_LIST_LOOP_2 (new macro). Removed/redid comments on EXTERNAL_LIST_LOOP. --------------------------------------------------------------- SPACING FIXES --------------------------------------------------------------- callint.c, hftctl.c, number-gmp.c, process-unix.c: Spacing fixes. --------------------------------------------------------------- FIX FOR GEOMETRY PROBLEM IN FIRST FRAME --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. toolbar.c: bug fix for problem of initial frame being 77 chars wide on Windows. will be overridden by my other ws. --------------------------------------------------------------- FIX FOR LEAKING PROCESS HANDLES: --------------------------------------------------------------- process-nt.c: Fixes for leaking handles. Inspired by work done by Adrian Aichner <adrian@xemacs.org>. --------------------------------------------------------------- FIX FOR CYGWIN BUG (Unicode-related): --------------------------------------------------------------- unicode.c: Add workaround for newlib bug in sscanf() [should be fixed by release 1.5.12 of Cygwin]. --------------------------------------------------------------- WARNING FIXES: --------------------------------------------------------------- console-stream.c: `reinit' is unused. compiler.h, event-msw.c, frame-msw.c, intl-encap-win32.c, text.h: Add stuff to deal with ANSI-aliasing warnings I got. regex.c: Gather includes together to avoid warning. --------------------------------------------------------------- CHANGES TO INITIALIZATION ROUTINES: --------------------------------------------------------------- buffer.c, emacs.c, console.c, debug.c, device-x.c, device.c, dragdrop.c, emodules.c, eval.c, event-Xt.c, event-gtk.c, event-msw.c, event-stream.c, event-tty.c, events.c, extents.c, faces.c, file-coding.c, fileio.c, font-lock.c, frame-msw.c, glyphs-widget.c, glyphs.c, gui-x.c, insdel.c, lread.c, lstream.c, menubar-gtk.c, menubar-x.c, minibuf.c, mule-wnnfns.c, objects-msw.c, objects.c, print.c, scrollbar-x.c, search.c, select-x.c, text.c, undo.c, unicode.c, window.c, symsinit.h: Call reinit_*() functions directly from emacs.c, for clarity. Factor out some redundant init code. Move disallowed stuff that had crept into vars_of_glyphs() into complex_vars_of_glyphs(). Call init_eval_semi_early() from eval.c not in the middle of vars_of_() in emacs.c since there should be no order dependency in the latter calls. --------------------------------------------------------------- ARMAGEDDON: --------------------------------------------------------------- alloc.c, emacs.c, lisp.h, print.c: Rename inhibit_non_essential_printing_operations to inhibit_non_essential_conversion_operations. text.c: Assert on !inhibit_non_essential_conversion_operations. console-msw.c, print.c: Don't do conversion in SetConsoleTitle or FindWindow to avoid problems during armageddon. Put #errors for NON_ASCII_INTERNAL_FORMAT in places where problems would arise. --------------------------------------------------------------- CHANGES TO THE BUILD PROCEDURE: --------------------------------------------------------------- config.h.in, s/cxux.h, s/usg5-4-2.h, m/powerpc.h: Add comment about correct ordering of this file. Rearrange everything to follow this -- put all #undefs together and before the s&m files. Add undefs for HAVE_ALLOCA, C_ALLOCA, BROKEN_ALLOCA_IN_FUNCTION_CALLS, STACK_DIRECTION. Remove unused HAVE_STPCPY, HAVE_GETWD, HAVE_SETLOCALE. m/gec63.h: Deleted; totally broken, not used at all, not in FSF. m/7300.h, m/acorn.h, m/alliant-2800.h, m/alliant.h, m/altos.h, m/amdahl.h, m/apollo.h, m/att3b.h, m/aviion.h, m/celerity.h, m/clipper.h, m/cnvrgnt.h, m/convex.h, m/cydra5.h, m/delta.h, m/delta88k.h, m/dpx2.h, m/elxsi.h, m/ews4800r.h, m/gould.h, m/hp300bsd.h, m/hp800.h, m/hp9000s300.h, m/i860.h, m/ibmps2-aix.h, m/ibmrs6000.h, m/ibmrt-aix.h, m/ibmrt.h, m/intel386.h, m/iris4d.h, m/iris5d.h, m/iris6d.h, m/irist.h, m/isi-ov.h, m/luna88k.h, m/m68k.h, m/masscomp.h, m/mg1.h, m/mips-nec.h, m/mips-siemens.h, m/mips.h, m/news.h, m/nh3000.h, m/nh4000.h, m/ns32000.h, m/orion105.h, m/pfa50.h, m/plexus.h, m/pmax.h, m/powerpc.h, m/pyrmips.h, m/sequent-ptx.h, m/sequent.h, m/sgi-challenge.h, m/symmetry.h, m/tad68k.h, m/tahoe.h, m/targon31.h, m/tekxd88.h, m/template.h, m/tower32.h, m/tower32v3.h, m/ustation.h, m/vax.h, m/wicat.h, m/xps100.h: Delete C_ALLOCA, HAVE_ALLOCA, STACK_DIRECTION, BROKEN_ALLOCA_IN_FUNCTION_CALLS. All of this is auto-detected. When in doubt, I followed recent FSF sources, which also have these things deleted.
author ben
date Thu, 04 Nov 2004 23:08:28 +0000
parents 2ba4f06a264d
children 9fae6227ede5
line wrap: on
line source

@c -*-texinfo-*-
@c This is part of the XEmacs Lisp Reference Manual.
@c Copyright (C) 1994, 1995 Ben Wing.
@c Copyright (C) 1999 Andy Piper.
@c Copyright (C) 1999 Stephen J. Turnbull.
@c See the file lispref.texi for copying conditions.
@setfilename ../../info/gutter.info
@node Gutter, Scrollbars, Toolbar, top
@chapter Gutter
@cindex gutter

  A gutter is a rectangle displayed along one edge of a frame.  It
can contain arbitrary text or graphics.

@menu
* Gutter Intro::		An introduction.
* Creating Gutters::            How to create a gutter.
* Specifying a Gutter::		Setting a gutter's contents.
* Other Gutter Variables::	Controlling the size of gutters.
* Common Gutter Widgets::       Things to put in gutters.
@end menu

@node Gutter Intro, Creating Gutters, Gutter, Gutter
@section Gutter Intro

  A @dfn{gutter} is a rectangle displayed along one edge of a frame.  It
can contain arbitrary text or graphics.  It could be considered a
generalization of a toolbar, although toolbars are not currently
implemented using gutters.

  In XEmacs, a gutter can be displayed along any of the four edges
of the frame, and two or more different edges can be displaying
gutters simultaneously.  The contents, thickness, and visibility of
the gutters can be controlled separately, and the values can
be per-buffer, per-frame, etc., using specifiers (@pxref{Specifiers}).

  Normally, there is one gutter displayed in a frame.  Usually, this is
the default gutter, containing buffer tabs, but modes can override this
and substitute their own gutter.  This default gutter is usually
positioned along the top of the frame, but this can be changed using
@code{set-default-gutter-position}.

  Note that, for each of the gutter properties (contents, thickness,
and visibility), there is a separate specifier for each of the four
gutter positions (top, bottom, left, and right), and an additional
specifier for the ``default'' gutter, i.e. the gutter whose
position is controlled by @code{set-default-gutter-position}.  The
way this works is that @code{set-default-gutter-position} arranges
things so that the appropriate position-specific specifiers for the
default position inherit from the corresponding default specifiers.
That way, if the position-specific specifier does not give a value
(which it usually doesn't), then the value from the default
specifier applies.  If you want to control the default gutter, you
just change the default specifiers, and everything works.  A package
such as VM that wants to put its own gutter in a different location
from the default just sets the position-specific specifiers, and if
the user sets the default gutter to the same position, it will just
not be visible.

@node Creating Gutters, Specifying a Gutter, Gutter Intro, Gutter
@section Creating Gutters

@defun make-gutter-specifier spec-list

Return a new @code{gutter} specifier object with the given specification
list.  @var{spec-list} can be a list of specifications (each of which is
a cons of a locale and a list of instantiators), a single instantiator,
or a list of instantiators.  @xref{Specifiers}, for more information
about specifiers.

Gutter specifiers are used to specify the format of a gutter.  The
values of the variables @code{default-gutter}, @code{top-gutter},
@code{left-gutter}, @code{right-gutter}, and @code{bottom-gutter} are
always gutter specifiers.

Valid gutter instantiators are called ``gutter descriptors.''  A gutter
descriptor may be a string, a property-list with symbol keys and string
values, or @code{nil}.  If @code{nil}, nothing will be displayed in the
gutter.  If a string, the string will be displayed, with text properties
such as faces and additional glyphs taken from the extents in the
string, if any.  If a property-list of strings, the string values will
be conditionally concatenated according to the contents of the
corresponding @samp{gutter-visible} variable, and displayed according to
any text properties they contain.
@end defun

@defun make-gutter-size-specifier spec-list

Return a new @code{gutter-size} specifier object with the given spec
list.  @var{spec-list} can be a list of specifications (each of which is
a cons of a locale and a list of instantiators), a single instantiator,
or a list of instantiators.  @xref{Specifiers}, for more information
about specifiers.

Gutter-size specifiers are used to specify the size of a gutter.
The width of top and bottom gutters and the height of left and right
gutters are always adjusted to the size of the frame, so ``size'' means
``thickness,'' @emph{i.e.}, height for top and bottom gutters and width
for left and right gutters.  The values of the variables
@code{default-gutter-size}, @code{top-gutter-size},
@code{left-gutter-size}, @code{right-gutter-size}, and
@code{bottom-gutter-size} are always gutter-size specifiers.

Valid gutter-size instantiators are either integers or the special
symbol @code{autodetect}.  If a gutter-size is set to @code{autodetect}
them the size of the gutter will be adjusted to just accommodate the
gutter's contents.  @code{autodetect} only works for top and bottom
gutters.
@end defun

@defun make-gutter-visible-specifier spec-list

Return a new @code{gutter-visible} specifier object with the given spec
list.  @var{spec-list} can be a list of specifications (each of which is
a cons of a locale and a list of instantiators), a single instantiator,
or a list of instantiators.  @xref{Specifiers}, for more information
about specifiers.

Gutter-visible specifiers are used to specify the visibility of a
gutter.  The values of the variables @code{default-gutter-visible-p},
@code{top-gutter-visible-p}, @code{left-gutter-visible-p},
@code{right-gutter-visible-p}, and @code{bottom-gutter-visible-p} are
always gutter-visible specifiers.

Valid gutter-visible instantiators are @code{t}, @code{nil} or a list of
symbols.  If a gutter-visible instantiator is set to a list of symbols,
and the corresponding gutter specification is a property-list of strings,
then property values of the gutter specification will only be visible if the
corresponding key occurs in the gutter-visible instantiator.
@end defun

@node Specifying a Gutter, Other Gutter Variables, Creating Gutters, Gutter
@section Specifying a Gutter

  In order to specify the contents of a gutter, set one of the specifier
variables @code{default-gutter}, @code{top-gutter},
@code{bottom-gutter}, @code{left-gutter}, or @code{right-gutter}.
These are specifiers, which means you set them with @code{set-specifier}
and query them with @code{specifier-specs} or @code{specifier-instance}.
You will get an error if you try to set them using @code{setq}.  The
valid instantiators for these specifiers are gutter descriptors, as
described above.  @xref{Specifiers}, for more information.

  Most of the time, you will set @code{default-gutter}, which allows
the user to choose where the gutter should go.

@defvr Specifier default-gutter
The position of this gutter is specified in the function
@code{default-gutter-position}.  If the corresponding
position-specific gutter (e.g. @code{top-gutter} if
@code{default-gutter-position} is @code{top}) does not specify a
gutter in a particular domain, then the value of @code{default-gutter}
in that domain, of any, will be used instead.
@end defvr

  Note that the gutter at any particular position will not be displayed
unless its thickness (width or height, depending on orientation) is
non-zero and its visibility status is true.  The thickness is controlled
by the specifiers @code{top-gutter-height},
@code{bottom-gutter-height}, @code{left-gutter-width}, and
@code{right-gutter-width}, and the visibility status is controlled by
the specifiers @code{top-gutter-visible-p},
@code{bottom-gutter-visible-p}, @code{left-gutter-visible-p}, and
@code{right-gutter-visible-p} (@pxref{Other Gutter Variables}).

@defun set-default-gutter-position position
This function sets the position that the @code{default-gutter} will be
displayed at.  Valid positions are the symbols @code{top},
@code{bottom}, @code{left} and @code{right}.  What this actually does is
set the fallback specifier for the position-specific specifier
corresponding to the given position to @code{default-gutter}, and set
the fallbacks for the other position-specific specifiers to @code{nil}.
It also does the same thing for the position-specific thickness and
visibility specifiers, which inherit from one of
@code{default-gutter-height} or @code{default-gutter-width}, and from
@code{default-gutter-visible-p}, respectively (@pxref{Other Gutter
Variables}).
@end defun

@defun default-gutter-position
This function returns the position that the @code{default-gutter} will
be displayed at.
@end defun

  You can also explicitly set a gutter at a particular position.  When
redisplay determines what to display at a particular position in a
particular domain (i.e. window), it first consults the position-specific
gutter.  If that does not yield a gutter descriptor, the
@code{default-gutter} is consulted if @code{default-gutter-position}
indicates this position.

@defvr Specifier top-gutter
Specifier for the gutter at the top of the frame.
@end defvr

@defvr Specifier bottom-gutter
Specifier for the gutter at the bottom of the frame.
@end defvr

@defvr Specifier left-gutter
Specifier for the gutter at the left edge of the frame.
@end defvr

@defvr Specifier right-gutter
Specifier for the gutter at the right edge of the frame.
@end defvr

@defun gutter-specifier-p object
This function returns non-@code{nil} if @var{object} is a gutter specifier.
Gutter specifiers are the actual objects contained in the gutter
variables described above, and their valid instantiators are
gutter descriptors.
@end defun

@node Other Gutter Variables, Common Gutter Widgets, Specifying a Gutter, Gutter
@section Other Gutter Variables

  The variables to control the gutter thickness, visibility status, and
captioned status are all specifiers.  @xref{Specifiers}.

@defvr Specifier default-gutter-height
This specifies the height of the default gutter, if it's oriented
horizontally.  The position of the default gutter is specified by the
function @code{set-default-gutter-position}.  If the corresponding
position-specific gutter thickness specifier
(e.g. @code{top-gutter-height} if @code{default-gutter-position} is
@code{top}) does not specify a thickness in a particular domain (a
window or a frame), then the value of @code{default-gutter-height} or
@code{default-gutter-width} (depending on the gutter orientation) in
that domain, if any, will be used instead.
@end defvr

@defvr Specifier default-gutter-width
This specifies the width of the default gutter, if it's oriented
vertically.  This behaves like @code{default-gutter-height}.
@end defvr

  Note that @code{default-gutter-height} is only used when
@code{default-gutter-position} is @code{top} or @code{bottom}, and
@code{default-gutter-width} is only used when
@code{default-gutter-position} is @code{left} or @code{right}.

@defvr Specifier top-gutter-height
This specifies the height of the top gutter.
@end defvr

@defvr Specifier bottom-gutter-height
This specifies the height of the bottom gutter.
@end defvr

@defvr Specifier left-gutter-width
This specifies the width of the left gutter.
@end defvr

@defvr Specifier right-gutter-width
This specifies the width of the right gutter.
@end defvr

  Note that all of the position-specific gutter thickness specifiers
have a fallback value of zero when they do not correspond to the
default gutter.  Therefore, you will have to set a non-zero thickness
value if you want a position-specific gutter to be displayed.

@defvr Specifier default-gutter-visible-p
This specifies whether the default gutter is visible.  The position of
the default gutter is specified by the function
@code{set-default-gutter-position}.  If the corresponding position-specific
gutter visibility specifier (e.g. @code{top-gutter-visible-p} if
@code{default-gutter-position} is @code{top}) does not specify a
visible-p value in a particular domain (a window or a frame), then the
value of @code{default-gutter-visible-p} in that domain, if any, will
be used instead.
@end defvr

@defvr Specifier top-gutter-visible-p
This specifies whether the top gutter is visible.
@end defvr

@defvr Specifier bottom-gutter-visible-p
This specifies whether the bottom gutter is visible.
@end defvr

@defvr Specifier left-gutter-visible-p
This specifies whether the left gutter is visible.
@end defvr

@defvr Specifier right-gutter-visible-p
This specifies whether the right gutter is visible.
@end defvr

@code{default-gutter-visible-p} and all of the position-specific
gutter visibility specifiers have a fallback value of true.

@c #### is this true?
  Internally, gutter thickness and visibility specifiers are instantiated
in both window and frame domains, for different purposes.  The value in
the domain of a frame's selected window specifies the actual gutter
thickness or visibility that you will see in that frame.  The value in
the domain of a frame itself specifies the gutter thickness or
visibility that is used in frame geometry calculations.

  Thus, for example, if you set the frame width to 80 characters and the
left gutter width for that frame to 68 pixels, then the frame will be
sized to fit 80 characters plus a 68-pixel left gutter.  If you then
set the left gutter width to 0 for a particular buffer (or if that
buffer does not specify a left gutter or has a @code{nil} value specified for
@code{left-gutter-visible-p}), you will find that, when that buffer is
displayed in the selected window, the window will have a width of 86 or
87 characters -- the frame is sized for a 68-pixel left gutter but the
selected window specifies that the left gutter is not visible, so it is
expanded to take up the slack.

@node Common Gutter Widgets, , Other Gutter Variables, Gutter
@section Common Gutter Widgets

  A gutter can contain arbitrary text.  So, for example, in an Info
buffer you could put the title of the current node in the top gutter,
and it would not scroll out of view in a long node.  (This is an
artificial example, since usually the node name is sufficiently
descriptive, and Info puts that in the mode line.)

  A more common use for the gutter is to hold some kind of active
widget.  The buffer-tab facility, available in all XEmacs frames,
creates an array of file-folder-like tabs, which the user can click with
the mouse to switch buffers.  W3 and font-lock use progress-bar widgets in the
bottom gutter to give a visual indication of the progress of
time-consuming operations like downloading and syntax highlighting.

@c #### Remove the following sentence when the subnodes are created.
These widgets are currently documented only in the library
@file{gutter-items}.

@menu
* Buffer Tabs::         Tabbed divider index metaphor for switching buffers.
* Progress Bars::       Visual indication of operation progress.
@end menu


@node Buffer Tabs, Progress Bars, ,Common Gutter Widgets
@subsection Buffer Tabs

  Not documented yet.


@node Progress Bars,  , Buffer Tabs, Common Gutter Widgets
@subsection Progress Bars

  Not documented yet.