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