@@ -98,22 +98,7 @@ var autocompleteScripts = map[string]autocompleteScript{
9898 CompleteFunc : `
9999 autoload -U compinit && compinit
100100 _scw () {
101- # splits $BUFFER, i.e. the complete command line,
102- # into shell words using shell parsing rules by Expansion Flag (z) and puts it into an array
103- words=("${(z)BUFFER}")
104-
105- # If the last char of the line is a space, a last empty word is not added to words.
106- # We need to add it manually.
107- lastChar="${BUFFER: -1}"
108- if [[ $lastChar = *[!\ ]* ]]; then # if $lastChar contains something else than spaces
109- : # do nothing
110- else
111- # words+=('') does not work
112- # couldn't find a way to add an empty string to an array
113- # we replace 'EMPTY_WORD' by '' later in go code
114- words+=('EMPTY_WORD')
115- fi
116- output=($(scw autocomplete complete zsh -- $CURSOR $words))
101+ output=($(scw autocomplete complete zsh -- ${CURRENT} ${words}))
117102 opts=('-S' ' ')
118103 if [[ $output == *= ]]; then
119104 opts=('-S' '')
@@ -316,26 +301,22 @@ func autocompleteCompleteZshCommand() *core.Command {
316301 Run : func (ctx context.Context , argsI interface {}) (i interface {}, e error ) {
317302 rawArgs := * argsI .(* args.RawArgs )
318303
319- words := rawArgs [ 1 :]
320- charIndex , err := strconv .Atoi (rawArgs [0 ])
304+ // First arg is the word index.
305+ wordIndex , err := strconv .Atoi (rawArgs [0 ])
321306 if err != nil {
322307 return nil , err
323308 }
324- wordIndex := core .WordIndex (charIndex , words )
325- leftWords := words [:wordIndex ]
326- wordToComplete := words [wordIndex ]
309+ wordIndex -- // In zsh word index starts at 1.
327310
328- // In zsh, couldn't find a way to add an empty string to an array.
329- // We added "EMPTY_WORD" instead.
330- // "EMPTY_WORD" is replaced by "".
331- // see the zsh script, line 106:
332- // words+=('EMPTY_WORD')
333- if wordToComplete == "EMPTY_WORD" {
334- wordToComplete = ""
311+ // Other args are all the words.
312+ words := rawArgs [1 :]
313+ if len (words ) <= wordIndex {
314+ words = append (words , "" ) // Handle case when last word is empty.
335315 }
336316
337- // TODO: compute rightWords once used by core.AutoComplete()
338- rightWords := []string (nil )
317+ leftWords := words [:wordIndex ]
318+ wordToComplete := words [wordIndex ]
319+ rightWords := words [wordIndex + 1 :]
339320
340321 res := core .AutoComplete (ctx , leftWords , wordToComplete , rightWords )
341322 return strings .Join (res .Suggestions , " " ), nil
0 commit comments