github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/readline/suggestions.go (about) 1 package readline 2 3 import "github.com/mattn/go-runewidth" 4 5 type suggestionsT struct { 6 rl *Instance 7 suggestions []string 8 prefixWidth int 9 } 10 11 func newSuggestionsT(rl *Instance, suggestions []string) *suggestionsT { 12 return &suggestionsT{ 13 rl: rl, 14 suggestions: suggestions, 15 prefixWidth: runewidth.StringWidth(rl.tcPrefix), 16 } 17 } 18 19 func (s *suggestionsT) Len() int { 20 return len(s.suggestions) 21 } 22 23 func (s *suggestionsT) ItemLen(index int) int { 24 // fast 25 switch { 26 case len(s.suggestions[index]) == 0: 27 return s.prefixWidth 28 29 case s.suggestions[index][0] == 2: 30 if len(s.suggestions[index]) == 1 { 31 return 0 32 } 33 return len(s.suggestions[index][1:]) 34 default: 35 return len(s.suggestions[index]) + s.prefixWidth 36 } 37 38 // accurate 39 /*switch { 40 case len(s.suggestions[index]) == 0: 41 return runewidth.StringWidth(s.rl.tcPrefix) 42 43 case s.suggestions[index][0] == 2: 44 if len(s.suggestions[index]) == 1 { 45 return 0 46 } 47 return runewidth.StringWidth(s.suggestions[index][1:]) 48 default: 49 return runewidth.StringWidth(s.suggestions[index]) + s.prefixWidth 50 }*/ 51 } 52 53 func (s *suggestionsT) ItemValue(index int) string { 54 switch { 55 case len(s.suggestions[index]) == 0: 56 return s.rl.tcPrefix 57 58 case s.suggestions[index][0] == 2: 59 if len(s.suggestions[index]) == 1 { 60 return "" 61 } 62 return s.suggestions[index][1:] 63 default: 64 return s.rl.tcPrefix + s.suggestions[index] 65 } 66 } 67 68 func (s *suggestionsT) ItemLookupValue(index int) string { 69 return s.suggestions[index] 70 /*switch { 71 case len(s.suggestions[index]) == 0: 72 return "" 73 74 case s.suggestions[index][0] == 2: 75 if len(s.suggestions[index]) == 1 { 76 return "" 77 } 78 return s.suggestions[index][1:] 79 default: 80 return s.suggestions[index] 81 }*/ 82 } 83 84 func (s *suggestionsT) ItemCompletionReturn(index int) (string, string) { 85 switch { 86 case len(s.suggestions[index]) == 0: 87 return s.rl.tcPrefix, "" 88 89 case s.suggestions[index][0] == 2: 90 if len(s.suggestions[index]) == 1 { 91 return s.rl.tcPrefix, "" 92 } 93 return "", s.suggestions[index][1:] 94 default: 95 return s.rl.tcPrefix, s.suggestions[index] 96 } 97 }