Mercurial > hg > xemacs-beta
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.