Browse Source

Add proper pyenv support to fish

Colin Powell 6 years ago
parent
commit
ce96d464e3

+ 16 - 0
config/fish/completions/pyenv.bash

@@ -0,0 +1,16 @@
+_pyenv() {
+  COMPREPLY=()
+  local word="${COMP_WORDS[COMP_CWORD]}"
+
+  if [ "$COMP_CWORD" -eq 1 ]; then
+    COMPREPLY=( $(compgen -W "$(pyenv commands)" -- "$word") )
+  else
+    local words=("${COMP_WORDS[@]}")
+    unset words[0]
+    unset words[$COMP_CWORD]
+    local completions=$(pyenv completions "${words[@]}")
+    COMPREPLY=( $(compgen -W "$completions" -- "$word") )
+  fi
+}
+
+complete -F _pyenv pyenv

+ 15 - 16
config/fish/completions/pyenv.fish

@@ -1,24 +1,23 @@
 function __fish_pyenv_needs_command
 function __fish_pyenv_needs_command
-    set cmd (commandline -opc)
-    if test (count $cmd) -eq 1 -a "$cmd[1]" = "pyenv"
-        return 0
-    end
-    return 1
+  set cmd (commandline -opc)
+  if [ (count $cmd) -eq 1 -a $cmd[1] = 'pyenv' ]
+    return 0
+  end
+  return 1
 end
 end
 
 
 function __fish_pyenv_using_command
 function __fish_pyenv_using_command
-    set cmd (commandline -opc)
-    if test (count $cmd) -gt 1
-        if test "$argv[1]" = "$cmd[2]"
-            return 0
-        end
+  set cmd (commandline -opc)
+  if [ (count $cmd) -gt 1 ]
+    if [ $argv[1] = $cmd[2] ]
+      return 0
     end
     end
-    return 1
+  end
+  return 1
 end
 end
 
 
-if command -s pyenv > /dev/null
-    complete -f -c pyenv -n '__fish_pyenv_needs_command' -a '(pyenv commands)'
-    for cmd in (pyenv commands)
-        complete -f -c pyenv -n "__fish_pyenv_using_command $cmd" -a "(pyenv completions $cmd)"
-    end
+complete -f -c pyenv -n '__fish_pyenv_needs_command' -a '(pyenv commands)'
+for cmd in (pyenv commands)
+  complete -f -c pyenv -n "__fish_pyenv_using_command $cmd" -a \
+    "(pyenv completions (commandline -opc)[2..-1])"
 end
 end

+ 18 - 0
config/fish/completions/pyenv.zsh

@@ -0,0 +1,18 @@
+if [[ ! -o interactive ]]; then
+    return
+fi
+
+compctl -K _pyenv pyenv
+
+_pyenv() {
+  local words completions
+  read -cA words
+
+  if [ "${#words}" -eq 2 ]; then
+    completions="$(pyenv commands)"
+  else
+    completions="$(pyenv completions ${words[2,-2]})"
+  fi
+
+  reply=(${(ps:\n:)completions})
+}

+ 0 - 19
config/fish/conf.d/pyenv.fish

@@ -1,19 +0,0 @@
-if not command -s pyenv > /dev/null
-    echo "Install <github.com/yyuu/pyenv> to use 'pyenv'."
-    exit 1
-end
-
-set -l pyenv_root ""
-
-if test -z "$PYENV_ROOT"
-    set pyenv_root ~/.pyenv
-    set -x PYENV_ROOT "$pyenv_root"
-else
-    set pyenv_root "$PYENV_ROOT"
-end
-
-if status --is-login
-    set -x PATH "$pyenv_root/shims" $PATH
-    set -x PYENV_SHELL fish
-end
-command mkdir -p "$pyenv_root/"{shims,versions}

+ 1 - 2
config/fish/fishfile

@@ -3,5 +3,4 @@ jethrokuan/fzf
 simnalamburt/shellder
 simnalamburt/shellder
 fishgretel/fasd
 fishgretel/fasd
 oh-my-fish/theme-bobthefish
 oh-my-fish/theme-bobthefish
-pyenv
-daenney/pyenv
+yyuu/pyenv

+ 0 - 12
config/fish/functions/pyenv.fish

@@ -1,12 +0,0 @@
-function pyenv
-    set command $argv[1]
-    set -e argv[1]
-
-    switch "$command"
-        case rehash shell
-            source (pyenv "sh-$command" $argv | psub)
-
-        case \*
-            command pyenv "$command" $argv
-    end
-end