There is a feature in operating systems that most of us take for granted. This is the simple text cursor. There is a bit of confusion within Windows whether it is called a caret or a cursor (based on the API) but for most people it would just be called a cursor. The definition of what a cursor is and does is summarized at Wikipedia(cursor).
Even though computer systems are very different, the cursor remains essentially the same. Wikipedia makes a good point that there are two cursors typically involved. One belongs to the mouse pointer and the other shows where the text input will go. It’s a simplistic explanation but I wanted to make sure that you know I’m talking about the text cursor this time.
The mouse was invented in 1963 by Doug Englebert so it is easy to guess that the mouse cursor was invented then as well. The text cursor was invented in 1954 as part of the IBM 610 project. At the same time the first video console was created, so was the first text cursor.
I don’t know when the blinking cursor first came into being. There is a chance that it existed at the beginning. It would have been pretty obvious that a cursor isn’t much good unless you can find it. Blinking things tend to get your attention. It is clever that it blinks at a frequency that gets your attention but does not annoy you. It has been known to cause problems for people who have epilepsy. Microsoft recommends turning off the cursor blinking to avoid seizure.
Cursor Blink-Rate Options
Users who have seizures might be sensitive to the blink rate of screen images, such as the cursor. You can use the Keyboard option in Control Panel to adjust the rate at which the cursor blinks, or you can prevent it from blinking at all. On the Speed tab, move the Cursor blink rate slider all the way to the left to prevent the cursor from blinking.
However, there is another reason why cursor blinking should be off. In a Terminal Services environment (including Citrix), the cursor blinking can actually be a drain on the system and network. Each cursor flash (on or off) is sent as a video update to the client. This can create a sizable amount of traffic if hundreds of users are involved. In fact, both the network bandwidth and CPU cycles would be wasted. This is especially true for when there is no user there. Idle sessions with blinking cursors can create activity that is essentially wasteful. Usually the cursor is turned off in Terminal Services environments but sometimes it can still be active. For example, in Windows XP, the cursor flashes as if it would do on the console but going through RDP. The easiest way to disable the flashing is to use the keyboard control panel applet and shift the blinking rate to none.
The cursor to the left of the slider will show you how fast the cursor will blink. The default is to cycle the cursor every 1060ms (1.06s). This is for both the on and off stages. The default I quoted is from Windows 2003 and Windows XP. Windows 2000 had it at 1000ms for some reason. The real question is why 530ms was chosen over 500ms for each stage. If you know the answer, I’m curious to know.
There is one downside to turning off the blinking however. It makes the cursor blend in with the rest of the screen. It also looks a bit strange if you are used to flashing cursors. We had a bit of a debate about this with PortICA and the ultimate decision has yet to be reached. The current bias is towards not adjusting what the administrator or user has chosen. In other words, respect the settings and make it look just like how it would normally. Microsoft and Citrix have a history of wanting to turn off the blinking. There were lots of good arguments against it in the past. Many of those reasons aren’t as valid as they used to be based on the exploding capacity of network bandwidth and CPU cycles.
In PortICA we want to make it as normal an experience as possible. We also have the luxury of claiming a workstation for ourselves (unless we are being virtualized). This means that we prefer the user experience over worrying about resource usage. Rest assured, we do not want to waste resources but we do want to present the best face. This means that the user should see what they normally see. Based on my own experiences, the cursor does add a lot of value to doing text input and it feels like something is just not right when it doesn’t act like it normally does.
All of this was recently triggered by the problem that was found with HyperTerminal. Some applications just don’t like having the cursor being non-blinking.
As this post comes to an end, I realize that what would normally be considered a boring topic is actually interesting. Well, maybe not that interesting but at least relevant. I could have dived into the realm of the Windows API related to the cursor (caret) blinking or even the place in the registry where the user profile stores the blink value for Windows. Not that, for most, would truly be boring so I’ll just skip it.
If you have opinions about what PortICA should do for this, please leave a comment. Assume for now that we will fully respect the user’s setting for blink rate.