From 253790de9961ae6dc8d329b8d891cd80d24beeaa Mon Sep 17 00:00:00 2001 From: Zachary Yedidia Date: Thu, 24 Jan 2019 22:10:57 -0500 Subject: [PATCH] Sort suggestions and cycle back --- cmd/micro/action/infocomplete.go | 5 +++++ cmd/micro/action/infopane.go | 8 +++++++- cmd/micro/buffer/autocomplete.go | 16 ++++++++++++---- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/cmd/micro/action/infocomplete.go b/cmd/micro/action/infocomplete.go index 99a3844a..28d701e6 100644 --- a/cmd/micro/action/infocomplete.go +++ b/cmd/micro/action/infocomplete.go @@ -2,6 +2,7 @@ package action import ( "bytes" + "sort" "strings" "github.com/zyedidia/micro/cmd/micro/buffer" @@ -25,6 +26,7 @@ func CommandComplete(b *buffer.Buffer) ([]string, []string) { } } + sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) @@ -47,6 +49,7 @@ func HelpComplete(b *buffer.Buffer) ([]string, []string) { } } + sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) @@ -101,6 +104,7 @@ func OptionComplete(b *buffer.Buffer) ([]string, []string) { } } + sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { completions[i] = util.SliceEndStr(suggestions[i], c.X-argstart) @@ -185,6 +189,7 @@ func OptionValueComplete(b *buffer.Buffer) ([]string, []string) { } } } + sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { diff --git a/cmd/micro/action/infopane.go b/cmd/micro/action/infopane.go index 406476bc..975d9f6e 100644 --- a/cmd/micro/action/infopane.go +++ b/cmd/micro/action/infopane.go @@ -151,6 +151,7 @@ var InfoOverrides = map[string]InfoKeyAction{ "CursorDown": (*InfoPane).CursorDown, "InsertNewline": (*InfoPane).InsertNewline, "InsertTab": (*InfoPane).InsertTab, + "OutdentLine": (*InfoPane).CycleBack, "Escape": (*InfoPane).Escape, "Quit": (*InfoPane).Quit, "QuitAll": (*InfoPane).QuitAll, @@ -165,7 +166,7 @@ func (h *InfoPane) CursorDown() { func (h *InfoPane) InsertTab() { b := h.Buf if b.HasSuggestions { - b.CycleAutocomplete() + b.CycleAutocomplete(true) return } @@ -186,6 +187,11 @@ func (h *InfoPane) InsertTab() { } } } +func (h *InfoPane) CycleBack() { + if h.Buf.HasSuggestions { + h.Buf.CycleAutocomplete(false) + } +} func (h *InfoPane) InsertNewline() { if !h.HasYN { h.DonePrompt(false) diff --git a/cmd/micro/buffer/autocomplete.go b/cmd/micro/buffer/autocomplete.go index 12dbc0b5..7ac0d983 100644 --- a/cmd/micro/buffer/autocomplete.go +++ b/cmd/micro/buffer/autocomplete.go @@ -4,6 +4,7 @@ import ( "bytes" "io/ioutil" "os" + "sort" "strings" "unicode/utf8" @@ -29,15 +30,21 @@ func (b *Buffer) Autocomplete(c Completer) { return } b.CurSuggestion = -1 - b.CycleAutocomplete() + b.CycleAutocomplete(true) } -func (b *Buffer) CycleAutocomplete() { +func (b *Buffer) CycleAutocomplete(forward bool) { prevSuggestion := b.CurSuggestion - b.CurSuggestion++ - if b.CurSuggestion >= len(b.Suggestions) || b.CurSuggestion < 0 { + if forward { + b.CurSuggestion++ + } else { + b.CurSuggestion-- + } + if b.CurSuggestion >= len(b.Suggestions) { b.CurSuggestion = 0 + } else if b.CurSuggestion < 0 { + b.CurSuggestion = len(b.Suggestions) - 1 } c := b.GetActiveCursor() @@ -105,6 +112,7 @@ func FileComplete(b *Buffer) ([]string, []string) { } } + sort.Strings(suggestions) completions := make([]string, len(suggestions)) for i := range suggestions { var complete string