Spoke menus: rotational menus for completion-like tasks


I’ve had an idea for a kind of menu I’ve never seen before.

It’s aimed mostly at completion-like activities (though it isn’t limited to that). For example, in an interactive development environment when you press Ctrl-Space (or equivalent) and see a list of options. The option you pick (if any) will be inserted, the cursor will move to the end of the inserted text and the process can be repeated.

How spoke menus work

Spoke menus provide all the options as spokes around the insertion cursor. The option in the “east” position is the current one. The spokes are arranged in sort order (e.g. alphabetically).

The spokes rotate clockwise on the “down” key, anticlockwise on the “up” key. Typing the first letter turns the spokes so the earliest spoke (in sort order) starting with that letter is current (facing east). Subsequent letters turn the spokes to home in on the desired selection by treating the keys pressed as prefix of the available options. For example, if your menu has options “abc”, “bbc”, “bca”, “bcd” then “bca” will be selected after you type “b” then “c”.

Committing to the current option is performed by the “enter” key. When committing, the spokes that have not been selected should disappear, and the spoke that was selected should remain on the screen. In completion situations the item will be inserted at the cursor and the cursor will move east. The disappearance of the unselected spokes could be animated. Fading to transparent, blurring and diminishing in size are all sensible possibilities, as all combinations of these. It’s possible and reverse these effects when showing the menu in the first place. Note: the selected option does not fade etc. Rotation can also be animated.

Multi-level menus

In many situations (including completion) it makes sense to have multi-level menus. Selection takes place as above, and a new spoke menu appears to the east, at the new insertion point. The delete key can be used to remove the “prefix” letters selecting the current option, and once no prefix letters remain, another delete key press removes a child menu and reinstates the parent spoke menu to the west.

Other considerations

East is not the only sensible direction for the current selected spoke. What is really being used here is the text direction. So in another language south may make more sense (text flowing top-to-bottom).

The options can be prefixed with a number (single digits up to 10 options, you might push it to 100 options with 2 digits). Typing the number turns the spokes to that option.

A useful fallback if rotating text is computationally expensive or impossible on the underlying graphics platform is to arrange the spokes one above the other as though around the outside of a barrel, position its center on the insertion point and rotate as before. This is somewhat similar to a traditional “pop-up” type completion menu except that the selection point is fixed and the options move rather than the other way around.

Spoke menus would probably work really well with a rotational selection device such as on the iPod and–perhaps less ideally–traditional mouse scroll wheels.

Because your typing is not obscured by the menu, it might be acceptable for a completion menu to appear on screen at all times, or perhaps during and for a short while after each keypress.

Comments? Has this been implemented anywhere?