Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

status-bar: Reflect actual current keybindings #1242

Merged
merged 90 commits into from
Jul 27, 2022

Commits on Jul 25, 2022

  1. status-bar: first_line: Use more generic var names

    Rename all `CtrlKey...` to the equivalent `Key...` to make the name less
    specific. It implies that all key bindings use Ctrl as modifier key,
    which needn't necessarily be the case.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    828bc29 View commit details
    Browse the repository at this point in the history
  2. status-bar: first_line: Refactor ctrl_keys

    Removes lots of code duplication by `Unselect`ing all keys by default
    and only `Select`ing what is actually required for a given Input mode.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    a843195 View commit details
    Browse the repository at this point in the history
  3. utils: conditionally compile unix-specific code

    In `zellij_utils`, the following modules each contained code that was
    previously targeting only the unix platform:
    
    - consts: Works with unix-specific filesystem attributes to set e.g.
      special file permissions. Also relies on having a UID.
    - shared: Uses unix-specific filesystem attributes to set file
      permissions
    
    These will never work when targeting wasm. Hence the concerning code
    passages have been moved into private submodules that are only compiled
    and re-exported when the target isn't `#[cfg(unix)]`. The re-export
    makes sure that crates from the outside that use `zellij_utils` work as
    before, since from their point of view nothing has changed.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    82a729a View commit details
    Browse the repository at this point in the history
  4. utils: Share more modules with wasm

    that work on both wasm and unix natively. This requires factoring out
    bits of code in the `setup` and `input` modules into a private submodule
    that is re-exported when the compilation target is *not* "wasm". The
    following modules are now available to the wasm target:
    
    - cli
    - consts
    - data
    - envs
    - input (partial)
        - actions
        - command
        - configs
        - keybinds
        - layout
        - options
        - plugins
        - theme
    - pane_size
    - position
    - setup (partial)
    - shared
    
    The remaining modules unavailable to wasm have dependencies on crates
    that cannot compile against wasm, such as `async_std` or `termwiz`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    09c6706 View commit details
    Browse the repository at this point in the history
  5. utils/input/keybinds_test: Fix import

    of the `CharOrArrow` struct which is now part of the `data` submodule.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    484d7a5 View commit details
    Browse the repository at this point in the history
  6. utils/layout: Use global serde crate

    Previously the code was decorated with `#[serde(crate = "self::serde")]`
    statements which cannot be shared with wasm. Use the regular serde
    without specifying which serde is meant.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    548bb87 View commit details
    Browse the repository at this point in the history
  7. utils/data: Implement fmt::Display for Key

    so the Keybindings can be displayed via `format!` and friends in e.g.
    the status bar.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    1264cb3 View commit details
    Browse the repository at this point in the history
  8. tile/prelude: Re-export actions

    submodule of `zellij_utils` so the plugins can access the `ModeKeybinds`
    struct with all of its members.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    923b33b View commit details
    Browse the repository at this point in the history
  9. utils/data: Fix ModeInfo::keybinds type

    and transfer a vector of `(Key, Vec<Action>)` to the plugins so they can
    parse it themselves, instead of passing strings around. Due to the
    requirement of the `Eq` trait derive on `ModeInfo` this requires
    deriving `Eq` on all the types included by `Key` and `Action` as well.
    
    Note that `Action` includes the `layout::SplitSize` structure as a
    member. We cannot derive `Eq` here since `SplitSize::Percent(f64)`
    cannot satisfy `Eq` because `f64` doesn't implement this. So we add a
    new type to hack around this limitation by storing the percentage as
    `u64` internally, scaled by a factor of 10 000 and transforming it to
    f64 when needed. Refer to the documentation of `layout::Percent` for
    further information.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    6bda877 View commit details
    Browse the repository at this point in the history
  10. utils/data: Make Key sortable

    so the keybindings can be sorted after their keys.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    e6e6bf4 View commit details
    Browse the repository at this point in the history
  11. WIP: utils/input: Make keybinds accessible

    when generating `ModeInfo` structs.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    ff74417 View commit details
    Browse the repository at this point in the history
  12. utils/data: Handle unprintable chars in Key

    when displaying via the `fmt::Display` trait. Handles `\t` and `\n` and
    represents them as UTF-8 arrow glyphs.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    7adffd9 View commit details
    Browse the repository at this point in the history
  13. HACK: utils/layout: Use u64 for SplitSize::Percent

    The previous workaround using a custom `Percent` type fails at the
    absolute latest when confronted with user layouts, since these do not
    know about the scaling factor and will thus break. It still breaks
    currently because `Percent` now expects a u64 (i.e. `50`, not `50.0`)
    but this is more easily explained and understood.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    78184d7 View commit details
    Browse the repository at this point in the history
  14. status-bar: Add helper macros

    that retrieve the key bound to execute a sequence of `Action` given a
    specific Keybinding, and a shorthand that expands to
    `Action::SwitchToMode(InputMode::Normal)` used for pattern matching with
    the `matches!` macro.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    0ff8b4f View commit details
    Browse the repository at this point in the history
  15. status-bar/first_line: Get shared superkey if any

    from the `ModeKeybindings` in the current `ModeInfo` struct. If the
    configured keybindings for switching the modes don't have a superkey in
    common, do not print a common prefix.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    40e79d5 View commit details
    Browse the repository at this point in the history
  16. status-bar/first_line: Add key to KeyShortcut

    which is the key that must be pressed in the current mode to execute the
    given shortcut (i.e. switch to the given mode).
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    5ba84fb View commit details
    Browse the repository at this point in the history
  17. status-bar/first_line: Dynamically set mode binds

    Read the keybindings for switching the modes to print in the first line
    from the actually configured keybindings for the current mode. Add some
    logic to the code that:
    
    - Prints only the "single letter" of the keybinding if all mode-switch
      shortcuts *share the same modifier key*,
    - Or prints the whole keybinding (with modified) into each segment if
      there is no common modifier key.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    ca163cb View commit details
    Browse the repository at this point in the history
  18. status-bar/second_line: Display configured binds

    Instead of showing some hard-coded default values. For each mode, reads
    the keybindings from the configured keybindings based on some sequence
    of action. For example, the keybinding for `New` in the `Pane` menu is
    now determined by looking into the configured keybindings and finding
    what key is bound to the `Action::NewPane(None)` action.
    
    If no keybinding is found for a given sequence of actions, it will not
    show up in the segments either.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    a770f80 View commit details
    Browse the repository at this point in the history
  19. WIP: utils/keybinds: Make key order deterministic

    by using a BTreeMap which by default has all of its elements in sorted
    order internally. As of currently this doesn't seem to impress the order
    in which the keybindings are sent to the plugins, though.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    8449fdc View commit details
    Browse the repository at this point in the history
  20. utils/data: Reorder Key variants

    to have the Arrow keys sorted as "left", "down", "up", "right" in
    accordance with the display in e.g. the status bar.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    3545fd6 View commit details
    Browse the repository at this point in the history
  21. status-bar/first_line: Fix inverted matches!

    when trying to obtain the keybindings to switch between the input modes.
    Its initial purpose was to filter out all ' ', '\n' and 'Esc'
    keybindings for switching modes (As these are the default and not of
    interest for the status bar display), but it was not negated and thus
    only filtered out the aforementioned keys.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    c11f8cb View commit details
    Browse the repository at this point in the history
  22. status-bar: Don't get all modeswitch keybinds

    but only those that are displayed in the status bar. This currently
    excludes the keybindings for Entering the Pane/TabRename mode, Tmux mode
    and Prompt mode. We must explicitly exclude these since they aren't
    bound to the same Modifiers as the regular keys. Thus, if we e.g. enter
    Pane or Tab mode, it will pick up the
    `SwitchToMode(InputMode::TabRename)` action as being bound to `c`, hence
    the `superkey` function cannot find a common modifier, etc. But we don't
    display the `TabRename` input mode in the first line anyway, so we must
    ignore it.
    
    Therefore, we additionally add the keybinding to call the `Action::Quit`
    action to terminate zellij to the vector we return. Also remove the
    `(Key, InputMode)` tuple and convert the return type to a plain
    `Vec<Key>`, since the never worked with the `InputMode` in the first
    place.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    51aaa47 View commit details
    Browse the repository at this point in the history
  23. status-bar/first_line: Fix output for tight screen

    Implement the "Squeezed" display variant where we do not display which
    of the modes each keybinding switches to, but only the keybinding
    itself.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    d56db92 View commit details
    Browse the repository at this point in the history
  24. Configuration menu
    Copy the full SHA
    ff8ef7b View commit details
    Browse the repository at this point in the history
  25. status-bar/second-line: Refactor key hints

    Instead of determining the appropriate key hints for every case
    separately (i.e. enough space to show all, show shortened, shot
    best-effort), create a central function that returns for the current
    `InputMode` a Vector with tuples of:
    
    - A String to show in full-length mode
    - A String to show in shortened/best-effort mode
    - The vector of keys that goes with this key hint
    
    This allows all functions that need the hints to iterate over the vector
    and pick whatever hint suits them along with the Keys to display.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    3b75633 View commit details
    Browse the repository at this point in the history
  26. Configuration menu
    Copy the full SHA
    6a21a43 View commit details
    Browse the repository at this point in the history
  27. utils/data: Fix display for Key::Alt

    which previously printed only the internal char but not the modifier.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    0ba4a1b View commit details
    Browse the repository at this point in the history
  28. status-bar/first-line: Add hidden Tmux tile

    that is only shown when in Tmux mode. Note that with the default config
    this "breaks" the shared superkey display, because it correctly
    identifies that one can switch to Scroll mode via `[`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    c21c4c6 View commit details
    Browse the repository at this point in the history
  29. status-bar: Print superkey as part of first line

    Instead of first obtaining the superkey and then the rest of the first
    line to display. This way we don't need to split up individual data
    structures and carry a boolean flag around multiple functions.
    
    It also has the advantage that when the available space is really tight,
    the first line is entirely empty and doesn't display a stale superkey
    without any other keybinding hints.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    bc9533a View commit details
    Browse the repository at this point in the history
  30. status-bar: Rework keybinding theming

    Previously there were individual functions to create the tiles in the
    first line depending on whether:
    
    - A tile was selected, unselected, unselected alternate (for theming) or disabled, and
    - Tiles had full length or were displayed shortened
    
    In the first case, the functions that previously handled the theming
    only differed in what theme they apply to the otherwise identical
    content. Since the theming information was drawn from a flat structure
    that simulated hierarchy by giving hierarchical names to its theme
    "members", this couldn't be handled in code. In the second case, some of
    the theming information needed for the full-length shortcuts was
    replicated for the shortened shortcuts.
    
    Instead, rewrite the general Theming structure into a hierarchical one:
    Adds a new structure `SegmentStyle` that contains the style for a single
    segment depending on whether it is selected, unselected (alternate) or
    disabled. Refactor the `first-line` module to use a single function to
    generate either full-length or shortened tiles, that does functionally
    the same but switches themes based on the selection status of the tile
    it themes.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    5568673 View commit details
    Browse the repository at this point in the history
  31. status-bar/second-line: Return new LineParts

    from the `add_shortcut` function instead of modifying the input
    parameters.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    8f65cf1 View commit details
    Browse the repository at this point in the history
  32. status-bar/second-line: Implement adaptive behavior

    and make the keyhints adapt when the screen runs out of space. The hints
    first become shortened and when necessary partially disappear to display
    a "..." hint instead.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    1354bf2 View commit details
    Browse the repository at this point in the history
  33. status-bar/second-line: Show float pane binding

    based on the keycombination that's really bound to switching into the
    "Pane" input mode.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    6fd6bfb View commit details
    Browse the repository at this point in the history
  34. status-bar/get_keys_and_hints: Add more modes

    for the keybindings in Tmux and the Pane/TabRename input modes.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    47ee111 View commit details
    Browse the repository at this point in the history
  35. status-bar/second-line: Unify mode handling

    and don't do extra shortcut handling for Tmux and the Pane/TabRename
    modes any longer. Instead, assemble this like for all other modes from
    the keybinding and hints vector.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    4879ea1 View commit details
    Browse the repository at this point in the history
  36. status-bar/first-line: Refactor common modifier

    to a separate function so it can be used by other modules, too.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    e8d3c0c View commit details
    Browse the repository at this point in the history
  37. status-bar/second-line: Display modifier in hints

    when available. For example, for bindings to move between panes when in
    PaneRename mode, now displays "Alt + <hjkl>" instead of
    "<Alt+hAlt+j...>".
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    b0a6ecd View commit details
    Browse the repository at this point in the history
  38. utils/ipc: Remove Copy from ClientAttributes

     as preparation to add `Keybinds` as a member to the `ClientAttributes`
     struct. `Keybinds` contains a `HashMap`, for which the `std` doesn't
     derive `Copy` but only `Clone`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    6dd8d89 View commit details
    Browse the repository at this point in the history
  39. utils/input/keybinds: Fix import path

    Import `Key` and `InputMode` directly from `data`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    b4ae898 View commit details
    Browse the repository at this point in the history
  40. utils/ipc: Add Keybinds to ClientAttributes

    so we can keep track, pre-client, of the configured key bindings and
    pass them around further in the code.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    50236ac View commit details
    Browse the repository at this point in the history
  41. server/lib: Store ClientAttributes over Style

    in `SessionMetadata` to be able to pass Keybindings to other places in
    the code, too. Since `Style` is also a member of `ClientAttributes`,
    this works with minimal modifications.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    6b1507f View commit details
    Browse the repository at this point in the history
  42. utils/input: Change get_mode_info parameters

    to take a `ClientAttributes` struct instead of merely the `Style`
    information. This way we can get the `Style` from the
    `ClientAttributes`, and also have access to the `keybinds` member that
    stores the keybinding configuration.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    e0e3a52 View commit details
    Browse the repository at this point in the history
  43. utils/ipc: Use rmp for serde of IPC messages

    instead of `bincode`, which seemingly has issues (de)serializing
    `HashMap`s and `BTreeMap`s since `deserialize_any` isn't implemented for
    these types.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    bf6b5f6 View commit details
    Browse the repository at this point in the history
  44. fix(nix): remove assets from gitignore

    Remove `assets` from the gitignore of the plugins themselves,
    since every single plugin now depends on the asset being accessible
    in its source directory.
    a-kenji authored and har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    04bae29 View commit details
    Browse the repository at this point in the history
  45. tests/e2e: Fix status bar in snapshots

    to reflect the current state of the dynamic keybindings.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    0b3a034 View commit details
    Browse the repository at this point in the history
  46. status_bar/first_line: Don't show unbound modes

    If switching to a specific mode isn't bound to a key, don't show a
    tile/ribbon for it either. E.g. in `LOCKED` mode, this will only show
    the tile for the `LOCK` mode and ignore all others.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    6a0b982 View commit details
    Browse the repository at this point in the history
  47. utils/data: Make 'Key::Char(' ') visible as "␣"

    so the user doesn't only see a blank char but has an idea that the space
    key is meant.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    62b12ac View commit details
    Browse the repository at this point in the history
  48. status_bar/second_line: Remove extra hints

    generated by the `hint_producing_function` that would tell the user in
    every input mode how to get back to normal mode. Instead, add this as
    keybinding to the general keybindings vector.
    
    This removes some lines of duplicated code but most of all now applies
    the correct theming to this keybinding. Additionally, previously the
    `RenameTab` and `RenamePane` input modes would show the keybinding to
    get back to normal mode twice and both of them were hardcoded. This
    binding is now dynamically displayed based on what the user configured
    as keybinding.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    9bb990d View commit details
    Browse the repository at this point in the history
  49. utils/data: format unprintable chars as words

    instead of unicode symbols. E.g. write "SPACE" instead of "␣".
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    f1bf0d2 View commit details
    Browse the repository at this point in the history
  50. utils/data: Fix display for Ctrl/Alt keys

    previously their "inner" chars would be displayed with a regular
    `fmt::Display` for the `&str` type they are. This doesn't match what we
    want to output. So instead we wrap the inner chars into `Key::Char`
    before printing them.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    05962d0 View commit details
    Browse the repository at this point in the history
  51. utils/data: Change order of Keys

    so that e.g. for the default bindings in `Scroll` mode we prefer to show
    `PgDn|PgUp` rather than the arrow keys these actions are bound to as
    well.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    36f5fea View commit details
    Browse the repository at this point in the history
  52. status_bar/first_line: Don't ignore default char

    bindings by default. These include the '\n', ' ' and 'Esc' bindings that
    by default lead back to `Normal` input mode from all the modes.
    Previously we would unconditionally ignore them and consequently not
    print the tile when in fact the user may have bound this particular
    action to either of the keys.
    
    Instead now we first ignore the keys mentioned and if we turn up with an
    undefined binding, we consider these default keys as well so we get
    *something* to display in any case.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    636fb3c View commit details
    Browse the repository at this point in the history
  53. status_bar/first_line: Add space when no modifier

    is shared between the keybindings. This way there isn't a stray arrow at
    the very border of the screen, but it is spaced just like the tab-bar
    and the second line is.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    13af73d View commit details
    Browse the repository at this point in the history
  54. status_bar/second_line: Print separators

    between consecutive keys bound to specific actions. This allows the user
    to visually differ between different keys.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    76dfc5c View commit details
    Browse the repository at this point in the history
  55. Configuration menu
    Copy the full SHA
    a92ae99 View commit details
    Browse the repository at this point in the history
  56. status_bar/first_line: Don't suppress Disabled tiles

    Disabled is a special state that the keybindings only assume in locked
    mode. It turns the respective tiles grey to signal to the user that
    these are currently inactive. With respect to users new to zellij, it
    may appear confusing that when entering locked mode all the other tiles
    disappear (which they do because they have no valid keybinding
    assigned). Since we have no keybinding for them, we still display them
    but without any associated key (i.e. as `<>` for the binding).
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    4815ba3 View commit details
    Browse the repository at this point in the history
  57. status_bar/first_line: Don't print leading triangle

    on first tile, when there is no shared superkey.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    1969dd0 View commit details
    Browse the repository at this point in the history
  58. status_bar/second_line: Add exceptions

    for inter-key separators. Keeps groups of `hjkl` and arrow keys intact
    (doesn't add separators between the keys) but separates all others.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    5d1a7ee View commit details
    Browse the repository at this point in the history
  59. status_bar/main: Refactor action_key

    to a regular function instead of a macro. It turns out that while being
    able to match patterns is a nice feature, we completely rely on the keys
    that drop out of the pattern found this way to be sorted in a sensible
    way. Since we sort the key vectors in the necessary places after the
    keys, and not the actions, this of course doesn't apply when the user
    changes "hjkl" to "zjkl", which would then become "jklz". Now this is of
    course wrong, because "z" still means "Move focus left", and not "Move
    focus right".
    
    With the function we now assume a slice of Actions that we match the
    action vectors from the keybindings against to obtain the necessary
    keys. In order to avoid ugly `into_iter().chain(...)` constructs we had
    before we also add a new function `action_key_group` that takes a sliced
    array of slices to get a whole group of keys to display.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    07d0d60 View commit details
    Browse the repository at this point in the history
  60. status_bar/first_line: Fix "triangle" for short tiles

    since we do not want to display a colored triangle at the start of the
    line when in sortened mode (just as we do for the long tiles now).
    Also fix a bug that would make the triangle reappear when the first
    keybinding to be displayed didn't have a key assigned and thus wouldn't
    be displayed at all.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    0acbe10 View commit details
    Browse the repository at this point in the history
  61. status_bar/second_line: Fix typo

    that would cause single `Ctrl+?` bindings for actions in the second line
    to be displayed as `Ctrl + <Ctrl+?>`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    455b75b View commit details
    Browse the repository at this point in the history
  62. status_bar/second_line: Fix char count

    when displaying groups of keys in a binding with or without a separator.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    4715cd5 View commit details
    Browse the repository at this point in the history
  63. status_bar: Use new action_key fn

    instead of the previous macro to obtain the keys to display in the
    status bar in a fixed given order. Also fix the display "bug" where tab
    switching would be shows as "ArrowLeft/ArrowDown" instead of
    "ArrowLeft/ArrowRight".
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    ead39c3 View commit details
    Browse the repository at this point in the history
  64. status_bar/second_line: Fix floating pane hint

    that tells the user what keybinding to press to suppress the currently
    active floating panes. This was previously hardcoded.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    9190c27 View commit details
    Browse the repository at this point in the history
  65. utils: Send full keybinds in ModeInfo

    instead of the currently active `ModeKeybinds` for the active input
    mode. Some of the UI issues cannot be solved without having access to
    *all* keybindings.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    20a60db View commit details
    Browse the repository at this point in the history
  66. utils: Refactor keybinds vec into type

    to make clippy happy.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    b438022 View commit details
    Browse the repository at this point in the history
  67. Configuration menu
    Copy the full SHA
    68a1326 View commit details
    Browse the repository at this point in the history
  68. status_bar: Factor out printing keybindings

    into a separate function that takes a vector of keys and a palette and
    returns the painted key groups, with correct inter-character separation
    where necessary and factoring out common modifier keys.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    332596f View commit details
    Browse the repository at this point in the history
  69. status_bar/tip: Use real keybindings

    instead of printing hard-coded messages to the user.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    6a3f2ad View commit details
    Browse the repository at this point in the history
  70. status_bar: abort early when keyvector is empty

    in `style_key_with_modifier`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    7e0a37f View commit details
    Browse the repository at this point in the history
  71. status_bar/tip: Fix all keybindings

    and make them dynamic given the keybindings really active in the current
    session. Also display **UNBOUND** is some keybinding is missing from the
    users config.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    07c586b View commit details
    Browse the repository at this point in the history
  72. status_bar: Go clippy!

    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    569b334 View commit details
    Browse the repository at this point in the history
  73. status_bar: Add documentation

    and add a new exception group to `action_key_group` that ensures that
    `hl` and `jk` won't be separated with `|`.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    34658d9 View commit details
    Browse the repository at this point in the history
  74. status_bar/tip: Detect when key aren't bound

    correctly and show "UNBOUND" as keyhint instead, then. Previously we
    would only check the length of the whole keybinding segment, but that
    isn't a good indicator since most of the bindings require changing modes
    first, which already adds a variable number of letters to the segment.
    However, there is not point in showing how to get to a certain mode, if
    the binding needed in that mode doesn't exist.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    8606c4e View commit details
    Browse the repository at this point in the history
  75. status_bar/first_line: Show bindings when locked

    if the user has any configured.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    5bd2ad9 View commit details
    Browse the repository at this point in the history
  76. status_bar: Don't consider 'hl', 'jk' groups

    that don't need a separator in between the letters.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    a34f7ef View commit details
    Browse the repository at this point in the history
  77. status_bar/second_line: Add "search" keybindings

    for the new Search functionality.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    52e5cd4 View commit details
    Browse the repository at this point in the history
  78. tests/e2e: Fix snapshots

    with what the status bar now really displays.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    da05202 View commit details
    Browse the repository at this point in the history
  79. Configuration menu
    Copy the full SHA
    52ef7a0 View commit details
    Browse the repository at this point in the history
  80. status_bar/first_line: Rename 'long_tile'

    to the more descriptive name 'mode_shortcut', which better describes
    what this function does.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    1b373ae View commit details
    Browse the repository at this point in the history
  81. status_bar/first_line: Fix spacing in simple UI

    where the modifier would be shows as `Ctrl +`, without a trailing space.
    This isn't an issue in regular mode, where we have the spacing from the
    arrow gaps (`>>`) that "simulates" this effect.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    2e62513 View commit details
    Browse the repository at this point in the history
  82. status_bar: Refactor and rename ctrl_keys

    so it doesn't rely on some "external" index for operation any more.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    0513979 View commit details
    Browse the repository at this point in the history
  83. status_bar: Add unit tests to shared functions

    and fix a bug in the process where certain `Ctrl` keybindings would be
    displayed wrong.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    8891778 View commit details
    Browse the repository at this point in the history
  84. status_bar/first_line: Rename functions

    responsible for printing the long and short shortcut keyhint tiles. Also
    add some documentation that explains their purpose and the arguments
    they accept.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    3a06d5f View commit details
    Browse the repository at this point in the history
  85. Configuration menu
    Copy the full SHA
    a9327f6 View commit details
    Browse the repository at this point in the history
  86. utils/layout: Remove old comments

    introduced when rewriting `SplitSize::Percent` to not hold an `f64`
    type.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    1d8ef80 View commit details
    Browse the repository at this point in the history
  87. status_bar: Add "regex" as test dependency

    We use regular expressions to strip all ANSI escape sequences in the
    strings that are produced by the plugin functions during testing. We do
    not test for the style information, but merely for the raw text.
    har7an committed Jul 25, 2022
    Configuration menu
    Copy the full SHA
    96b28d7 View commit details
    Browse the repository at this point in the history
  88. Configuration menu
    Copy the full SHA
    80a84a3 View commit details
    Browse the repository at this point in the history

Commits on Jul 26, 2022

  1. Makefile: Always run tests on host triple

    This allows the unit tests for all plugins to be run on the host as well
    (because their default compilation target is wasm32-wasi).
    har7an committed Jul 26, 2022
    Configuration menu
    Copy the full SHA
    dc7ed86 View commit details
    Browse the repository at this point in the history

Commits on Jul 27, 2022

  1. tests/e2e: Add test for custom bindings

    in the status bar. Makes sure that the modified bindings from a custom
    configuration file are read and applied to the UI.
    har7an committed Jul 27, 2022
    Configuration menu
    Copy the full SHA
    e2544bd View commit details
    Browse the repository at this point in the history