Show More
@@ -1,4 +1,4 b'' | |||
|
1 |
""" Tab completion support for a couple of linux package managers |
|
|
1 | """ Tab completion support for a couple of linux package managers | |
|
2 | 2 | |
|
3 | 3 | This is also an example of how to write custom completer plugins |
|
4 | 4 | or hooks. |
@@ -17,51 +17,51 b' import glob,os,shlex,sys' | |||
|
17 | 17 | ip = IPython.ipapi.get() |
|
18 | 18 | |
|
19 | 19 | def vcs_completer(commands, event): |
|
20 |
""" utility to make writing typical version control app completers easier |
|
|
21 | ||
|
20 | """ utility to make writing typical version control app completers easier | |
|
21 | ||
|
22 | 22 | VCS command line apps typically have the format: |
|
23 | ||
|
23 | ||
|
24 | 24 | [sudo ]PROGNAME [help] [command] file file... |
|
25 | ||
|
25 | ||
|
26 | 26 | """ |
|
27 | ||
|
28 | ||
|
27 | ||
|
28 | ||
|
29 | 29 | cmd_param = event.line.split() |
|
30 | 30 | if event.line.endswith(' '): |
|
31 | 31 | cmd_param.append('') |
|
32 | 32 | |
|
33 | 33 | if cmd_param[0] == 'sudo': |
|
34 | 34 | cmd_param = cmd_param[1:] |
|
35 | ||
|
35 | ||
|
36 | 36 | if len(cmd_param) == 2 or 'help' in cmd_param: |
|
37 | 37 | return commands.split() |
|
38 | ||
|
38 | ||
|
39 | 39 | return ip.IP.Completer.file_matches(event.symbol) |
|
40 | ||
|
41 | ||
|
40 | ||
|
41 | ||
|
42 | 42 | |
|
43 | 43 | def apt_completers(self, event): |
|
44 | 44 | """ This should return a list of strings with possible completions. |
|
45 | ||
|
45 | ||
|
46 | 46 | Note that all the included strings that don't start with event.symbol |
|
47 | 47 | are removed, in order to not confuse readline. |
|
48 | ||
|
48 | ||
|
49 | 49 | """ |
|
50 | 50 | # print event # dbg |
|
51 | ||
|
51 | ||
|
52 | 52 | # commands are only suggested for the 'command' part of package manager |
|
53 | 53 | # invocation |
|
54 | ||
|
54 | ||
|
55 | 55 | cmd = (event.line + "<placeholder>").rsplit(None,1)[0] |
|
56 | 56 | # print cmd |
|
57 | 57 | if cmd.endswith('apt-get') or cmd.endswith('yum'): |
|
58 | 58 | return ['update', 'upgrade', 'install', 'remove'] |
|
59 | ||
|
60 |
# later on, add dpkg -l / whatever to get list of possible |
|
|
59 | ||
|
60 | # later on, add dpkg -l / whatever to get list of possible | |
|
61 | 61 | # packages, add switches etc. for the rest of command line |
|
62 | 62 | # filling |
|
63 | ||
|
64 |
raise IPython.ipapi.TryNext |
|
|
63 | ||
|
64 | raise IPython.ipapi.TryNext | |
|
65 | 65 | |
|
66 | 66 | |
|
67 | 67 | # re_key specifies the regexp that triggers the specified completer |
@@ -71,9 +71,9 b" ip.set_hook('complete_command', apt_completers, re_key = '.*yum')" | |||
|
71 | 71 | |
|
72 | 72 | pkg_cache = None |
|
73 | 73 | |
|
74 |
def module_completer(self,event): |
|
|
74 | def module_completer(self,event): | |
|
75 | 75 | """ Give completions after user has typed 'import' """ |
|
76 | ||
|
76 | ||
|
77 | 77 | # only a local version for py 2.4, pkgutil has no walk_packages() there |
|
78 | 78 | if sys.version_info < (2,5): |
|
79 | 79 | for el in [f[:-3] for f in glob.glob("*.py")]: |
@@ -82,11 +82,11 b' def module_completer(self,event):' | |||
|
82 | 82 | |
|
83 | 83 | global pkg_cache |
|
84 | 84 | import pkgutil,imp,time |
|
85 |
#current = |
|
|
85 | #current = | |
|
86 | 86 | if pkg_cache is None: |
|
87 | 87 | print "\n\n[Standby while scanning modules, this can take a while]\n\n" |
|
88 | 88 | pkg_cache = list(pkgutil.walk_packages()) |
|
89 | ||
|
89 | ||
|
90 | 90 | already = set() |
|
91 | 91 | for ld, name, ispkg in pkg_cache: |
|
92 | 92 | if name.count('.') < event.symbol.count('.') + 1: |
@@ -124,7 +124,7 b' version' | |||
|
124 | 124 | |
|
125 | 125 | def hg_completer(self,event): |
|
126 | 126 | """ Completer for mercurial commands """ |
|
127 | ||
|
127 | ||
|
128 | 128 | return vcs_completer(hg_commands, event) |
|
129 | 129 | |
|
130 | 130 | ip.set_hook('complete_command', hg_completer, str_key = 'hg') |
@@ -169,7 +169,7 b" ip.set_hook('complete_command', bzr_completer, str_key = 'bzr')" | |||
|
169 | 169 | def runlistpy(self, event): |
|
170 | 170 | comps = shlex.split(event.line) |
|
171 | 171 | relpath = (len(comps) > 1 and comps[-1] or '') |
|
172 | ||
|
172 | ||
|
173 | 173 | #print "rp",relpath # dbg |
|
174 | 174 | lglob = glob.glob |
|
175 | 175 | isdir = os.path.isdir |
@@ -189,20 +189,20 b' def cd_completer(self, event):' | |||
|
189 | 189 | # return only bookmark completions |
|
190 | 190 | bkms = self.db.get('bookmarks',{}) |
|
191 | 191 | return bkms.keys() |
|
192 | ||
|
193 | ||
|
192 | ||
|
193 | ||
|
194 | 194 | if event.symbol == '-': |
|
195 | 195 | # jump in directory history by number |
|
196 | 196 | ents = ['-%d [%s]' % (i,s) for i,s in enumerate(ip.user_ns['_dh'])] |
|
197 | 197 | if len(ents) > 1: |
|
198 | 198 | return ents |
|
199 | 199 | return [] |
|
200 | ||
|
200 | ||
|
201 | 201 | if relpath.startswith('~'): |
|
202 | 202 | relpath = os.path.expanduser(relpath).replace('\\','/') |
|
203 | 203 | found = [] |
|
204 |
for d in [f.replace('\\','/') + '/' for f in glob.glob(relpath+'*') |
|
|
205 |
if os.path.isdir(f)]: |
|
|
204 | for d in [f.replace('\\','/') + '/' for f in glob.glob(relpath+'*') | |
|
205 | if os.path.isdir(f)]: | |
|
206 | 206 | if ' ' in d: |
|
207 | 207 | # we don't want to deal with any of that, complex code |
|
208 | 208 | # for this is elsewhere |
@@ -212,7 +212,7 b' def cd_completer(self, event):' | |||
|
212 | 212 | if not found: |
|
213 | 213 | if os.path.isdir(relpath): |
|
214 | 214 | return [relpath] |
|
215 |
|
|
|
215 | raise IPython.ipapi.TryNext | |
|
216 | 216 | return found |
|
217 | 217 | |
|
218 | 218 | ip.set_hook('complete_command', cd_completer, str_key = '%cd') |
General Comments 0
You need to be logged in to leave comments.
Login now