Fixes #111: Update CLM to handle fonts and resources better.
Patch 1: Add support for fallback resources in RUN-MOTIF-APPLICATION
At the public API level, it's a new keyword to RUN-MOTIF-APPLICATION
.
At the protocol level, this is one extra object during the greeting.
Internally, this modifies message_read_string_table so that the resulting StringTable has a NULL-terminated list of strings. This seemed simpler than adding a whole new data transmission type for this purpose.
Patch 2: Expunge all FontList usage, replace with CompoundString tags.
20 or so Widget constructor calls included a :FONT-LIST
initarg, which
had the effect of superseding Xt-based configuration mechanisms (e.g.,
X resource files). This turns out to have been unnecessary, since
Motif's 1XmString` type includes tags whose purpose is to direct text
styling.
This commit simply rips out all Font Lists while ensuring that every place a FontList was used instead uses a CompoundString with an appropriate tag, one of "header" or "italic".
Given those tags, it becomes possible to achieve all the previous styling effects just using Xt/Motif machinery, e.g. by putting something like one or the other of the below examples into the user's ~/.Xdefaults or an app-defaults file named "Lisp".
(A subseqent commit will arrange for these defaults to get set as fallback resources when the GUI starts up, so that no external resources file will be needed, and so that users who prefer to configure things from within Lisp can do so.)
Sample .Xdefaults
content; use one or the other, not both.
!! Core X11 Fonts
!!
!! First, setup the defaults for the RenderTable.
!!
Lisp*renderTable.fontName: -adobe-helvetica-medium-r-normal--*-120-75-*
Lisp*renderTable.fontType: FONT_IS_FONT
!!
!! Define a rendition called "header", and specify its font.
!!
Lisp*header.fontName: -adobe-helvetica-bold-r-normal--*-120-75-*
Lisp*header.fontType: FONT_IS_FONT
!!
!! Define a rendition called "italic", and specify its font.
!!
Lisp*italic.fontName: -adobe-helvetica-medium-o-normal--*-120-75-*
Lisp*italic.fontType: FONT_IS_FONT
!!
!! Add these renditions to the RenderTable
!!
!Lisp*renderTable: header italic
!! EOF
Patch 3: Unify naming of Core X11 and Xft2 fonts in CLM, use in INTERFACE
The substance of this commit is the new file,
src/motif/lisp/fonts.lisp
. This file contains a couple of trivial
models of Core X11 and fontconfig names, heuristics for telling them
apart, a convention for deciding the ambiguous cases, and a utility
that uses that convention to generate corresponding resource strings
for OpenMotif. For the moment the only exported interfaces are
GENERATE-HEURISTICATED-FONT-RESOURCES
and a
user-customizable *AMBIGUOUS-FONT-DISPOSITION*
, exported in
1src/motif/lisp/initial.lisp.
src/tools/clmcom.lispis adjusted to include
fonts.lisp`.
src/interface/interface.lisp
take advantage of the new font naming
functionality, by calling GENERATE-HEURISTICATED-FONT-RESOURCES
with
some tag names and new user-customizable font name variables to create
fallback resources. src/interface/initial.lisp
exports those font name
variables.