diff options
author | Junegunn Choi <junegunn.c@gmail.com> | 2021-02-25 21:14:15 +0900 |
---|---|---|
committer | Junegunn Choi <junegunn.c@gmail.com> | 2021-02-25 21:23:05 +0900 |
commit | 76bbf57b3dad4bd29e2f51337de11732a2146e5f (patch) | |
tree | 5bea0fcab0d2c761f69e516f260dc5d771e9ccd5 /src | |
parent | 806a47a7ccf58e7e325c779e4f08a2ddd56aa100 (diff) |
Add select and deselect actions
Close #2358
Diffstat (limited to 'src')
-rw-r--r-- | src/options.go | 4 | ||||
-rw-r--r-- | src/terminal.go | 27 |
2 files changed, 31 insertions, 0 deletions
diff --git a/src/options.go b/src/options.go index a55dc340..0e612559 100644 --- a/src/options.go +++ b/src/options.go @@ -839,6 +839,8 @@ func parseKeymap(keymap map[tui.Event][]action, str string) { appendAction(actDeleteChar) case "delete-char/eof": appendAction(actDeleteCharEOF) + case "deselect": + appendAction(actDeselect) case "end-of-line": appendAction(actEndOfLine) case "cancel": @@ -879,6 +881,8 @@ func parseKeymap(keymap map[tui.Event][]action, str string) { appendAction(actToggleAll) case "toggle-search": appendAction(actToggleSearch) + case "select": + appendAction(actSelect) case "select-all": appendAction(actSelectAll) case "deselect-all": diff --git a/src/terminal.go b/src/terminal.go index fa9adb88..2fcaa697 100644 --- a/src/terminal.go +++ b/src/terminal.go @@ -276,6 +276,8 @@ const ( actReload actDisableSearch actEnableSearch + actSelect + actDeselect ) type placeholderFlags struct { @@ -1785,11 +1787,26 @@ func (t *Terminal) selectItem(item *Item) bool { return true } +func (t *Terminal) selectItemChanged(item *Item) bool { + if _, found := t.selected[item.Index()]; found { + return false + } + return t.selectItem(item) +} + func (t *Terminal) deselectItem(item *Item) { delete(t.selected, item.Index()) t.version++ } +func (t *Terminal) deselectItemChanged(item *Item) bool { + if _, found := t.selected[item.Index()]; found { + t.deselectItem(item) + return true + } + return false +} + func (t *Terminal) toggleItem(item *Item) bool { if _, found := t.selected[item.Index()]; !found { return t.selectItem(item) @@ -2341,6 +2358,16 @@ func (t *Terminal) Loop() { } else { req(reqQuit) } + case actSelect: + current := t.currentItem() + if t.multi > 0 && current != nil && t.selectItemChanged(current) { + req(reqList, reqInfo) + } + case actDeselect: + current := t.currentItem() + if t.multi > 0 && current != nil && t.deselectItemChanged(current) { + req(reqList, reqInfo) + } case actToggle: if t.multi > 0 && t.merger.Length() > 0 && toggle() { req(reqList) |