More keyboard refactor.

This commit is contained in:
Storm Dragon
2026-09-05 12:43:31 -04:00
parent 97fcde7e96
commit 202530743a
7 changed files with 229 additions and 48 deletions
+1
View File
@@ -20,6 +20,7 @@ type Hotkeys struct {
ScrollToTop *uiterm.Key
ScrollToBottom *uiterm.Key
AdminMenu *uiterm.Key
HelpMenu *uiterm.Key
NoiseSuppressionToggle *uiterm.Key
AGCToggle *uiterm.Key
SelfMuteToggle *uiterm.Key
+23 -20
View File
@@ -93,26 +93,7 @@ func key(k uiterm.Key) *uiterm.Key {
func (c *Config) LoadConfig() {
var jc exportableConfig
jc = exportableConfig{}
jc.Hotkeys = &Hotkeys{
Talk: key(uiterm.KeyCtrlT),
VolumeDown: key(uiterm.KeyArrowLeft),
VolumeUp: key(uiterm.KeyArrowRight),
VolumeReset: key(uiterm.KeyBackspace),
MuteToggle: key(uiterm.KeyM),
RecordToggle: key(uiterm.KeyCtrlR),
Exit: key(uiterm.KeyCtrlQ),
ToggleTimestamps: key(uiterm.KeyF3),
SwitchViews: key(uiterm.KeyTab),
ClearOutput: key(uiterm.KeyCtrlL),
ScrollUp: key(uiterm.KeyPgup),
ScrollDown: key(uiterm.KeyPgdn),
ScrollToTop: key(uiterm.KeyHome),
ScrollToBottom: key(uiterm.KeyEnd),
AdminMenu: key(uiterm.KeyF10),
NoiseSuppressionToggle: key(uiterm.KeyF9),
AGCToggle: key(uiterm.KeyF12),
SelfMuteToggle: key(uiterm.KeyAltM),
}
jc.Hotkeys = &Hotkeys{}
if fileExists(c.fn) {
var data []byte
data = readFile(c.fn)
@@ -197,6 +178,7 @@ func (c *Config) ensureHotkeys() {
ScrollToTop: key(uiterm.KeyHome),
ScrollToBottom: key(uiterm.KeyEnd),
AdminMenu: key(uiterm.KeyF10),
HelpMenu: key(uiterm.KeyF1),
NoiseSuppressionToggle: key(uiterm.KeyF9),
AGCToggle: key(uiterm.KeyF12),
SelfMuteToggle: key(uiterm.KeyAltM),
@@ -247,6 +229,11 @@ func (c *Config) ensureHotkeys() {
if hotkeys.AdminMenu == nil {
hotkeys.AdminMenu = defaults.AdminMenu
}
if hotkeys.HelpMenu == nil {
if !hotkeyAlreadyUsed(hotkeys, *defaults.HelpMenu) {
hotkeys.HelpMenu = defaults.HelpMenu
}
}
if hotkeys.NoiseSuppressionToggle == nil {
hotkeys.NoiseSuppressionToggle = defaults.NoiseSuppressionToggle
}
@@ -258,6 +245,22 @@ func (c *Config) ensureHotkeys() {
}
}
func hotkeyAlreadyUsed(hotkeys *Hotkeys, wanted uiterm.Key) bool {
bindings := []*uiterm.Key{
hotkeys.Talk, hotkeys.VolumeDown, hotkeys.VolumeUp, hotkeys.VolumeReset,
hotkeys.MuteToggle, hotkeys.RecordToggle, hotkeys.Exit, hotkeys.ToggleTimestamps,
hotkeys.SwitchViews, hotkeys.ClearOutput, hotkeys.ScrollUp, hotkeys.ScrollDown,
hotkeys.ScrollToTop, hotkeys.ScrollToBottom, hotkeys.AdminMenu,
hotkeys.NoiseSuppressionToggle, hotkeys.AGCToggle, hotkeys.SelfMuteToggle,
}
for _, binding := range bindings {
if binding != nil && *binding == wanted {
return true
}
}
return false
}
func (c *Config) findServer(address string) *server {
if c.config.Servers == nil {
c.config.Servers = make([]*server, 0)
+7
View File
@@ -55,6 +55,9 @@ func TestConfigBackfillsRecordingDefaults(t *testing.T) {
if got := *cfg.GetHotkeys().AdminMenu; got != uiterm.KeyF10 {
t.Fatalf("expected admin menu f10, got %s", got)
}
if cfg.GetHotkeys().HelpMenu != nil {
t.Fatalf("help binding collided with the configured F1 talk key: %v", *cfg.GetHotkeys().HelpMenu)
}
for name, got := range map[string]*uiterm.Key{
"clear output": cfg.GetHotkeys().ClearOutput,
"scroll to top": cfg.GetHotkeys().ScrollToTop,
@@ -94,6 +97,7 @@ func TestNewHotkeyDefaults(t *testing.T) {
{name: "tree mute", got: hotkeys.MuteToggle, want: uiterm.KeyM},
{name: "self mute", got: hotkeys.SelfMuteToggle, want: uiterm.KeyAltM},
{name: "actions menu", got: hotkeys.AdminMenu, want: uiterm.KeyF10},
{name: "keyboard help", got: hotkeys.HelpMenu, want: uiterm.KeyF1},
{name: "exit", got: hotkeys.Exit, want: uiterm.KeyCtrlQ},
}
for _, tt := range tests {
@@ -117,6 +121,9 @@ func TestExplicitLegacyHotkeysRemainConfigured(t *testing.T) {
*hotkeys.Exit != uiterm.KeyF10 {
t.Fatalf("explicit legacy hotkeys were replaced: %+v", hotkeys)
}
if hotkeys.HelpMenu != nil {
t.Fatalf("F1 help collided with explicit legacy F1 transmit binding: %v", *hotkeys.HelpMenu)
}
}
func TestResetUserAudioRestoresAndPersistsDefaults(t *testing.T) {