Convenient search bindings are extremely important for the smooth operation of Gzz. It must be possible to jump to any cell in the space by typing in a few significant characters from its contents as an alternative to navigating across the whole space. Examples include quick access to menu items; quickly finding a cell to clone or connect to; or quickly finding a function definition to clone into a clang program.
We need this if we want to compare to text identifier-based interfaces (like the command line, or textual programming languages) in efficiency. I expect that for some day-to-day tasks, we'll be able to work more than twice as fast with good search bindings.
This PEG proposes a keyboard language for searching using the spacebar, because a space is arguably the easiest-to-hit key of all. This conflicts with Ted's prefered space bar binding.
This PEG describes how to enter and exit search mode. It only touches on what will happen inside search mode. This should be configurable since there are many desirable alternatives; the interfaces for this need another PEG.
I propose that:
This means that the user does not automatically move to the cell. This is one option, but not the only one. Writing the space bar as SP, it should be possible to type:
and so on. This allows for extremely fast operation in many common cases, where we don't really want to move to the cell, just do something with it (for example, connect).
Additionally, it would be nice if SP foo Enter were an abbreviation for moving to cell "foo" directly (in the right window). This is more like searching works in e.g. Emacs (where to move to word "foo" by searching for it, you type Ctrl-S foo Enter).
As generally all new bindings, these will be optional for now. Passing ``--search-bindings-benja`` to Gzz.py will enable them.
In the cursor spec, Ted has specified that the space bar should rotate through the different windows (bring each of them front, in order). By specifying that in normal mode, the space bar enters search mode, this PEG obviously is in violation of that spec.
Personally, I do think that using the space bar for searching is more important (except in arrowset reassignment mode, where I'm all for making the space bar cycle through windows). Cyclically bringing windows front doesn't seem that practical to me, anyway: What if I want windows 3 and 7 on the list front, right now? Window managers have both keyboard and mouse commands that handle this easily, though they are admittedly not quite as fast as using the space bar. (If we really need our own binding, I'd suggest something easy-to-type but other than the space bar, for example 'a' or '.').
At the moment, we don't have the ability to bring different windows front anyway. I propose to: