Closes #ISSUE
`cx.intercept_keystrokes` functions as a sibling API to
`cx.observe_keystrokes`. Under the hood the two API's are basically
identical, however, `cx.observe_keystrokes` runs _after_ all event
dispatch handling (including action dispatch) while
`cx.intercept_keystrokes` runs _before_. This allows for
`cx.stop_propagation()` calls within the `cx.intercept_keystrokes`
callback to prevent action dispatch.
The motivating example usage behind this API is also included in this
PR. It is used as part of a keystroke input component that needs to
intercept keystrokes before action dispatch to display them.
cc: @mikayla-maki
Release Notes:
- N/A *or* Added/Fixed/Improved ...
This PR shows conflicts in a user's keymap editor by adding an error
background to a conflicting row and allows users to filter the keymap
editor by conflicts.
A key binding is determined to have a conflict if any other binding has
the same context and key strokes. In the future, this could be further
improved upon by normalizing bindings’ context so it's not just a string
comparison.
Release Notes:
- N/A
---------
Co-authored-by: MrSubidubi <dev@bahn.sh>
Closes #ISSUE
Adds a visual indicator to the `Arguments` column of the keymap table to
help distinguish between actions that don't take arguments, and actions
that take arguments but none were provided.
Currently, the `<no arguments>` indicator is rendered only in the latter
case, when no arguments are provided to an action that could take
arguments, as the inverse results in almost every row containing the
indicator which is quite noisy.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Adds support for creating new keybinds in the keymap UI. "Create" means
two different things for existing bindings, and unbound actions.
- For existing bindings, it is essentially a duplicate + edit
- For unbound actions, it is the creation of a binding
Release Notes:
- N/A
Closes #ISSUE
Adds a very simple editor for editing action input to the edit keybind
modal. No auto-complete yet.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Implements a very basic completion provider that is attached to the
context editor in the keybind editing modal.
The context identifiers used for completions are scraped from the
default, vim, and base keymaps on demand.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Adds a context input to the keybind edit modal. Also fixes some bugs in
the keymap update function to handle context changes gracefully. The
current keybind update strategy implemented in this PR is
* when the context doesn't change, just update the binding in place
* when the context changes, but the binding is the only binding in the
keymap section, update the binding _and_ context in place
* when the context changes, and the binding is _not_ the only binding in
the keymap section, remove the existing binding and create a new section
with the update context and binding so as to avoid impacting other
bindings
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Uses Rust for syntax highlighting of context in the keymap editor.
Future pass will improve color choice to make colors less abrasive
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Show the documentation for an action when hovered. As a bonus, also show
the humanized command palette name!
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Adds a new `documentation` method to actions, that is extracted from doc
comments when using the `actions!` or derive macros.
Additionally, this PR adds doc comments to as many action definitions in
Zed as possible.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
This includes mostly polishing up the keystroke editing modal, and some
other bits like making the keystroke rendering function more composable.
Release Notes:
- Added refinements to the keymap UI design.
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
Co-authored-by: Ben Kunkle <Ben.kunkle@gmail.com>
Closes #ISSUE
Adds a default sort when no filter query is provided in the keymap
editor.
The default sorting algorithm sorts by the source of the binding
(roughly in order of precedence)
- User
- Vim
- Base
- Default
- None (unbound actions)
within each source it sorts by action name alphabetically.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Adds a right click context menu to table rows, refactoring the table API
to support more general row rendering in the process, and creating
actions for the couple of operations available in the context menu.
Additionally includes an only partially related change to the context
menu API, which makes it easier to have actions that are disabled based
on a boolean value.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Closes #ISSUE
Separates the action input in the Keymap UI into it's own column, and
wraps the input in an `impl RenderOnce` element that highlights it as
JSON.
Release Notes:
- N/A *or* Added/Fixed/Improved ...
Adds the initial semblance of a keymap UI. It is currently gated behind the `settings-ui` feature flag. Follow up PRs will add polish and missing features.
Release Notes:
- N/A
---------
Co-authored-by: Ben Kunkle <ben@zed.dev>
Co-authored-by: Anthony <anthony@zed.dev>