@@ -3,7 +3,7 @@ package ishell
3
3
import (
4
4
"strings"
5
5
6
- "github.com/flynn-archive/go-shlex"
6
+ shlex "github.com/flynn-archive/go-shlex"
7
7
)
8
8
9
9
type iCompleter struct {
@@ -23,14 +23,12 @@ func (ic iCompleter) Do(line []rune, pos int) (newLine [][]rune, length int) {
23
23
words = strings .Fields (string (line ))
24
24
}
25
25
26
- var cWords []string
27
26
prefix := ""
28
27
if len (words ) > 0 && pos > 0 && line [pos - 1 ] != ' ' {
29
28
prefix = words [len (words )- 1 ]
30
- cWords = ic .getWords (words [:len (words )- 1 ])
31
- } else {
32
- cWords = ic .getWords (words )
29
+ words = words [:len (words )- 1 ]
33
30
}
31
+ cWords := ic .getWords (words , prefix )
34
32
35
33
var suggestions [][]rune
36
34
for _ , w := range cWords {
@@ -44,16 +42,23 @@ func (ic iCompleter) Do(line []rune, pos int) (newLine [][]rune, length int) {
44
42
return suggestions , len (prefix )
45
43
}
46
44
47
- func (ic iCompleter ) getWords (w []string ) (s []string ) {
45
+ func (ic iCompleter ) getWords (w []string , prefix string ) (s []string ) {
48
46
cmd , args := ic .cmd .FindCmd (w )
49
47
if cmd == nil {
50
48
cmd , args = ic .cmd , w
51
49
}
52
50
if cmd .Completer != nil {
53
- return cmd .Completer (args )
51
+ return cmd .Completer (cmd , args , prefix )
54
52
}
55
- for k := range cmd .children {
53
+ for k , child := range cmd .children {
56
54
s = append (s , k )
55
+
56
+ // add aliases when command name won't match
57
+ if ! strings .HasPrefix (k , prefix ) {
58
+ for _ , a := range child .Aliases {
59
+ s = append (s , a )
60
+ }
61
+ }
57
62
}
58
63
return
59
64
}
0 commit comments