Does READ-CHAR echo, or does the terminal handler, which supplied the
character in the first place, echo? Echoing is terminal-specific
(you don't want READ-CHAR from a file to echo) so it makes more sense
to talk about what the terminal handler does. This starts to get
into the controversy over whether you want to echo the character when
it is typed ("interrupt level") or when it is read, or try to rise
above these simple alternatives to do the right thing. Does Common
Lisp specify whether echoing is done at type-in time or read-time?
Probably it should leave such things undefined so that you can use
system echoing for efficiency, or try to do something better than
either of the simple alternatives. Leaving it undefined makes it
difficult to write portable rubout handlers (because you can't know
the state the screen), but my guess is that these will be provided by
the underlying implementation. The underlying implementation should
of course promise to echo things exactly once; your problem with
UNREAD-CHAR in ZetaLisp sounds like a simple bug.