• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# npm completions for Fish shell
2# This script is a work in progress and does not fall under the normal semver contract as the rest of npm.
3
4# __fish_npm_needs_command taken from:
5# https://stackoverflow.com/questions/16657803/creating-autocomplete-script-with-sub-commands
6function __fish_npm_needs_command
7    set -l cmd (commandline -opc)
8
9    if test (count $cmd) -eq 1
10        return 0
11    end
12
13    return 1
14end
15
16# Taken from https://github.com/fish-shell/fish-shell/blob/HEAD/share/completions/npm.fish
17function __fish_complete_npm -d "Complete the commandline using npm's 'completion' tool"
18    # tell npm we are fish shell
19    set -lx COMP_FISH true
20    if command -sq npm
21        # npm completion is bash-centric, so we need to translate fish's "commandline" stuff to bash's $COMP_* stuff
22        # COMP_LINE is an array with the words in the commandline
23        set -lx COMP_LINE (commandline -opc)
24        # COMP_CWORD is the index of the current word in COMP_LINE
25        # bash starts arrays with 0, so subtract 1
26        set -lx COMP_CWORD (math (count $COMP_LINE) - 1)
27        # COMP_POINT is the index of point/cursor when the commandline is viewed as a string
28        set -lx COMP_POINT (commandline -C)
29        # If the cursor is after the last word, the empty token will disappear in the expansion
30        # Readd it
31        if test (commandline -ct) = ""
32            set COMP_CWORD (math $COMP_CWORD + 1)
33            set COMP_LINE $COMP_LINE ""
34        end
35        command npm completion -- $COMP_LINE 2>/dev/null
36    end
37end
38
39# flush out what ships with fish
40complete -e npm
41