forked from ipython/ipython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ipython-completion.bash
131 lines (124 loc) · 4.07 KB
/
ipython-completion.bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# load with: . ipython-completion.bash
if [[ -n ${ZSH_VERSION-} ]]; then
autoload -Uz bashcompinit && bashcompinit
fi
_ipython_get_flags()
{
local url=$1
local var=$2
local dash=$3
if [[ "$url $var" == $__ipython_complete_last ]]; then
opts=$__ipython_complete_last_res
return
fi
# matplotlib and profile don't need the = and the
# version without simplifies the special cased completion
opts=$(ipython ${url} --help-all | grep -E "^-{1,2}[^-]" | sed -e "s/<.*//" -e "s/[^=]$/& /" -e "s/^--matplotlib=$//" -e "s/^--profile=$/--profile /")
__ipython_complete_last="$url $var"
__ipython_complete_last_res="$opts"
}
_ipython()
{
local cur=${COMP_WORDS[COMP_CWORD]}
local prev=${COMP_WORDS[COMP_CWORD - 1]}
local subcommands="notebook qtconsole console kernel profile locate history nbconvert "
local opts=""
if [ -z "$__ipython_complete_baseopts" ]; then
_ipython_get_flags baseopts
__ipython_complete_baseopts="${opts}"
fi
local baseopts="$__ipython_complete_baseopts"
local mode=""
for i in "${COMP_WORDS[@]}"; do
[ "$cur" = "$i" ] && break
if [[ ${subcommands} == *${i}* ]]; then
mode="$i"
break
elif [[ ${i} == "--"* ]]; then
mode="nosubcommand"
break
fi
done
if [[ ${cur} == -* ]]; then
case $mode in
"notebook" | "qtconsole" | "console" | "kernel" | "nbconvert")
_ipython_get_flags $mode
opts=$"${opts} ${baseopts}"
;;
"locate" | "profile")
_ipython_get_flags $mode
;;
"history")
if [[ $COMP_CWORD -ge 3 ]]; then
# 'history trim' and 'history clear' covered by next line
_ipython_get_flags history\ "${COMP_WORDS[2]}"
else
_ipython_get_flags $mode
fi
opts=$"${opts}"
;;
*)
opts=$baseopts
esac
# don't drop the trailing space
local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
elif [[ $mode == "profile" ]]; then
opts="list create locate "
local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
elif [[ $mode == "history" ]]; then
if [[ $COMP_CWORD -ge 3 ]]; then
# drop into flags
opts="--"
else
opts="trim clear "
fi
local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
elif [[ $mode == "locate" ]]; then
opts="profile"
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
elif [[ ${prev} == "--matplotlib"* ]] || [[ ${prev} == "--gui"* ]]; then
if [ -z "$__ipython_complete_matplotlib" ]; then
__ipython_complete_matplotlib=`cat <<EOF | python -
try:
import IPython.core.shellapp as mod;
for k in mod.InteractiveShellApp.matplotlib.values:
print "%s " % k
except:
pass
EOF
`
fi
local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "${__ipython_complete_matplotlib}" -- ${cur}) )
elif [[ ${prev} == "--profile"* ]]; then
if [ -z "$__ipython_complete_profiles" ]; then
__ipython_complete_profiles=`cat <<EOF | python -
try:
import IPython.core.profileapp
for k in IPython.core.profileapp.list_bundled_profiles():
print "%s " % k
p = IPython.core.profileapp.ProfileList()
for k in IPython.core.profileapp.list_profiles_in(p.ipython_dir):
print "%s " % k
except:
pass
EOF
`
fi
local IFS=$'\t\n'
COMPREPLY=( $(compgen -W "${__ipython_complete_profiles}" -- ${cur}) )
else
if [ "$COMP_CWORD" == 1 ]; then
local IFS=$'\t\n'
local sub=$(echo $subcommands | sed -e "s/ / \t/g")
COMPREPLY=( $(compgen -W "${sub}" -- ${cur}) )
else
COMPREPLY=( $(compgen -f -- ${cur}) )
fi
fi
}
complete -o default -o nospace -F _ipython ipython