intern-soft, find-face/get-face, and facep for determining faces' definedness
Stephen J. Turnbull
stephen at xemacs.org
Wed Nov 3 22:41:59 EST 2004
>>>>> "Stefan" == Stefan <monnier at iro.umontreal.ca> writes:
>> A C structure wrapped in Lisp housekeeping information that
>> implements a face. I'm not sure why they were exposed to Lisp
>> in the first place; I suspect to avoid repeated lookups in code
>> that compares faces to determine if they contrast and the like.
>> Probably a premature optimization.
Stefan> I doubt the motivation was optimization. I think it had
Stefan> more to do with philosophical convictions.
Could be. Might also be the issue of anonymous faces; at the time we
didn't have weak structures, so there was no easy way to guarantee it
would get GC'd in a timely fashion.
>> A face name is a symbol. A face object is a data structure.
Stefan> I still don't understand why (facep 'foo) returns nil,
Stefan> Just like (progn (fset 'foobar (make-keymap)) (keymapp
Stefan> 'foobar)) return t rather than nil.
And so does (progn (fset 'foobar (make-keymap)) (fboundp 'foobar)), of
course. But (progn (fset 'foobar (make-keymap)) (foobar)) errors, of
course. Hardly convincing!
Anway, "that's different". The symbol foobar is not a key in a table
somewhere, it _is_ the keymap in a physical sense.
I don't remember if Emacs has special object types for charsets and
coding systems, which are also named by symbols. However, in XEmacs
the APIs all work the same way; type predicates return t for the object
but nil for the name, and have find-<type> and get-<type> interfaces.
Whether any of this really makes sense, I don't know, but it's consistent.
Institute of Policy and Planning Sciences http://turnbull.sk.tsukuba.ac.jp
University of Tsukuba Tennodai 1-1-1 Tsukuba 305-8573 JAPAN
Ask not how you can "do" free software business;
ask what your business can "do for" free software.
More information about the XEmacs-Beta