Limit completion size with max

This commit is contained in:
c-bata 2017-07-16 23:11:16 +09:00
parent eef27f5251
commit 580cdb454e
2 changed files with 32 additions and 23 deletions

30
main.go

@ -26,21 +26,21 @@ func completer(b *prompt.Buffer) []string {
} }
} }
return []string{ return []string{
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
"select", "aaaaaaaaaabbbbbbbbbbccccccccccddddddddddeeeeeeeeeeffffffffff",
} }
} }

@ -56,7 +56,7 @@ func (r *Render) renderCompletion(buf *Buffer, words []string, chosen int) {
} }
} }
formatted, width := formatCompletions(words) formatted, width := formatCompletions(words, int(r.col) - len(r.Prefix) - 3)
l := len(formatted) l := len(formatted)
r.prepareArea(l) r.prepareArea(l)
@ -88,8 +88,7 @@ func (r *Render) renderCompletion(buf *Buffer, words []string, chosen int) {
} }
func (r *Render) Erase(buffer *Buffer) { func (r *Render) Erase(buffer *Buffer) {
r.out.CursorBackward(len(r.Prefix)) r.out.CursorBackward(int(r.col))
r.out.CursorBackward(buffer.CursorPosition + 100)
r.out.EraseDown() r.out.EraseDown()
r.renderPrefix() r.renderPrefix()
r.out.Flush() r.out.Flush()
@ -117,7 +116,7 @@ func (r *Render) BreakLine(buffer *Buffer, result string) {
r.renderPrefix() r.renderPrefix()
} }
func formatCompletions(words []string) (new []string, width int) { func formatCompletions(words []string, max int) (new []string, width int) {
num := len(words) num := len(words)
new = make([]string, num) new = make([]string, num)
width = 0 width = 0
@ -128,11 +127,21 @@ func formatCompletions(words []string) (new []string, width int) {
} }
} }
if width > max {
width = max
}
for i := 0; i < num; i++ { for i := 0; i < num; i++ {
spaces := width - len([]rune(words[i])) if l := len(words[i]); l > width {
new[i] = words[i] new[i] = words[i][:width - 3] + "..."
for j := 0; j < spaces; j++ { } else if l < width {
new[i] += " " spaces := width - len([]rune(words[i]))
new[i] = words[i]
for j := 0; j < spaces; j++ {
new[i] += " "
}
} else {
new[i] = words[i]
} }
} }
return return