aboutsummaryrefslogtreecommitdiffstats
path: root/config/binds.go
diff options
context:
space:
mode:
Diffstat (limited to 'config/binds.go')
-rw-r--r--config/binds.go32
1 files changed, 22 insertions, 10 deletions
diff --git a/config/binds.go b/config/binds.go
index 4552030d..1ea36a2d 100644
--- a/config/binds.go
+++ b/config/binds.go
@@ -57,6 +57,8 @@ type KeyBindings struct {
Globals bool
// Which key opens the ex line (default is :)
ExKey KeyStroke
+ // Which key triggers completion (default is <tab>)
+ CompleteKey KeyStroke
// private
contextualBinds []*BindingConfigContext
@@ -154,7 +156,8 @@ func parseBinds(root string) error {
func LoadBindingSection(sec *ini.Section) (*KeyBindings, error) {
bindings := NewKeyBindings()
for key, value := range sec.KeysHash() {
- if key == "$ex" {
+ switch key {
+ case "$ex":
strokes, err := ParseKeyStrokes(value)
if err != nil {
return nil, err
@@ -163,9 +166,7 @@ func LoadBindingSection(sec *ini.Section) (*KeyBindings, error) {
return nil, errors.New("Invalid binding")
}
bindings.ExKey = strokes[0]
- continue
- }
- if key == "$noinherit" {
+ case "$noinherit":
if value == "false" {
continue
}
@@ -173,13 +174,22 @@ func LoadBindingSection(sec *ini.Section) (*KeyBindings, error) {
return nil, errors.New("Invalid binding")
}
bindings.Globals = false
- continue
- }
- binding, err := ParseBinding(key, value)
- if err != nil {
- return nil, err
+ case "$complete":
+ strokes, err := ParseKeyStrokes(value)
+ if err != nil {
+ return nil, err
+ }
+ if len(strokes) != 1 {
+ return nil, errors.New("Invalid binding")
+ }
+ bindings.CompleteKey = strokes[0]
+ default:
+ binding, err := ParseBinding(key, value)
+ if err != nil {
+ return nil, err
+ }
+ bindings.Add(binding)
}
- bindings.Add(binding)
}
return bindings, nil
}
@@ -266,6 +276,7 @@ func LoadBinds(binds *ini.File, baseName string, baseGroup **KeyBindings) error
func NewKeyBindings() *KeyBindings {
return &KeyBindings{
ExKey: KeyStroke{tcell.ModNone, tcell.KeyRune, ':'},
+ CompleteKey: KeyStroke{tcell.ModNone, tcell.KeyTab, 0},
Globals: true,
contextualCache: make(map[bindsContextKey]*KeyBindings),
contextualCounts: make(map[bindsContextType]int),
@@ -329,6 +340,7 @@ func MergeBindings(bindings ...*KeyBindings) *KeyBindings {
}
merged.Bindings = filterAndCleanBindings(merged.Bindings)
merged.ExKey = bindings[0].ExKey
+ merged.CompleteKey = bindings[0].CompleteKey
merged.Globals = bindings[0].Globals
return merged
}