QuickSearch Functionality for NetBeans IDE - UI and Functionality Proposal
- Ondrej Langr
- Dafe Simonek
- Standa Aubrecht
- Jan Becicka
- Max Sauer
Invocation of less frequently used actions (for which key binding is not known by heart) frequently requires switching from keyboard to mouse which is a time-consuming and flow-breaking operation. The feature UI of which is mocked-up in this document would eliminate the need for frequent switching and thus helps the developer to remain in the state of flow.
Equivalent to this is using mnemonics or shortcuts, both of which have disadvantages this approach lacks, such as steep learning curve in case of shortcuts and difficulty to invoke actions with location of which the user is not sure in case of mnemonics.
Use Cases and Scenarios
Quick search feature can be used for various type of searches and commands
- actions - can be used to invoke actions
- opening projects
- option and settings
- what granularity? Just per panel or per settings?
- go to actions
- Go To Type
- Go To File
- Go To Symbol
- Go to Bundle.properties key
- windows (opening windows such as properties, output, debug, etc .. )
- selected sections of NetBeans.org
- (?) search in editor (ctrl + F)
This paragraph attempts to analyze the context in which actions work in order to prioritize and filter the offered actions to include only those which do make sense for users in the context they're in. Examples of context sensitive situations:
- If focus is in editor, typing "fin" should offer the Find action at first whereas when focus is in projects window, Find in Projects should be offered instead.
- Action such as Go To Source should only be available when the cursor is located within an identifier this action can be invoked for.
- Checkout should probably offer first the checkout dialog for the versioning system user is using most often
Types of actions according to subject they work on
- Reformat, Refactoring, Move Line, Insert Code, Fix Imports ...
- May further divide to those available only in certain editors
- File (Run File, Reformat File ... )
- Actual open file with focus
- Selected File in Project window
- Project (Build Project, Run, Profile Project, Create New File... )
- Main Project
- Selected Project (selected in Project window or project the open file belongs to)
- Several Projects (Find in Projects, ... )
- IDE - (Opening a new window, Undo/Redo, Create New Project, Toggle Line Numbers... )
Classification according to where actions are exposed
- exposed directly via UI - in Menus (main, contextual)
- hidden - available only from a particular window (e.g. New Connection on Database Node in the Services Window)
- Should we only offer them in certain context
- combined (Add New Breakpoint is available in editor contextual menu as well as from Breakpoints window)
Classification according to action state
- Toggle actions - e.g. show line numbers. Are either on or off. Should this
- Repeatable actions - have the same results invoked several times
Conclusion on Ordering of Actions
Initial ordering of actions:
- Actions working in current window (selection in active editor, etc...)
- Actions working on current file
- Actions working on current project
- Actions working on other projects
The initial ordering should probably reflect users' behavior in time and frequently used actions should "bubble" to the top of the list.
Requirements to achieve the above:
- meta-information for each action, including
- the context this action can be called from (editor - all textual editors or just language specific, projects window, etc...)
- specific name action used probably in this search (this may be needed because in search result, the action lacks the context it is normally placed in. I.e. just the name of action Rename does not tell much about what it actually will rename).
- for dynamic ordering (frequently used actions are on top), we would need other persistent information - statistics on users' behavior
How to deal with conflicting action names? Move on project VS Move in refactoring .. ?
- Checkout (in CVS, in Subversion, in Mercurial)
Web search looks for given text in NetBeans.org site using Google search engine. The result are filtered to show only documents from:
Open Issues & Notes
- How to deal with menu structure? Example: "Internationalization" matches what the user is typing, but it is a name of a submenu which contains other items. Possibilities:
- open - expand
- Showing a shortcut next to the action name can significantly help users to fasten the learning process at the beginning of using the IDE ...
- Applications using similar search
- Spotlight on Mac OS X
- Search in Thunderbird
- Eclipse has "Quick Access" available on Ctrl+3 shortcut
- Applications using semantic command line paradigm or similar.
- QuickSilver (Mac OS X, free)
- Enso (windows, free)
- Colibri (windows, free)
- Launchy (windows, free)
- Enso can quickly learn new commands (recorded macros?) by "learn identifier", and remove learnt or implicit by "unlearn identifier". Would something like this be applicable in our case?
Attachment is outdated! (Don't ask me to remove it, I don't know how). See up-to-date storyboards.