Hi,
I'd like to see Geany's default key combo choices be as optimized and clean as possible. This is a long post -- I hope it's useful. The seeds of this post were planted in a post I made here back on May 8.
In my experience, some editors' key-combos are easier than others for brain and fingers to remember. I think a large part has to do with choices regarding key-combinations. Aside from some common Gnome/GTK+ keys combinations such as:
* Ctrl-o to open a file, * Ctrl-s to save, * Ctrl-f to find, * Ctrl-arrow_key to move by-word or by-paragraph, * Ctrl-BackSpace to delete back, * and so on,
I see 9 major ways text editors use keys to activate commands. Those 9 ways are noted below, along with examples of Geany using most of them. The purpose of this longish post is to help tune Geany's editing component for maximum ease of use, memorability, uniformity, and editing speed (that is, sans mouse).
It seems to me that some ways of handling key combos are easier to use and remember than others. Also, an editor that sticks to some minimum number of those patterns seems to be easier to use. Here's the patterns I notice, along with example Geany commands:
1. Hit a key to toggle something.
* Ctrl-B (comment/uncomment line) * Ctrl-M (set/unset marker) * F11 * Ctrl-T (transpose lines)
2. Hit a key to do something, then Shift-key to reverse it.
* Ctrl-I, Shift-Ctrl-I * Ctrl-G, Shift-Ctrl-G * Ctrl-U, Shift-Ctrl-U * Tab, Shift-Tab
3. Hit a Ctrl-key to do something, then Shift-Ctrl-key to do even more, or maybe a similar thing but with a twist.
* Ctrl-F, Shift-Ctrl-F * Ctrl-O, Shift-Ctrl-O * Ctrl-S, Shift-Ctrl-S * Ctrl-W, Shift-Ctrl-W * Ctrl-R, Shift-Ctrl-R
4. Ctrl-key to do an action, Alt-key to do something similar, but with a twist.
5. A key to do one thing, and a separate key to do its opposite.
* Ctrl-+, Ctrl-- * Ctrl-., Ctrl-, * Ctrl-[, Ctrl-]
6. Ones that use the fancy named keys.
* Ctrl-PgUp, Ctrl-PgDn * etc... (a lot of the #3 and #4 style, above)
7. Alt-key, and Shift-Alt-key to do a variation on Alt-key.
8. Using the F_keys (at the top of the keyboard). Shift-F_key just like Shift-Ctrl-key and Shift-Alt-key.
* F3, Shift-F3 * F9, Shift-F9, Shift-Ctrl-F9
9. Ctrl-Alt-key, Alt-F_key, Shift-Ctrl-F_key .... yikes.
Here's what I've found regarding using those various key- combination patterns:
* Item 1. Toggling is fast and intuitive if the feature that it activates makes sense to toggle. Also nice is that it only uses up one key combo.
* Item 2. Using Shift to reverse an action doesn't feel right. I think brain and fingers tend to associate a key with an action, and shifting it should do something similar in some way, not opposite.
* Item 3. Using Shift to "extend" an action seems quite intuitive. Using Shift to also deal with selecting text (with arrow keys) does not seem to cause any confusion here.
* Item 4. This can feel intuitive once you get used to it, but will likely be confusing if using Shift like in item 3 above.
* Item 5. Intuitive, and works fine you've got Ctrl-key combos to burn.
* Item 6. Pretty much the default for GUI apps. Like 'em or not, we've got 'em.
* Item 7. Using Alt-key/Shift-Alt-key is analagous to item 3 above and works very well. Good for either less often used functions, or maybe specialized or fancier ones. Although some Alt-key's get used to activate menus, there's plenty left over for other uses.
* Item 8. These are awful for heavy use (they're a mile away from the home row!) and, IMO, should only be used for seldom-used commands (ex. window-related functions, build commands). There's no way one can successfully hit them during serious editing without having to look down at the keyboard and take a hand off the home row.
* Item 9. Here be dragons (that is, these are the ones that are tougher to remember, or that risk interefering with the window manager).
So, given all that, to even more finely tune Geany's editing environment, here's my suggestions:
A. Get rid of using Shift to make a key combo do the opposite (item 2 above). This includes:
* Ctrl-I, Shift-Ctrl-I --> Not needed. See below. * Ctrl-G, Shift-Ctrl-G --> Use Ctrl-G to toggle. * Ctrl-U, Shift-Ctrl-U --> Use Ctrl-U to toggle. Then use Shift-Ctrl-U to toggle first-letter capitalization. Yes. :) * Tab, Shift-Tab --> use Ctrl-9 & Ctrl-0 to indent/de-indent by one space, and Ctrl-) & Ctrl-( to indent/de-indent by one tab width.
B. Fix an oddball case:
* Shift-Alt-D for insert date. This one's not too bad, but falls outside of the uniformity of having Shift-Alt-key be a fancy version of Alt-key. Maybe use Alt-I (for "insert")?
C. The mortal sin: Incremental search. Geany's Achilles' heel. One of an editors' most-useful features, it should be be effortless to do forward and backward incremental searches. As implemented, if I want to incrementally search forward, I need to hit F7, tap F3 to get to the one I want, then F2 to get back to the editor. So, I've basically got to spend the entire search looking at my hands instead of the text. It's even worse to search backward incrementally -- not sure I can even do this. Here's my proposed solution. Buckle seatbelts, and please observe the no-smoking signs:
1. Steal Ctrl-T. Use it for forward incremental search (think of it as "to" or "incremen*t*al"). Same as today's F7. Move "transpose lines" to Shift-Ctrl-L. 2. Shift-Ctrl-T gets you find next (like F3). 3. Use Alt-T to start a reverse incremental search (Use Alt-O to get the Tools menu). 4. Shift-Alt-T gets you find previous. Nice consistency here, I think. 5. Hitting Ctrl-LeftArrow or Ctrl-RightArrow should snap you out of the incremental search and back to the main editor window (instead of today's F2). After an incremental search, you often either want to go to the beginning or end of the word you found anyway.
When you're in an incremental search, regardless of direction, you should be able to tap either Shift-Ctrl-T to find next, or Shift-Alt-T to find previous.
Finally, some new key combos to possibly add that would probably be pretty useful, and don't stomp too much on anything else:
1. Select line. Use Alt-L 2. Select paragraph. Use Alt-P (switch Project menu to Alt-R) 3. Select word. Use Alt-W
Please let me know what you think.
By the way, I know that I can just change many of the above- mentioned key-bindings myself. But the point is, I think Geany might benefit from some discussion on optimizing some of its defaults.
Incidentally, can someone please point me to the docs on creating my own ~/.geany/keybindings.conf? I looked in the "Keybindings" and "Configuration files" chapters of the manual, but didn't see any info.
Thanks, ---John