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