36 lines
800 B
Python
36 lines
800 B
Python
from pathlib import Path
|
|
import atexit
|
|
import os
|
|
import readline
|
|
|
|
NAMES = set(dir(__builtins__))
|
|
|
|
# Note that we WANT names here to be part of the closure of the
|
|
# function so it retains its value from call to call.
|
|
def completer(text, state, names=[]):
|
|
if 0 == state:
|
|
names[:] = filter(lambda name: name.startswith(text), NAMES)
|
|
try:
|
|
return names[state]
|
|
except IndexError:
|
|
return
|
|
|
|
|
|
readline.set_completer(completer)
|
|
readline.parse_and_bind('TAB: complete')
|
|
|
|
hfname = str(Path.home() / '.joy_history')
|
|
try:
|
|
readline.read_history_file(hfname)
|
|
except FileNotFoundError:
|
|
pass
|
|
atexit.register(readline.write_history_file, hfname)
|
|
|
|
while True:
|
|
try:
|
|
i = input('> ')
|
|
except (EOFError, KeyboardInterrupt):
|
|
i = ''
|
|
break
|
|
print(i)
|