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