summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/options.go6
-rw-r--r--src/terminal.go58
2 files changed, 52 insertions, 12 deletions
diff --git a/src/options.go b/src/options.go
index edd6f9a3..b4afad76 100644
--- a/src/options.go
+++ b/src/options.go
@@ -408,6 +408,12 @@ func parseKeymap(keymap map[int]actionType, toggleSort bool, str string) (map[in
keymap[key] = actToggleDown
case "toggle-up":
keymap[key] = actToggleUp
+ case "toggle-all":
+ keymap[key] = actToggleAll
+ case "select-all":
+ keymap[key] = actSelectAll
+ case "deselect-all":
+ keymap[key] = actDeselectAll
case "toggle":
keymap[key] = actToggle
case "down":
diff --git a/src/terminal.go b/src/terminal.go
index 3dc0a751..d27c0d60 100644
--- a/src/terminal.go
+++ b/src/terminal.go
@@ -105,7 +105,10 @@ const (
actUnixWordRubout
actYank
actBackwardKillWord
+ actSelectAll
+ actDeselectAll
actToggle
+ actToggleAll
actToggleDown
actToggleUp
actDown
@@ -661,20 +664,28 @@ func (t *Terminal) Loop() {
}
}
}
- toggle := func() {
- if t.cy < t.merger.Length() {
- item := t.merger.Get(t.cy)
- if _, found := t.selected[item.index]; !found {
- var strptr *string
- if item.origText != nil {
- strptr = item.origText
- } else {
- strptr = item.text
- }
- t.selected[item.index] = selectedItem{time.Now(), strptr}
+ selectItem := func(item *Item) bool {
+ if _, found := t.selected[item.index]; !found {
+ var strptr *string
+ if item.origText != nil {
+ strptr = item.origText
} else {
- delete(t.selected, item.index)
+ strptr = item.text
}
+ t.selected[item.index] = selectedItem{time.Now(), strptr}
+ return true
+ }
+ return false
+ }
+ toggleY := func(y int) {
+ item := t.merger.Get(y)
+ if !selectItem(item) {
+ delete(t.selected, item.index)
+ }
+ }
+ toggle := func() {
+ if t.cy < t.merger.Length() {
+ toggleY(t.cy)
req(reqInfo)
}
}
@@ -725,11 +736,34 @@ func (t *Terminal) Loop() {
t.input = append(t.input[:t.cx-1], t.input[t.cx:]...)
t.cx--
}
+ case actSelectAll:
+ if t.multi {
+ for i := 0; i < t.merger.Length(); i++ {
+ item := t.merger.Get(i)
+ selectItem(item)
+ }
+ req(reqList, reqInfo)
+ }
+ case actDeselectAll:
+ if t.multi {
+ for i := 0; i < t.merger.Length(); i++ {
+ item := t.merger.Get(i)
+ delete(t.selected, item.index)
+ }
+ req(reqList, reqInfo)
+ }
case actToggle:
if t.multi && t.merger.Length() > 0 {
toggle()
req(reqList)
}
+ case actToggleAll:
+ if t.multi {
+ for i := 0; i < t.merger.Length(); i++ {
+ toggleY(i)
+ }
+ req(reqList, reqInfo)
+ }
case actToggleDown:
if t.multi && t.merger.Length() > 0 {
toggle()