completion.fish 1.6 KB

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