This behaviour actually matches the HIG’s recommendations. Since this is an «invisible» user interface, it’s important to be consistent with other applications. So I don’t recommend implementing different behaviours. However, I do think that the current behaviour is not particularly intuitive.

Igot thinks that it would be better to always shrink or grow on the side of the selection where you released the mouse button, i.e. when dragging from left to the right, the selection should always grow or shrink from the right edge. There are good reasons for this:

It’s always consistent and relies on highly conscious user behaviour (dragging the mouse) instead of less conscious behaviour (hitting a key on the keyboard). It’s probably easier to remember where you ended your selection than which particular arrow key you hit next.

The location of the selection’s «growing point» is based on the actual action of making the selection, not on what you do after you’ve made the selection.

The user’s focus follows the mouse. After making a selection, the user’s focus is where he or she dragged the mouse to. Thus, any user input should affect that area.

It’s easier to aim with your mouse when the mouse button is not pressed. Furthermore, if the user misses the beginning of the selection, he or she will likely abandon the selection process and start over. In other words, user intention is more likely to change the end of the selection (where users release the mouse) than the beginning of the selection, since the end of the selection is more likely to be off by a few characters.

Other operating systems avoid this ambiguity by showing the caret position even when a selection exists. This is a screenshot of Windows:

Want to read more like this? Buy my book's second edition! Designed for Use: Create Usable Interfaces for Applications and the Web is now available DRM-free directly from The Pragmatic Programmers. Or you can get it on Amazon, where it's also available in Chinese and Japanese.

Hi. My name is Lukas Mathis. I studied Computer Science/Software Engineering and Ergonomics/Usability at ETH Zürich. I work as a software engineer and user interface designer for a swiss software company creating process management software. I've written a book about usability. It's been translated to Chinese and Japanese. My first computer was a Performa 450, my first programming language was HyperTalk, my first electric guitar was a cheap Peavey, my first videogame was a VCS 2600 and my current snowboard is from Lib Tech. I live in a small cottage in a remote part of the Swiss Alps, and you can reach me at or on twitter.