Epoch 4.0 Changes ================= This distribution constitutes the official release of Epoch 4.0. Hardware/OS platforms we've tested with include the following: o Sparcstation, SunOS 4.1.1, R4 & R5 o Sun3/60, SunOS 4.1.1, R5 o HP9000s375, HPUX 7.0, R4 o HP9000s720, HPUX 8.0, R4 o NeXT, NeXTStep 2.0 , R4 (Co-Xist) o Encore Multimax, Umax 4.3, R4 o IBM RS6000, AIX 3.1.5 and 3.2, R4 o Intel 486, SYSVR4, R3 o SGI IRIS Indigo, Irix 4.0.2 We additionally have reports of Epoch running on other platforms, including (but not limited to): o MIPS under RISCOS o DECstations under Ultrix o Apollo under Domain/OS o Sparc, Solaris 2.0 o Titan Changes from Epoch 3.2 include: 1. Minibuffer modes. It is possible to have the minibuffer in its own distinct screen (non-local, traditional Epoch) or at the bottom of each edit screen (local, traditional GNU Emacs). In the case of local minibuffers, text typed/displayed in the minibuffer is potentially synchronized in *all* minibuffer windows; this behavior is configurable with the variable epoch::synchronize-minibuffers. To select local minibuffers, either invoke Epoch with the "-nm" flag (no minibuffer screen), or include the following in your '.Xdefaults' file: epoch.nonlocal.minibuf: false 2. Buttons -> Zones. Epoch 3.2's "buttons" have been renamed "zones" to avoid the name clash with X button events. The behavior of zones is otherwise identical to that of buttons. Elisp code written to require buttons may still be run, by requiring a wrapper package. This can be done with: (require 'button) Elisp code may be converted to require zones by using the convert-buttons package. To use this, do a (require 'convert-buttons), then run the function convert-current-buffer on the relevent buffer. Be sure to rewrite the file, and byte-compile if necessary. 3. Style-based display. Attributes no longer exist. In particular, references to attributes in Elisp will be invalid. Epoch zones now reference styles directly. The old primitives (reserve-attribute), (set-button-attribute), (button-attribute), and (set-attribute-style) have been replaced/superceded by (set-zone-style), and (zone-style). An example of this is: (setq s (make-style)) (set-style-foreground s "red") (setq b (make-button)) (set-zone-style b s) (move-button b 5 18) The style used for displaying characters in a buffer is now determined according to a style hierarchy: 1. Zone style (if present, following the zone display rule) 2. Buffer-local styles (setting the buffer-local variable buffer-style) 3. Screen styles. Screen styles are set with the existing primitives such as (font), (foreground), (background), and (cursor-color). Styles can be embedded in the Elisp variables mode-line-format and default-mode-line-format, which define modeline appearance. See the file "contrib/love/mode-styles.el" for an example of this. 4. Proportional font support. Epoch 4.0 supports proportional fonts and lines with fonts of differing heights. Fonts are specified with the existing (epoch::font) primitive, and may be specified in styles (set-style-font). Note that with proportional fonts, text using TABs and containing alligned columns will not display as expected with fixed-width fonts. Screen geometry specifications are in characters, based on the base font for the screen. (Epoch 4.0 is therefore compatible with '.Xdefaults' settings from Epoch 3.2.) Emacs windows under Epoch now specify their dimensions in pixels rather than characters. Character dimensions are calculated based on fonts used, and will not necessarily be constant. New functions returning pixel values are: (window-pixheight) (window-pixwidth) (window-pixedges) Existing Emacs functions still exist and return calculated dimensions in character values: (window-height) (window-width) (window-edges) Additionally, functions to change window sizes or to split windows will still take character arguments. Existing GNU Emacs packages should behave as expected if no proportional fonts or fonts of differing heights are used; otherwise things may be strange. 5. Mouse maps Epoch-4.0 mouse support is based on Ken Laprade's mouse package for 3.2, so there is support for detecting mouse presses, etc. on window modelines, etc. Mouse and motion event data is now passed to the Elisp event code as pixel data rather than characters. Key functions for using this data are: (query-mouse) (query-pointer) (coordinates-in-window-p) (coords-to-point) 6. Selection Support Cutting and pasting between Epoch and other X clients is now done using the Selection mechanism. By default, this uses the PRIMARY selection; this will enable pasting with most R4 and later clients. Some clients instead use the CLIPBOARD selection; Epoch can support this by changing the variable epoch::selection-atom. 7. .Xdefaults Epoch no longer reads the $HOME/.Xdefaults file upon startup; it assumes that Epoch resources are in the X server's resource database. This behavior can be overridden by the "-ud" flag, which forces Epoch to read the .Xdefaults file directly. Converting Elisp Code --------------------- As mentioned in section 2, attributes no longer exist. The basic changes required to Epoch 3.2 Elisp packages to run under Epoch 4.0 are: Typical Epoch 3.2 code: (defvar foo-attribute (reserve-attribute)) (defvar foo-style (make-style)) ... (set-attribute-style foo-attribute foo-style) (add-button start end foo-attribute) Corresponding Epoch 4.0 code: (defvar foo-style (make-style)) ... (add-zone start end foo-style) ==> Note that all other reference to attribute functions are also deleted. ==> Note that the ability to have buffer-local "attributes" is not lost; the variable corresponding to a particular style can be made buffer-local, with the values being separate styles in desired circumstances.