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

Feat/user keybinds config externalized #58

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
229 changes: 217 additions & 12 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,26 +9,231 @@ import (
)

func TestReadConfig(t *testing.T) {

tests := []struct {
UserConfig string
Want map[string]any
}{
{
UserConfig: "",
Want: map[string]any{"config.Polling-Time": 500, "config.Tab-Order": []any{"images", "containers", "volumes"}, "config.Notification-Timeout": 2000},
},
{
UserConfig: `config:
Polling-Time: 100`,
Want: map[string]any{"config.Polling-Time": 100, "config.Tab-Order": []any{"images", "containers", "volumes"}, "config.Notification-Timeout": 2000},
},
// {
// UserConfig: "",
// Want: map[string]any{
// "config.Polling-Time": 500,
// "config.Tab-Order": []any{"images", "containers", "volumes"},
// "config.Notification-Timeout": 2000,
// "keybindings.navigation.Enter": []any{"enter"},
// "keybindings.navigation.Back": []any{"esc"},
// "keybindings.navigation.Quit": []any{"q", "ctrl+c"},
// "keybindings.navigation.Select": []any{" "},
// "keybindings.navigation.NextTab": []any{"right", "tab", "l"},
// "keybindings.navigation.PrevTab": []any{"left", "shift+tab", "h"},
// "keybindings.navigation.NextItem": []any{"down", "j"},
// "keybindings.navigation.PrevItem": []any{"up", "k"},
// "keybindings.navigation.PrevPage": []any{"["},
// "keybindings.navigation.NextPage": []any{"]"},
// "keybindings.image.Build": []any{"b"},
// "keybindings.image.CopyId": []any{"c"},
// "keybindings.image.Delete": []any{"d"},
// "keybindings.image.DeleteForce": []any{"D"},
// "keybindings.image.DeleteForceBulk": []any{"D"},
// "keybindings.image.ExitSelectionMode": []any{"esc"},
// "keybindings.image.Prune": []any{"p"},
// "keybindings.image.Rename": []any{"R"},
// "keybindings.image.Run": []any{"r"},
// "keybindings.image.RunAndExec": []any{"x"},
// "keybindings.image.Scout": []any{"s"},
// "keybindings.container.CopyId": []any{"c"},
// "keybindings.container.Delete": []any{"d"},
// "keybindings.container.DeleteForce": []any{"D"},
// "keybindings.container.Exec": []any{"x"},
// "keybindings.container.Prune": []any{"p"},
// "keybindings.container.Restart": []any{"r"},
// "keybindings.container.ShowLogs": []any{"L"},
// "keybindings.container.ToggleListAll": []any{"a"},
// "keybindings.container.TogglePause": []any{"t"},
// "keybindings.container.ToggleStartStop": []any{"s"},
// "keybindings.containerBulk.DeleteForce": []any{"D"},
// "keybindings.containerBulk.ExitSelectionMode": []any{"esc"},
// "keybindings.containerBulk.Restart": []any{"r"},
// "keybindings.containerBulk.ToggleListAll": []any{"a"},
// "keybindings.containerBulk.TogglePause": []any{"t"},
// "keybindings.containerBulk.ToggleStartStop": []any{"s"},
// "keybindings.volume.Delete": []any{"d"},
// "keybindings.volume.DeleteForce": []any{"D"},
// "keybindings.volume.Prune": []any{"p"},
// "keybindings.volume.CopyId": []any{"c"},
// "keybindings.volumeBulk.DeleteForce": []any{"D"},
// "keybindings.volumeBulk.ExitSelectionMode": []any{"esc"},
// },
// },
// {
// UserConfig: `config:
// Polling-Time: 100`,
// Want: map[string]any{
// "config.Polling-Time": 100,
// "config.Tab-Order": []any{"images", "containers", "volumes"},
// "config.Notification-Timeout": 2000,
// "keybindings.navigation.Enter": []any{"enter"},
// "keybindings.navigation.Back": []any{"esc"},
// "keybindings.navigation.Quit": []any{"q", "ctrl+c"},
// "keybindings.navigation.Select": []any{" "},
// "keybindings.navigation.NextTab": []any{"right", "tab", "l"},
// "keybindings.navigation.PrevTab": []any{"left", "shift+tab", "h"},
// "keybindings.navigation.NextItem": []any{"down", "j"},
// "keybindings.navigation.PrevItem": []any{"up", "k"},
// "keybindings.navigation.PrevPage": []any{"["},
// "keybindings.navigation.NextPage": []any{"]"},
// "keybindings.image.Build": []any{"b"},
// "keybindings.image.CopyId": []any{"c"},
// "keybindings.image.Delete": []any{"d"},
// "keybindings.image.DeleteForce": []any{"D"},
// "keybindings.image.DeleteForceBulk": []any{"D"},
// "keybindings.image.ExitSelectionMode": []any{"esc"},
// "keybindings.image.Prune": []any{"p"},
// "keybindings.image.Rename": []any{"R"},
// "keybindings.image.Run": []any{"r"},
// "keybindings.image.RunAndExec": []any{"x"},
// "keybindings.image.Scout": []any{"s"},
// "keybindings.container.CopyId": []any{"c"},
// "keybindings.container.Delete": []any{"d"},
// "keybindings.container.DeleteForce": []any{"D"},
// "keybindings.container.Exec": []any{"x"},
// "keybindings.container.Prune": []any{"p"},
// "keybindings.container.Restart": []any{"r"},
// "keybindings.container.ShowLogs": []any{"L"},
// "keybindings.container.ToggleListAll": []any{"a"},
// "keybindings.container.TogglePause": []any{"t"},
// "keybindings.container.ToggleStartStop": []any{"s"},
// "keybindings.containerBulk.DeleteForce": []any{"D"},
// "keybindings.containerBulk.ExitSelectionMode": []any{"esc"},
// "keybindings.containerBulk.Restart": []any{"r"},
// "keybindings.containerBulk.ToggleListAll": []any{"a"},
// "keybindings.containerBulk.TogglePause": []any{"t"},
// "keybindings.containerBulk.ToggleStartStop": []any{"s"},
// "keybindings.volume.Delete": []any{"d"},
// "keybindings.volume.DeleteForce": []any{"D"},
// "keybindings.volume.Prune": []any{"p"},
// "keybindings.volume.CopyId": []any{"c"},
// "keybindings.volumeBulk.DeleteForce": []any{"D"},
// "keybindings.volumeBulk.ExitSelectionMode": []any{"esc"},
// },
// },
// {
// UserConfig: `config:
// Polling-Time: 200
// Tab-Order: [containers, volumes]
// Notification-Timeout: 10000`,
// Want: map[string]any{
// "config.Polling-Time": 200,
// "config.Tab-Order": []any{"containers", "volumes"},
// "config.Notification-Timeout": 10000,
// "keybindings.navigation.Enter": []any{"enter"},
// "keybindings.navigation.Back": []any{"esc"},
// "keybindings.navigation.Quit": []any{"q", "ctrl+c"},
// "keybindings.navigation.Select": []any{" "},
// "keybindings.navigation.NextTab": []any{"right", "tab", "l"},
// "keybindings.navigation.PrevTab": []any{"left", "shift+tab", "h"},
// "keybindings.navigation.NextItem": []any{"down", "j"},
// "keybindings.navigation.PrevItem": []any{"up", "k"},
// "keybindings.navigation.PrevPage": []any{"["},
// "keybindings.navigation.NextPage": []any{"]"},
// "keybindings.image.Build": []any{"b"},
// "keybindings.image.CopyId": []any{"c"},
// "keybindings.image.Delete": []any{"d"},
// "keybindings.image.DeleteForce": []any{"D"},
// "keybindings.image.DeleteForceBulk": []any{"D"},
// "keybindings.image.ExitSelectionMode": []any{"esc"},
// "keybindings.image.Prune": []any{"p"},
// "keybindings.image.Rename": []any{"R"},
// "keybindings.image.Run": []any{"r"},
// "keybindings.image.RunAndExec": []any{"x"},
// "keybindings.image.Scout": []any{"s"},
// "keybindings.container.CopyId": []any{"c"},
// "keybindings.container.Delete": []any{"d"},
// "keybindings.container.DeleteForce": []any{"D"},
// "keybindings.container.Exec": []any{"x"},
// "keybindings.container.Prune": []any{"p"},
// "keybindings.container.Restart": []any{"r"},
// "keybindings.container.ShowLogs": []any{"L"},
// "keybindings.container.ToggleListAll": []any{"a"},
// "keybindings.container.TogglePause": []any{"t"},
// "keybindings.container.ToggleStartStop": []any{"s"},
// "keybindings.containerBulk.DeleteForce": []any{"D"},
// "keybindings.containerBulk.ExitSelectionMode": []any{"esc"},
// "keybindings.containerBulk.Restart": []any{"r"},
// "keybindings.containerBulk.ToggleListAll": []any{"a"},
// "keybindings.containerBulk.TogglePause": []any{"t"},
// "keybindings.containerBulk.ToggleStartStop": []any{"s"},
// "keybindings.volume.Delete": []any{"d"},
// "keybindings.volume.DeleteForce": []any{"D"},
// "keybindings.volume.Prune": []any{"p"},
// "keybindings.volume.CopyId": []any{"c"},
// "keybindings.volumeBulk.DeleteForce": []any{"D"},
// "keybindings.volumeBulk.ExitSelectionMode": []any{"esc"},
// },
// },
{
UserConfig: `config:
Polling-Time: 200
Tab-Order: [containers, volumes]
Notification-Timeout: 10000`,
Want: map[string]any{"config.Polling-Time": 200, "config.Tab-Order": []any{"containers", "volumes"}, "config.Notification-Timeout": 10000},
Notification-Timeout: 10000
keybindings:
navigation:
Enter: [e]
Quit: [q, ctrl+a]
image:
Build: [B]
CopyId: [C]
container:
CopyId: [C]
Delete: [D]
`,
Want: map[string]any{
"config.Polling-Time": 200,
"config.Tab-Order": []any{"containers", "volumes"},
"config.Notification-Timeout": 10000,
"keybindings.navigation.Enter": []any{"e"},
"keybindings.navigation.Back": []any{"esc"},
"keybindings.navigation.Quit": []any{"q", "ctrl+a"},
"keybindings.navigation.Select": []any{" "},
"keybindings.navigation.NextTab": []any{"right", "tab", "l"},
"keybindings.navigation.PrevTab": []any{"left", "shift+tab", "h"},
"keybindings.navigation.NextItem": []any{"down", "j"},
"keybindings.navigation.PrevItem": []any{"up", "k"},
"keybindings.navigation.PrevPage": []any{"["},
"keybindings.navigation.NextPage": []any{"]"},
"keybindings.image.Build": []any{"B"},
"keybindings.image.CopyId": []any{"C"},
"keybindings.image.Delete": []any{"d"},
"keybindings.image.DeleteForce": []any{"D"},
"keybindings.image.DeleteForceBulk": []any{"D"},
"keybindings.image.ExitSelectionMode": []any{"esc"},
"keybindings.image.Prune": []any{"p"},
"keybindings.image.Rename": []any{"R"},
"keybindings.image.Run": []any{"r"},
"keybindings.image.RunAndExec": []any{"x"},
"keybindings.image.Scout": []any{"s"},
"keybindings.container.CopyId": []any{"C"},
"keybindings.container.Delete": []any{"D"},
"keybindings.container.DeleteForce": []any{"D"},
"keybindings.container.Exec": []any{"x"},
"keybindings.container.Prune": []any{"p"},
"keybindings.container.Restart": []any{"r"},
"keybindings.container.ShowLogs": []any{"L"},
"keybindings.container.ToggleListAll": []any{"a"},
"keybindings.container.TogglePause": []any{"t"},
"keybindings.container.ToggleStartStop": []any{"s"},
"keybindings.containerBulk.DeleteForce": []any{"D"},
"keybindings.containerBulk.ExitSelectionMode": []any{"esc"},
"keybindings.containerBulk.Restart": []any{"r"},
"keybindings.containerBulk.ToggleListAll": []any{"a"},
"keybindings.containerBulk.TogglePause": []any{"t"},
"keybindings.containerBulk.ToggleStartStop": []any{"s"},
"keybindings.volume.Delete": []any{"d"},
"keybindings.volume.DeleteForce": []any{"D"},
"keybindings.volume.Prune": []any{"p"},
"keybindings.volume.CopyId": []any{"c"},
"keybindings.volumeBulk.DeleteForce": []any{"D"},
"keybindings.volumeBulk.ExitSelectionMode": []any{"esc"},
},
},
}

Expand Down
50 changes: 50 additions & 0 deletions config/defaultConfig.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,53 @@ config:
Polling-Time: 500
Tab-Order: [images, containers, volumes]
Notification-Timeout: 2000
keybindings:
navigation:
Enter: [enter]
Back: [esc]
Quit: [q, ctrl+c]
Select: [" "]
NextTab: [right, tab, l]
PrevTab: [left, shift+tab, h]
NextItem: [down, j]
PrevItem: [up, k]
PrevPage: ["["]
NextPage: ["]"]
image:
Run: [r]
Rename: [R]
Build: [b]
Scout: [s]
Prune: [p]
Delete: [d]
DeleteForce: [D]
CopyId: [c]
RunAndExec: [x]
DeleteForceBulk: [D]
ExitSelectionMode: [esc]
container:
ToggleListAll: [a]
ToggleStartStop: [s]
TogglePause: [t]
Restart: [r]
Delete: [d]
DeleteForce: [D]
Exec: [x]
Prune: [p]
CopyId: [c]
ShowLogs: [L]
containerBulk:
ToggleListAll: [a]
ToggleStartStop: [s]
TogglePause: [t]
Restart: [r]
DeleteForce: [D]
ExitSelectionMode: [esc]
volume:
Delete: [d]
DeleteForce: [D]
Prune: [p]
CopyId: [c]
volumeBulk:
DeleteForce: [D]
ExitSelectionMode: [esc]
Loading
Loading