diff options
| author | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-09 23:44:54 +0900 |
|---|---|---|
| committer | Junegunn Choi <junegunn.c@gmail.com> | 2015-06-09 23:44:54 +0900 |
| commit | eaa3c67a5e2b1e5f23d8fd3effc38d9cee9af521 (patch) | |
| tree | 07f096640cb19962ece2237b4513151403898860 /src | |
| parent | 1b9b1d15bc52508a5d8421823f31150a8f77d248 (diff) | |
| download | fzf-eaa3c67a5e2b1e5f23d8fd3effc38d9cee9af521.tar.gz | |
Add actions for --bind: select-all / deselect-all / toggle-all
Close #257
Diffstat (limited to 'src')
| -rw-r--r-- | src/options.go | 6 | ||||
| -rw-r--r-- | src/terminal.go | 58 |
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() |
