refactor(config)!: rename keys table to keybinds (#725)

This commit is contained in:
Ayyan 2026-01-25 21:03:03 -05:00 • committed by GitHub
parent 08bda9e405
commit 0dbe115864
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 167 additions and 165 deletions

View file

@ -101,7 +101,7 @@ func (a *App) quit() {
func (a *App) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
switch event.Name() {
case a.cfg.Keys.Quit:
case a.cfg.Keybinds.Quit:
a.quit()
return nil
case "Ctrl+C":

View file

@ -78,8 +78,8 @@ type (
Icons Icons `toml:"icons"`
Keys Keys `toml:"keys"`
Theme Theme `toml:"theme"`
Keybinds Keybinds `toml:"keybinds"`
Theme Theme `toml:"theme"`
}
)

View file

@ -4,7 +4,7 @@ auto_focus = true
# Whether to enable mouse or not.
mouse = true
# The program to open when the `keys.message_input.editor` keymap is pressed. Set the value to `"default"` to use `$EDITOR`.
# The program to open when the `message_input.editor` keybind is pressed. Set the value to `"default"` to use `$EDITOR`.
editor = "default"
# "default" (unknown), "online", "dnd", "idle", "invisible", "offline"
@ -59,7 +59,7 @@ guild_store = "s-"
# Global shortcuts
# Esc: Reset message selection or close the channel selection popup.
[keys]
[keybinds]
focus_guilds_tree = "Ctrl+G"
focus_messages_list = "Ctrl+T"
focus_message_input = "Ctrl+I"
@ -73,7 +73,7 @@ quit = "Ctrl+C"
# Requires re-login upon restart.
logout = "Ctrl+D"
[keys.picker]
[keybinds.picker]
toggle = "Ctrl+K"
cancel = "Esc"
up = "Ctrl+P"
@ -83,11 +83,11 @@ bottom = "End"
select = "Enter"
# Only while focusing on the guilds tree
[keys.guilds_tree]
select_previous = "Rune[k]"
select_next = "Rune[j]"
select_first = "Rune[g]"
select_last = "Rune[G]"
[keybinds.guilds_tree]
up = "Rune[k]"
down = "Rune[j]"
top = "Rune[g]"
bottom = "Rune[G]"
# Select the currently highlighted text-based channel or expand a guild or channel.
select_current = "Enter"
yank_id = "Rune[i]"
@ -95,11 +95,11 @@ collapse_parent_node = "Rune[-]"
move_to_parent_node = "Rune[p]"
# Only while focusing on sent messages
[keys.messages_list]
select_previous = "Rune[k]"
select_next = "Rune[j]"
select_first = "Rune[g]"
select_last = "Rune[G]"
[keybinds.messages_list]
select_up = "Rune[k]"
select_down = "Rune[j]"
select_top = "Rune[g]"
select_bottom = "Rune[G]"
# Scroll the messages list without changing the selection.
scroll_up = "Rune[K]"
scroll_down = "Rune[J]"
@ -125,7 +125,7 @@ yank_id = "Rune[i]"
# Only while typing a message
# Alt+Enter: Insert a new line to the current text.
[keys.message_input]
[keybinds.message_input]
# paste from clipboard (supports both text and images)
paste = "Ctrl+V"
send = "Enter"
@ -137,11 +137,11 @@ tab_complete = "Tab"
open_editor = "Ctrl+E"
open_file_picker = "Ctrl+Rune[\\]"
[keys.mentions_list]
select_previous = "Ctrl+P"
select_next = "Ctrl+N"
select_first = "Home"
select_last = "End"
[keybinds.mentions_list]
up = "Ctrl+P"
down = "Ctrl+N"
top = "Home"
bottom = "End"
# style = { foreground = "", background = "", attributes = "" or [""] }
[theme.title]

View file

@ -0,0 +1,89 @@
package config
type NavigationKeybinds struct {
Up string `toml:"up"`
Down string `toml:"down"`
Top string `toml:"top"`
Bottom string `toml:"bottom"`
}
type ScrollKeybinds struct {
ScrollUp string `toml:"scroll_up"`
ScrollDown string `toml:"scroll_down"`
ScrollTop string `toml:"scroll_top"`
ScrollBottom string `toml:"scroll_bottom"`
}
type SelectionKeybinds struct {
SelectUp string `toml:"select_up"`
SelectDown string `toml:"select_down"`
SelectTop string `toml:"select_top"`
SelectBottom string `toml:"select_bottom"`
}
type PickerKeybinds struct {
NavigationKeybinds
Toggle string `toml:"toggle"`
Cancel string `toml:"cancel"`
Select string `toml:"select"`
}
type GuildsTreeKeybinds struct {
NavigationKeybinds
SelectCurrent string `toml:"select_current"`
YankID string `toml:"yank_id"`
CollapseParentNode string `toml:"collapse_parent_node"`
MoveToParentNode string `toml:"move_to_parent_node"`
}
type MessagesListKeybinds struct {
SelectionKeybinds
ScrollKeybinds
SelectReply string `toml:"select_reply"`
Reply string `toml:"reply"`
ReplyMention string `toml:"reply_mention"`
Cancel string `toml:"cancel"`
Edit string `toml:"edit"`
Delete string `toml:"delete"`
DeleteConfirm string `toml:"delete_confirm"`
Open string `toml:"open"`
YankContent string `toml:"yank_content"`
YankURL string `toml:"yank_url"`
YankID string `toml:"yank_id"`
}
type MessageInputKeybinds struct {
Paste string `toml:"paste"`
Send string `toml:"send"`
Cancel string `toml:"cancel"`
TabComplete string `toml:"tab_complete"`
OpenEditor string `toml:"open_editor"`
OpenFilePicker string `toml:"open_file_picker"`
}
type MentionsListKeybinds struct {
NavigationKeybinds
}
type Keybinds struct {
FocusGuildsTree string `toml:"focus_guilds_tree"`
FocusMessagesList string `toml:"focus_messages_list"`
FocusMessageInput string `toml:"focus_message_input"`
FocusPrevious string `toml:"focus_previous"`
FocusNext string `toml:"focus_next"`
ToggleGuildsTree string `toml:"toggle_guilds_tree"`
Picker PickerKeybinds `toml:"picker"`
GuildsTree GuildsTreeKeybinds `toml:"guilds_tree"`
MessagesList MessagesListKeybinds `toml:"messages_list"`
MessageInput MessageInputKeybinds `toml:"message_input"`
MentionsList MentionsListKeybinds `toml:"mentions_list"`
Logout string `toml:"logout"`
Quit string `toml:"quit"`
}

View file

@ -1,87 +0,0 @@
package config
type (
SelectionKeys struct {
SelectPrevious string `toml:"select_previous"`
SelectNext string `toml:"select_next"`
SelectFirst string `toml:"select_first"`
SelectLast string `toml:"select_last"`
}
GuildsTreeKeys struct {
SelectionKeys
SelectCurrent string `toml:"select_current"`
YankID string `toml:"yank_id"`
CollapseParentNode string `toml:"collapse_parent_node"`
MoveToParentNode string `toml:"move_to_parent_node"`
}
MessagesListKeys struct {
SelectionKeys
ScrollUp string `toml:"scroll_up"`
ScrollDown string `toml:"scroll_down"`
ScrollTop string `toml:"scroll_top"`
ScrollBottom string `toml:"scroll_bottom"`
SelectReply string `toml:"select_reply"`
Reply string `toml:"reply"`
ReplyMention string `toml:"reply_mention"`
Cancel string `toml:"cancel"`
Edit string `toml:"edit"`
Delete string `toml:"delete"`
DeleteConfirm string `toml:"delete_confirm"`
Open string `toml:"open"`
YankContent string `toml:"yank_content"`
YankURL string `toml:"yank_url"`
YankID string `toml:"yank_id"`
}
MessageInputKeys struct {
Paste string `toml:"paste"`
Send string `toml:"send"`
Cancel string `toml:"cancel"`
TabComplete string `toml:"tab_complete"`
OpenEditor string `toml:"open_editor"`
OpenFilePicker string `toml:"open_file_picker"`
}
MentionsListKeys struct {
SelectionKeys
}
NavigationKeys struct {
Up string `toml:"up"`
Down string `toml:"down"`
Top string `toml:"top"`
Bottom string `toml:"bottom"`
}
PickerKeys struct {
Toggle string `toml:"toggle"`
Cancel string `toml:"cancel"`
NavigationKeys
Select string `toml:"select"`
}
Keys struct {
FocusGuildsTree string `toml:"focus_guilds_tree"`
FocusMessagesList string `toml:"focus_messages_list"`
FocusMessageInput string `toml:"focus_message_input"`
FocusPrevious string `toml:"focus_previous"`
FocusNext string `toml:"focus_next"`
ToggleGuildsTree string `toml:"toggle_guilds_tree"`
Picker PickerKeys `toml:"picker"`
GuildsTree GuildsTreeKeys `toml:"guilds_tree"`
MessagesList MessagesListKeys `toml:"messages_list"`
MessageInput MessageInputKeys `toml:"message_input"`
MentionsList MentionsListKeys `toml:"mentions_list"`
Logout string `toml:"logout"`
Quit string `toml:"quit"`
}
)

View file

@ -31,12 +31,12 @@ func newChannelsPicker(cfg *config.Config, chatView *View) *channelsPicker {
cp.SetSelectedFunc(cp.onSelected)
cp.SetTitle("Channels")
cp.SetKeyMap(&picker.KeyMap{
Cancel: cfg.Keys.Picker.Cancel,
Up: cfg.Keys.Picker.Up,
Down: cfg.Keys.Picker.Down,
Top: cfg.Keys.Picker.Top,
Bottom: cfg.Keys.Picker.Bottom,
Select: cfg.Keys.Picker.Select,
Cancel: cfg.Keybinds.Picker.Cancel,
Up: cfg.Keybinds.Picker.Up,
Down: cfg.Keybinds.Picker.Down,
Top: cfg.Keybinds.Picker.Top,
Bottom: cfg.Keybinds.Picker.Bottom,
Select: cfg.Keybinds.Picker.Select,
})
return cp
}

View file

@ -256,27 +256,27 @@ func (gt *guildsTree) collapseParentNode(node *tview.TreeNode) {
func (gt *guildsTree) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
switch event.Name() {
case gt.cfg.Keys.GuildsTree.CollapseParentNode:
case gt.cfg.Keybinds.GuildsTree.CollapseParentNode:
gt.collapseParentNode(gt.GetCurrentNode())
return nil
case gt.cfg.Keys.GuildsTree.MoveToParentNode:
case gt.cfg.Keybinds.GuildsTree.MoveToParentNode:
return tcell.NewEventKey(tcell.KeyRune, "K", tcell.ModNone)
case gt.cfg.Keys.GuildsTree.SelectPrevious:
case gt.cfg.Keybinds.GuildsTree.Up:
return tcell.NewEventKey(tcell.KeyUp, "", tcell.ModNone)
case gt.cfg.Keys.GuildsTree.SelectNext:
case gt.cfg.Keybinds.GuildsTree.Down:
return tcell.NewEventKey(tcell.KeyDown, "", tcell.ModNone)
case gt.cfg.Keys.GuildsTree.SelectFirst:
case gt.cfg.Keybinds.GuildsTree.Top:
gt.Move(gt.GetRowCount() * -1)
// return tcell.NewEventKey(tcell.KeyHome, 0, tcell.ModNone)
case gt.cfg.Keys.GuildsTree.SelectLast:
case gt.cfg.Keybinds.GuildsTree.Bottom:
gt.Move(gt.GetRowCount())
// return tcell.NewEventKey(tcell.KeyEnd, 0, tcell.ModNone)
case gt.cfg.Keys.GuildsTree.SelectCurrent:
case gt.cfg.Keybinds.GuildsTree.SelectCurrent:
return tcell.NewEventKey(tcell.KeyEnter, "", tcell.ModNone)
case gt.cfg.Keys.GuildsTree.YankID:
case gt.cfg.Keybinds.GuildsTree.YankID:
gt.yankID()
}

View file

@ -102,11 +102,11 @@ func (mi *messageInput) stopTypingTimer() {
func (mi *messageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
switch event.Name() {
case mi.cfg.Keys.MessageInput.Paste:
case mi.cfg.Keybinds.MessageInput.Paste:
mi.paste()
return tcell.NewEventKey(tcell.KeyCtrlV, "", tcell.ModNone)
case mi.cfg.Keys.MessageInput.Send:
case mi.cfg.Keybinds.MessageInput.Send:
if mi.chatView.GetVisibile(mentionsListPageName) {
mi.tabComplete()
return nil
@ -114,15 +114,15 @@ func (mi *messageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
mi.send()
return nil
case mi.cfg.Keys.MessageInput.OpenEditor:
case mi.cfg.Keybinds.MessageInput.OpenEditor:
mi.stopTabCompletion()
mi.editor()
return nil
case mi.cfg.Keys.MessageInput.OpenFilePicker:
case mi.cfg.Keybinds.MessageInput.OpenFilePicker:
mi.stopTabCompletion()
mi.openFilePicker()
return nil
case mi.cfg.Keys.MessageInput.Cancel:
case mi.cfg.Keybinds.MessageInput.Cancel:
if mi.chatView.GetVisibile(mentionsListPageName) {
mi.stopTabCompletion()
} else {
@ -130,7 +130,7 @@ func (mi *messageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
}
return nil
case mi.cfg.Keys.MessageInput.TabComplete:
case mi.cfg.Keybinds.MessageInput.TabComplete:
go mi.chatView.app.QueueUpdateDraw(func() { mi.tabComplete() })
return nil
default:
@ -151,16 +151,16 @@ func (mi *messageInput) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
if mi.chatView.GetVisibile(mentionsListPageName) {
handler := mi.mentionsList.InputHandler()
switch event.Name() {
case mi.cfg.Keys.MentionsList.SelectPrevious:
case mi.cfg.Keybinds.MentionsList.Up:
handler(tcell.NewEventKey(tcell.KeyUp, "", tcell.ModNone), nil)
return nil
case mi.cfg.Keys.MentionsList.SelectNext:
case mi.cfg.Keybinds.MentionsList.Down:
handler(tcell.NewEventKey(tcell.KeyDown, "", tcell.ModNone), nil)
return nil
case mi.cfg.Keys.MentionsList.SelectFirst:
case mi.cfg.Keybinds.MentionsList.Top:
handler(tcell.NewEventKey(tcell.KeyHome, "", tcell.ModNone), nil)
return nil
case mi.cfg.Keys.MentionsList.SelectLast:
case mi.cfg.Keybinds.MentionsList.Bottom:
handler(tcell.NewEventKey(tcell.KeyEnd, "", tcell.ModNone), nil)
return nil
}

View file

@ -288,51 +288,51 @@ func (ml *messagesList) selectedMessage() (*discord.Message, error) {
func (ml *messagesList) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
switch event.Name() {
case ml.cfg.Keys.MessagesList.ScrollUp:
case ml.cfg.Keybinds.MessagesList.ScrollUp:
ml.ScrollUp()
return nil
case ml.cfg.Keys.MessagesList.ScrollDown:
case ml.cfg.Keybinds.MessagesList.ScrollDown:
ml.ScrollDown()
return nil
case ml.cfg.Keys.MessagesList.ScrollTop:
case ml.cfg.Keybinds.MessagesList.ScrollTop:
ml.ScrollToStart()
return nil
case ml.cfg.Keys.MessagesList.ScrollBottom:
case ml.cfg.Keybinds.MessagesList.ScrollBottom:
ml.ScrollToEnd()
return nil
case ml.cfg.Keys.MessagesList.Cancel:
case ml.cfg.Keybinds.MessagesList.Cancel:
ml.clearSelection()
return nil
case ml.cfg.Keys.MessagesList.SelectPrevious, ml.cfg.Keys.MessagesList.SelectNext, ml.cfg.Keys.MessagesList.SelectFirst, ml.cfg.Keys.MessagesList.SelectLast, ml.cfg.Keys.MessagesList.SelectReply:
case ml.cfg.Keybinds.MessagesList.SelectUp, ml.cfg.Keybinds.MessagesList.SelectDown, ml.cfg.Keybinds.MessagesList.SelectTop, ml.cfg.Keybinds.MessagesList.SelectBottom, ml.cfg.Keybinds.MessagesList.SelectReply:
ml._select(event.Name())
return nil
case ml.cfg.Keys.MessagesList.YankID:
case ml.cfg.Keybinds.MessagesList.YankID:
ml.yankID()
return nil
case ml.cfg.Keys.MessagesList.YankContent:
case ml.cfg.Keybinds.MessagesList.YankContent:
ml.yankContent()
return nil
case ml.cfg.Keys.MessagesList.YankURL:
case ml.cfg.Keybinds.MessagesList.YankURL:
ml.yankURL()
return nil
case ml.cfg.Keys.MessagesList.Open:
case ml.cfg.Keybinds.MessagesList.Open:
ml.open()
return nil
case ml.cfg.Keys.MessagesList.Reply:
case ml.cfg.Keybinds.MessagesList.Reply:
ml.reply(false)
return nil
case ml.cfg.Keys.MessagesList.ReplyMention:
case ml.cfg.Keybinds.MessagesList.ReplyMention:
ml.reply(true)
return nil
case ml.cfg.Keys.MessagesList.Edit:
case ml.cfg.Keybinds.MessagesList.Edit:
ml.edit()
return nil
case ml.cfg.Keys.MessagesList.Delete:
case ml.cfg.Keybinds.MessagesList.Delete:
ml.delete()
return nil
case ml.cfg.Keys.MessagesList.DeleteConfirm:
case ml.cfg.Keybinds.MessagesList.DeleteConfirm:
ml.confirmDelete()
return nil
}
@ -349,7 +349,7 @@ func (ml *messagesList) _select(name string) {
cursor := ml.Cursor()
switch name {
case ml.cfg.Keys.MessagesList.SelectPrevious:
case ml.cfg.Keybinds.MessagesList.SelectUp:
switch {
case cursor == -1:
cursor = len(messages) - 1
@ -383,18 +383,18 @@ func (ml *messagesList) _select(name string) {
ml.messages = slices.Concat(older, ml.messages)
cursor = len(messages) - 1
}
case ml.cfg.Keys.MessagesList.SelectNext:
case ml.cfg.Keybinds.MessagesList.SelectDown:
switch {
case cursor == -1:
cursor = len(messages) - 1
case cursor < len(messages)-1:
cursor++
}
case ml.cfg.Keys.MessagesList.SelectFirst:
case ml.cfg.Keybinds.MessagesList.SelectTop:
cursor = 0
case ml.cfg.Keys.MessagesList.SelectLast:
case ml.cfg.Keybinds.MessagesList.SelectBottom:
cursor = len(messages) - 1
case ml.cfg.Keys.MessagesList.SelectReply:
case ml.cfg.Keybinds.MessagesList.SelectReply:
if cursor == -1 || cursor >= len(messages) {
return
}
@ -509,13 +509,13 @@ func (ml *messagesList) showAttachmentsList(urls []string, attachments []discord
list.
SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
switch event.Name() {
case ml.cfg.Keys.MessagesList.SelectPrevious:
case ml.cfg.Keybinds.MessagesList.SelectUp:
return tcell.NewEventKey(tcell.KeyUp, "", tcell.ModNone)
case ml.cfg.Keys.MessagesList.SelectNext:
case ml.cfg.Keybinds.MessagesList.SelectDown:
return tcell.NewEventKey(tcell.KeyDown, "", tcell.ModNone)
case ml.cfg.Keys.MessagesList.SelectFirst:
case ml.cfg.Keybinds.MessagesList.SelectTop:
return tcell.NewEventKey(tcell.KeyHome, "", tcell.ModNone)
case ml.cfg.Keys.MessagesList.SelectLast:
case ml.cfg.Keybinds.MessagesList.SelectBottom:
return tcell.NewEventKey(tcell.KeyEnd, "", tcell.ModNone)
}

View file

@ -181,24 +181,24 @@ func (v *View) focusNext() {
func (v *View) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
switch event.Name() {
case v.cfg.Keys.FocusGuildsTree:
case v.cfg.Keybinds.FocusGuildsTree:
v.messageInput.removeMentionsList()
v.focusGuildsTree()
return nil
case v.cfg.Keys.FocusMessagesList:
case v.cfg.Keybinds.FocusMessagesList:
v.messageInput.removeMentionsList()
v.app.SetFocus(v.messagesList)
return nil
case v.cfg.Keys.FocusMessageInput:
case v.cfg.Keybinds.FocusMessageInput:
v.focusMessageInput()
return nil
case v.cfg.Keys.FocusPrevious:
case v.cfg.Keybinds.FocusPrevious:
v.focusPrevious()
return nil
case v.cfg.Keys.FocusNext:
case v.cfg.Keybinds.FocusNext:
v.focusNext()
return nil
case v.cfg.Keys.Logout:
case v.cfg.Keybinds.Logout:
if v.onLogout != nil {
v.onLogout()
}
@ -209,10 +209,10 @@ func (v *View) onInputCapture(event *tcell.EventKey) *tcell.EventKey {
}
return nil
case v.cfg.Keys.ToggleGuildsTree:
case v.cfg.Keybinds.ToggleGuildsTree:
v.toggleGuildsTree()
return nil
case v.cfg.Keys.Picker.Toggle:
case v.cfg.Keybinds.Picker.Toggle:
v.togglePicker()
return nil
}