bubbles
bubbles copied to clipboard
Key combinations
Is there an easy way of detecting key combinations, similar to how vim key combos work?
I'm guessing I can implement something myself by recording the time between key presses and all that.
The use case is to allow more complex keybindings in a program that are easier to remember.
Prefixing key combos with something like vim's <leader> key, or global actions with g.
There's no way to do this yet, though you can totally implement this in the manner like you're suggesting.
That said, this would also be an awesome feature for the Key Bubble. Transferring this issue accordingly.
@dlvhdr I think this could be implemented by "focusing" a particular element/component in the UI, whether that's invisible or not would be up to you, with 1 key press. Then subsequent key presses flow only to the focused element. Allowing you to avoid timing race conditions.
This is what I figured out just last night.
func (m Model) onKeyPress(msg tea.KeyMsg) (tea.Model, tea.Cmd) {
switch {
case key.Matches(msg, m.keys.FocusLeft):
return m.refocus(-1)
case key.Matches(msg, m.keys.FocusRight):
return m.refocus(1)
case key.Matches(msg, m.keys.Quit):
return m, tea.Quit
default:
return m.updateComponent(m.state.currentFocus, msg)
}
return m, nil
}
func (m Model) updateComponent(key componentKey, teaMsg tea.Msg) (Model, tea.Cmd) {
compUpdate, compCmd := m.components[key].Update(teaMsg)
m.components[key] = compUpdate
return m, compCmd
}
Let me know if this helps. Also, I absolutely love https://github.com/dlvhdr/gh-dash - I've been using it as inspiration for a different project of mine. I just really the clean look of it, and use of icons and such. In fact, I discovered this focusing method as I was looking at gh-dash and wanted an alternative to the keybinding you setup there. You use ctrl+u and ctrl+d to scroll the "sidebar", and I wanted to leverage more of the default keybindings of the viewport (pageup/down, etc). Anyways, cheers 🍻
Cool I like this idea @ghostsquad. I definitely think I need to improve the navigation in the preview pane and handle focus properly. Let me know if you find an elegant solution for your project