##// END OF EJS Templates
reindent ipy_stock_completers
vivainio -
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 raise IPython.ipapi.TryNext
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