Common Lisp the Language, 2nd Edition
![]()
Next: Sequences
Up: Characters
Previous: Character
Conversions

Common Lisp provides explicit names for four bits of the bits attribute:
Control, Meta, Hyper, and Super. The
following definitions are provided for manipulating these. Each Common
Lisp implementation provides these functions for compatibility, even if
it does not support any or all of the bits named below.
[Constant]
char-control-bit
char-meta-bit
char-super-bit
char-hyper-bit
The values of these named constants are the ``weights’’ (as integers)
for the four named control bits. The weight of the control bit is
1; of the meta bit, 2; of the super bit,
4; and of the hyper bit, 8.
If a given implementation of Common Lisp does not support a
particular bit, then the corresponding constant is zero instead.


X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate all four
of the constants char-control-bit,
char-meta-bit, char-super-bit, and
char-hyper-bit.
When Common Lisp was first designed, keyboards with ``extra bits’’ were relatively rare. The bits attribute was originally designed to support input from keyboards in use at Stanford and M.I.T. circa 1981.
Since that time such extended keyboards have come into wider use.
Notable here are the keyboards associated with certain personal
computers and workstations. For example, in some specific applications
the command and option keys of Apple Macintosh
keyboards have had the connotations of control and
meta. Macintosh II extended keyboards also have keys marked
control whose use is analogous to that of hyper on the
old M.I.T. keyboards. IBM PC personal computer keyboards have
alt keys that function much like meta keys; similarly,
keyboards on Sun workstations have keys very much like meta
keys but labelled left and right.

[Function]
char-bitcharname
char-bit takes a character object char and the
name of a bit, and returns non-nil if the bit of that name
is set in char, or nil if the bit is not set in
char. For example:
(char-bit #\Control-X :control) => true
Valid values for name are implementation-dependent, but
typically are :control, :meta,
:hyper, and :super. It is an error to give
char-bit the name of a bit not supported by the
implementation.
If the argument char is specified by a form that is a
place form acceptable to setf, then
setf may be used with char-bit to modify a bit
of the character stored in that place. The effect is to perform
a set-char-bit operation and then store the result back
into the place.


X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate
char-bit.

[Function]
set-char-bitcharnamenewvalue
char-bit takes a character object char, the
name of a bit, and a flag. A character is returned that is just like
char except that the named bit is set or reset according to
whether newvalue is non-nil or nil.
Valid values for name are implementation-dependent, but
typically are :control, :meta,
:hyper, and :super. For example:
(set-char-bit #\X :control t) => #\Control-X
(set-char-bit #\Control-X :control t) => #\Control-X
(set-char-bit #\Control-X :control nil) => #\X

X3J13 voted in March 1989 (CHARACTER-PROPOSAL) to eliminate
set-char-bit.

![]()
Next: Sequences
Up: Characters
Previous: Character
Conversions
AI.Repository@cs.cmu.edu