]> git.phdru.name Git - dotfiles.git/blob - .vim/python/completion.py
Feat(recode-filenames-recursive): Allow to omit parameters
[dotfiles.git] / .vim / python / completion.py
1 # From http://slobin.pp.ru/vim/_vimrc.html
2 # Adapted to python3 by Oleg Broytman <phd@phdru.name>
3
4 from itertools import count
5 import rlcompleter
6 import sys
7 import unicodedata
8
9 import vim
10
11
12 vim_complete = rlcompleter.Completer().complete
13
14
15 def vim_comp_list():
16     """Implementation of CompList() function"""
17     arglead = vim.eval("a:ArgLead")
18     fence = int(vim.eval("match(a:ArgLead, '\\(\\w\\|\\.\\)*$')"))
19     left, right = arglead[:fence], arglead[fence:]
20     try:
21         completions = (vim_complete(right, i) for i in count())
22         candidates = list(takewhile(bool, completions))
23     except NameError:
24         candidates = []
25     suggestions = [left + x for x in candidates]
26     vim.command("return " + repr(suggestions))
27
28
29 def vim_calc(command):
30     """Implementation of :Calc command"""
31     global _
32     try:
33         result = eval(command)
34     except SyntaxError:
35         if sys.version_info[0] == 2:
36             exec(command in globals(), locals())
37         else:
38             exec(command, globals(), locals())
39     else:
40         if result is not None:
41             print(result)
42             _ = result
43             xx = ''.join(['\\x%02x' % ord(x) for x in str(_)])
44             vim.command('let @" = "%s"' % xx)
45
46
47 def vim_pydo(command):
48     """Implementation of :Pydo command"""
49     codeobj = compile(command, "command", "eval")
50     line1 = vim.current.range.start
51     line2 = vim.current.range.end
52     delta = 0
53     for numz in range(line1, line2+1):
54         line = vim.current.buffer[numz-delta]
55         if sys.version_info[0] == 2:
56             uline = line.decode(vim.eval('&fileencoding'))
57         else:
58             uline = line
59         num = numz + 1
60         words = line.split()
61         result = eval(codeobj, globals(), locals())
62         if result is None or result is False:
63             del vim.current.buffer[numz-delta]
64             delta += 1
65             continue
66         if isinstance(result, list) or isinstance(result, tuple):
67             result = " ".join(map(str, result))
68         else:
69             result = str(result)
70         vim.current.buffer[numz-delta] = result
71
72
73 def vim_unicode_name():
74     try:
75         char = vim.eval("matchstr(getline('.'), '.', col('.') - 1)")
76         if sys.version_info[0] == 2:
77             print(unicodedata.name(char.decode(vim.eval("&encoding"))))
78         else:
79             print(unicodedata.name(char))
80     except (AttributeError, ValueError) as target:
81         print("%s: %s" % (target.__class__.__name__, target))