More keyboard refactor.
This commit is contained in:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user