46 lines
1.6 KiB
Python
46 lines
1.6 KiB
Python
import sys # noqa: I001
|
|
import contextlib
|
|
import pathlib
|
|
|
|
|
|
# From https://github.com/python/cpython/blob/v3.7.0b5/Lib/site.py#L436
|
|
# Changing the history file
|
|
def register_readline() -> None:
|
|
import atexit
|
|
|
|
try:
|
|
import readline
|
|
import rlcompleter # noqa: F401
|
|
except ImportError:
|
|
return
|
|
|
|
# Reading the initialization (config) file may not be enough to set a
|
|
# completion key, so we set one first and then read the file.
|
|
readline_doc = getattr(readline, "__doc__", "")
|
|
if readline_doc is not None and "libedit" in readline_doc:
|
|
readline.parse_and_bind("bind ^I rl_complete")
|
|
else:
|
|
readline.parse_and_bind("tab: complete")
|
|
|
|
# An OSError here could have many causes, but the most likely one
|
|
# is that there's no .inputrc file (or .editrc file in the case of
|
|
# Mac OS X + libedit) in the expected location. In that case, we
|
|
# want to ignore the exception.
|
|
cm = contextlib.suppress(OSError)
|
|
with cm:
|
|
readline.read_init_file()
|
|
|
|
if readline.get_current_history_length() == 0:
|
|
# If no history was loaded, default to .python_history.
|
|
# The guard is necessary to avoid doubling history size at
|
|
# each interpreter exit when readline was already configured
|
|
# through a PYTHONSTARTUP hook, see:
|
|
# http://bugs.python.org/issue5845#msg198636
|
|
history = pathlib.Path("~/.cache/python_history").expanduser()
|
|
cm = contextlib.suppress(OSError)
|
|
with cm:
|
|
readline.read_history_file(history)
|
|
atexit.register(readline.write_history_file, history)
|
|
|
|
|
|
sys.__interactivehook__ = register_readline # noqa: attr-defined
|