""" Tab completion support for a couple of linux package managers This is also an example of how to write custom completer plugins or hooks. Practical use: [ipython]|1> import ipy_linux_package_managers [ipython]|2> apt-get u<<< press tab here >>> update upgrade [ipython]|2> apt-get up """ import IPython.ipapi ip = IPython.ipapi.get() def apt_completers(self, event): """ This should return a list of strings with possible completions. Note that all the included strings that don't start with event.symbol are removed, in order to not confuse readline. """ # print event # dbg # commands are only suggested for the 'command' part of package manager # invocation cmd = (event.line + "").rsplit(None,1)[0] # print cmd if cmd.endswith('apt-get') or cmd.endswith('yum'): return ['update', 'upgrade', 'install', 'remove'] # later on, add dpkg -l / whatever to get list of possible # packages, add switches etc. for the rest of command line # filling raise IPython.ipapi.TryNext # re_key specifies the regexp that triggers the specified completer ip.set_hook('complete_command', apt_completers, re_key = '.*apt-get') ip.set_hook('complete_command', apt_completers, re_key = '.*yum') py_std_modules = """\ BaseHTTPServer Bastion CGIHTTPServer ConfigParser Cookie DocXMLRPCServer HTMLParser MimeWriter Queue SimpleHTTPServer SimpleXMLRPCServer SocketServer StringIO UserDict UserList UserString _LWPCookieJar _MozillaCookieJar __future__ __phello__.foo _strptime _threading_local aifc anydbm asynchat asyncore atexit audiodev base64 bdb binhex bisect cProfile calendar cgi cgitb chunk cmd code codecs codeop colorsys commands compileall contextlib cookielib copy copy_reg csv dbhash decimal difflib dircache dis doctest dumbdbm dummy_thread dummy_threading filecmp fileinput fnmatch formatter fpformat ftplib functools getopt getpass gettext glob gopherlib gzip hashlib heapq hmac htmlentitydefs htmllib httplib ihooks imaplib imghdr imputil inspect keyword linecache locale macpath macurl2path mailbox mailcap markupbase md5 mhlib mimetools mimetypes mimify modulefinder multifile mutex netrc new nntplib ntpath nturl2path opcode optparse os os2emxpath pdb pickle pickletools pipes pkgutil platform popen2 poplib posixfile posixpath pprint profile pstats pty py_compile pyclbr pydoc quopri random re repr rexec rfc822 rlcompleter robotparser runpy sched sets sgmllib sha shelve shlex shutil site smtpd smtplib sndhdr socket sre sre_compile sre_constants sre_parse stat statvfs string stringold stringprep struct subprocess sunau sunaudio symbol symtable tabnanny tarfile telnetlib tempfile textwrap this threading timeit toaiff token tokenize trace traceback tty types unittest urllib urllib2 urlparse user uu uuid warnings wave weakref webbrowser whichdb xdrlib xmllib xmlrpclib zipfile""" def module_completer(self,event): """ Give completions after user has typed 'import' """ return py_std_modules.split() ip.set_hook('complete_command', module_completer, str_key = 'import') svn_commands = """\ add blame praise annotate ann cat checkout co cleanup commit ci copy cp delete del remove rm diff di export help ? h import info list ls lock log merge mkdir move mv rename ren propdel pdel pd propedit pedit pe propget pget pg proplist plist pl propset pset ps resolved revert status stat st switch sw unlock update """ def svn_completer(self,event): if len((event.line + 'placeholder').split()) > 2: # the rest are probably file names return ip.IP.Completer.file_matches(event.symbol) return svn_commands.split() ip.set_hook('complete_command', svn_completer, str_key = 'svn')