-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathtry.py
executable file
·66 lines (60 loc) · 2.46 KB
/
try.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#!/usr/bin/env python
import code
import sys
SOURCE_FILE = "blogapp%d.py" % sys.version_info.major
class ReadLineConsole(code.InteractiveConsole):
BACK_CHAR = 'Z'
def __init__(self, locals=None, filename="<console>", histfile=None):
code.InteractiveConsole.__init__(self, locals, filename)
self.queue = open(SOURCE_FILE).readlines()
self.queue_pos = 0
self.back_search = None
try:
import readline
except ImportError:
pass
else:
try:
import rlcompleter
self.completer = rlcompleter.Completer(locals)
readline.set_completer(self.complete)
except ImportError:
pass
if 'libedit' in readline.__doc__:
readline.parse_and_bind("bind ^I rl_complete")
else:
readline.parse_and_bind("tab: complete")
def complete(self, text, state):
# print (text, self.queue_pos, self.back_search, state)
if text == '':
if state == 0:
if self.back_search is not None:
self.queue_pos -= self.back_search + 1
self.back_search = None
if self.queue_pos >= len(self.queue):
return "# That's all, folks!"
line = self.queue[self.queue_pos]
self.queue_pos += 1
return line.rstrip("\n")
return None
elif text == self.BACK_CHAR:
if state == 0:
self.back_search = 1 if self.back_search is None else self.back_search + 1
back_pos = self.queue_pos - self.back_search
back_line = self.queue[back_pos if back_pos >= 0 else 0]
return self.BACK_CHAR + "0" + back_line.rstrip("\n")
elif state == 1:
back_pos = self.queue_pos - self.back_search - 1
back_line = self.queue[back_pos if back_pos >= 0 else 0]
return self.BACK_CHAR + "1" + back_line.rstrip("\n")
return None
self.back_search = None
return self.completer.complete(text, state)
ldict = locals().copy()
ldict.pop("ReadLineConsole")
ldict.pop("code")
local_var_names = " ".join(sorted([var for var in ldict.keys() if not var.startswith("__")]))
console = ReadLineConsole(ldict)
banner = ("Python %s on %s\n(%s)" %
(sys.version, sys.platform, local_var_names))
console.interact(banner=banner)