[comp.cog-eng] bouncing cursor

don@brillig.umd.edu (Don Hopkins) (11/22/88)

The terminal emulator that I'm using right now (which I wrote in Forth
on the Apple ][) has a cursor that bounces.  It's one scan line tall,
and the width of a character cell. It continuously bouncing up and
down and up and down in the character cell, smoothly transforming from
underline to overline and back again.

I've been using it for years, and I like it a lot. The nice thing
about having a cursor that's constantly in motion is that my eyes can
spot it almost instantly. Think about a flashing block or underline
cursor: half the time it's sitting still, and the other half of the
time IT'S INVISIBLE!!! The only time your attention is drawn to the
cursor is during the blink transitions, or when it's moving around on
the screen.  Non-flashing cursors are even harder to spot, especially
when there is other highlighted text on the screen.

A bouncing cursor is visually distinct from inverted text (as opposed
to an inverted box cursor), underscores and underlined text (as
opposed to an underline cursor), and flashing text (as opposed to a
flashing cursor). Nothing else on the screen bounces but my cursor.

I often have several emacs windows on the screen, and I can always
tell at a glance where the cursor is, since its constant bouncing
draws my eyes right to it. When I type something that moves the cursor
to another place on the screen (another emacs window, or the
minibuffer at the bottom of the screen), I can see right away where
the cursor ends up.

It was quite easy to implement, using the Apple's 80-column (Videx)
video card's hardware cursor. There is a hardware register that sets
the beginning and ending scan line of the cursor, so when the terminal
emulator doesn't have any characters to process, it just twiddles the
registers so the cursor bounces at a certain speed. When it's zipping
along at 2400 baud there are still enough spare 6502 computrons left
to keep it waving up and down at the leading edge of the incoming
text. It should be easy to implement a bouncing cursor on an IBM-PC in
text mode, since I believe they have a hardware cursor similar to that
of the Videx card. It would be harder (i.e. more computationally
expensive) to implement a bouncing cursor on a bitmapped screen, but
all kinds of interesting variations would be possible!

A bouncing cursor would be one way to show the keyboard focus in a
multi-window environment like NeWS. When a window has the focus, its
cursor bounces up and down. When it loses the focus, its cursor
freezes. Since there can only be one keyboard focus, only one cursor
is ever bouncing on the screen at a time. As long as there is not a
lot of other animation going on at the same time, the keyboard focus
should be very easy to spot.

One of these nights I'll get around to hacking it up in NeWS. If
you've ever heard of another system using a bouncing cursor, or if you
implement one yourself, please let me know!

	-Don Hopkins
	 don@brillig.umd.edu
	 ...!uunet!mimsy!don