##// END OF EJS Templates
Merge pull request #1020 from takluyver/dollar-formatter...
Merge pull request #1020 from takluyver/dollar-formatter Dollar formatter for ! shell calls. This uses a subclass of `FullEvalFormatter` for filling in variables in shell commands like `!echo $spam`, instead of Itpl. I've retained the `{foo}` style standard formatting for complex expressions, so it can be picked up by the more powerful built in parser. `$foo` works for names and attribute access. FullEvalFormatter now always outputs unicode, even if you gave it a bytes string. This avoids problems when you mix 8-bit non-ascii strings and unicode (which e.g. `StringIO.StringIO` suffers from). Closes #822 (test was added in 31ab23f).

File last commit:

r4872:34c10438
r5358:09c9952f merge
Show More
ipy_completers.py
138 lines | 3.9 KiB | text/x-python | PythonLexer
ville
initialization (no svn history)
r988 """ Implementations for various useful completers
Brian Granger
Renaming Extensions=>extensions in code and imports.
r2064 See extensions/ipy_stock_completers.py on examples of how to enable a completer,
ville
initialization (no svn history)
r988 but the basic idea is to do:
ip.set_hook('complete_command', svn_completer, str_key = 'svn')
Fernando Perez
Removed a lot of code from here, which will be committed next....
r2958 NOTE: some of the completers that used to be here, the ones used always by
default (loaded before by ipy_stock_completers) have been moved into
core.completerlib, where they will be further cleaned up and maintained. The
rest of this file would need to be well commented, cleaned up and tested for
inclusion into the core.
ville
initialization (no svn history)
r988 """
Brian Granger
Continuing a massive refactor of everything.
r2205
ville
initialization (no svn history)
r988 import glob,os,shlex,sys
import inspect
from time import time
Ville M. Vainio
module completer looks inside .egg zip files, close #196.
r1155 from zipimport import zipimporter
ville
initialization (no svn history)
r988
Fernando Perez
Removed a lot of code from here, which will be committed next....
r2958 from IPython.core import ipapi
from IPython.core.error import TryNext
ip = ipapi.get()
ville
initialization (no svn history)
r988
def vcs_completer(commands, event):
""" utility to make writing typical version control app completers easier
VCS command line apps typically have the format:
[sudo ]PROGNAME [help] [command] file file...
"""
cmd_param = event.line.split()
if event.line.endswith(' '):
cmd_param.append('')
if cmd_param[0] == 'sudo':
cmd_param = cmd_param[1:]
if len(cmd_param) == 2 or 'help' in cmd_param:
return commands.split()
Brian Granger
Continuing a massive refactor of everything.
r2205 return ip.Completer.file_matches(event.symbol)
ville
initialization (no svn history)
r988
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):
return vcs_completer(svn_commands, event)
hg_commands = """
add addremove annotate archive backout branch branches bundle cat
clone commit copy diff export grep heads help identify import incoming
init locate log manifest merge outgoing parents paths pull push
qapplied qclone qcommit qdelete qdiff qfold qguard qheader qimport
qinit qnew qnext qpop qprev qpush qrefresh qrename qrestore qsave
qselect qseries qtop qunapplied recover remove rename revert rollback
root serve showconfig status strip tag tags tip unbundle update verify
version
"""
def hg_completer(self,event):
""" Completer for mercurial commands """
return vcs_completer(hg_commands, event)
Ville M. Vainio
bzr completer caches the commands (only runs bzr help commands on the first run)
r1067 __bzr_commands = None
vivainio2
bzr completer now gets commands from 'bzr help commands' (includes all commands provided by exensions also)
r1062 def bzr_commands():
Ville M. Vainio
bzr completer caches the commands (only runs bzr help commands on the first run)
r1067 global __bzr_commands
if __bzr_commands is not None:
return __bzr_commands
vivainio2
bzr completer now gets commands from 'bzr help commands' (includes all commands provided by exensions also)
r1062 out = os.popen('bzr help commands')
Ville M. Vainio
bzr completer caches the commands (only runs bzr help commands on the first run)
r1067 __bzr_commands = [l.split()[0] for l in out]
Bernardo B. Marques
remove all trailling spaces
r4872 return __bzr_commands
ville
initialization (no svn history)
r988
def bzr_completer(self,event):
""" Completer for bazaar commands """
cmd_param = event.line.split()
if event.line.endswith(' '):
cmd_param.append('')
if len(cmd_param) > 2:
cmd = cmd_param[1]
param = cmd_param[-1]
output_file = (param == '--output=')
if cmd == 'help':
vivainio2
bzr completer now gets commands from 'bzr help commands' (includes all commands provided by exensions also)
r1062 return bzr_commands()
ville
initialization (no svn history)
r988 elif cmd in ['bundle-revisions','conflicts',
'deleted','nick','register-branch',
'serve','unbind','upgrade','version',
'whoami'] and not output_file:
return []
else:
# the rest are probably file names
Brian Granger
Continuing a massive refactor of everything.
r2205 return ip.Completer.file_matches(event.symbol)
ville
initialization (no svn history)
r988
vivainio2
bzr completer now gets commands from 'bzr help commands' (includes all commands provided by exensions also)
r1062 return bzr_commands()
ville
initialization (no svn history)
r988
def apt_get_packages(prefix):
out = os.popen('apt-cache pkgnames')
for p in out:
if p.startswith(prefix):
yield p.rstrip()
Bernardo B. Marques
remove all trailling spaces
r4872
ville
initialization (no svn history)
r988 apt_commands = """\
update upgrade install remove purge source build-dep dist-upgrade
dselect-upgrade clean autoclean check"""
def apt_completer(self, event):
""" Completer for apt-get (uses apt-cache internally)
"""
cmd_param = event.line.split()
if event.line.endswith(' '):
cmd_param.append('')
if cmd_param[0] == 'sudo':
cmd_param = cmd_param[1:]
if len(cmd_param) == 2 or 'help' in cmd_param:
return apt_commands.split()
return list(apt_get_packages(event.symbol))