elisp: Display Tables

 
 37.22.2 Display Tables
 ----------------------
 
 A display table is a special-purpose char-table (SeeChar-Tables),
 with ‘display-table’ as its subtype, which is used to override the usual
 character display conventions.  This section describes how to make,
 inspect, and assign elements to a display table object.
 
  -- Function: make-display-table
      This creates and returns a display table.  The table initially has
      ‘nil’ in all elements.
 
    The ordinary elements of the display table are indexed by character
 codes; the element at index C says how to display the character code C.
 The value should be ‘nil’ (which means to display the character C
 according to the usual display conventions; SeeUsual Display), or a
 vector of glyph codes (which means to display the character C as those
 glyphs; SeeGlyphs).
 
    *Warning:* if you use the display table to change the display of
 newline characters, the whole buffer will be displayed as one long line.
 
    The display table also has six “extra slots” which serve special
 purposes.  Here is a table of their meanings; ‘nil’ in any slot means to
 use the default for that slot, as stated below.
 
 0
      The glyph for the end of a truncated screen line (the default for
      this is ‘$’).  SeeGlyphs.  On graphical terminals, Emacs uses
      arrows in the fringes to indicate truncation, so the display table
      has no effect.
 
 1
      The glyph for the end of a continued line (the default is ‘\’).  On
      graphical terminals, Emacs uses curved arrows in the fringes to
      indicate continuation, so the display table has no effect.
 
 2
      The glyph for indicating a character displayed as an octal
      character code (the default is ‘\’).
 
 3
      The glyph for indicating a control character (the default is ‘^’).
 
 4
      A vector of glyphs for indicating the presence of invisible lines
      (the default is ‘...’).  SeeSelective Display.
 
 5
      The glyph used to draw the border between side-by-side windows (the
      default is ‘|’).  SeeSplitting Windows.  This takes effect
      only when there are no scroll bars; if scroll bars are supported
      and in use, a scroll bar separates the two windows.
 
    For example, here is how to construct a display table that mimics the
 effect of setting ‘ctl-arrow’ to a non-‘nil’ value (SeeGlyphs, for
 the function ‘make-glyph-code’):
 
      (setq disptab (make-display-table))
      (dotimes (i 32)
        (or (= i ?\t)
            (= i ?\n)
            (aset disptab i
                  (vector (make-glyph-code ?^ 'escape-glyph)
                          (make-glyph-code (+ i 64) 'escape-glyph)))))
      (aset disptab 127
            (vector (make-glyph-code ?^ 'escape-glyph)
                    (make-glyph-code ?? 'escape-glyph)))))
 
  -- Function: display-table-slot display-table slot
      This function returns the value of the extra slot SLOT of
      DISPLAY-TABLE.  The argument SLOT may be a number from 0 to 5
      inclusive, or a slot name (symbol).  Valid symbols are
      ‘truncation’, ‘wrap’, ‘escape’, ‘control’, ‘selective-display’, and
      ‘vertical-border’.
 
  -- Function: set-display-table-slot display-table slot value
      This function stores VALUE in the extra slot SLOT of DISPLAY-TABLE.
      The argument SLOT may be a number from 0 to 5 inclusive, or a slot
      name (symbol).  Valid symbols are ‘truncation’, ‘wrap’, ‘escape’,
      ‘control’, ‘selective-display’, and ‘vertical-border’.
 
  -- Function: describe-display-table display-table
      This function displays a description of the display table
      DISPLAY-TABLE in a help buffer.
 
  -- Command: describe-current-display-table
      This command displays a description of the current display table in
      a help buffer.