Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 28 additions & 0 deletions radian/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
from prompt_toolkit.styles import style_from_pygments_cls
from prompt_toolkit.utils import is_windows, get_term_environment_variable
from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
from prompt_toolkit.application.current import get_app
from prompt_toolkit.key_binding.vi_state import InputMode, ViState

from pygments.styles import get_style_by_name

Expand Down Expand Up @@ -71,6 +73,32 @@ def askpass(message):
if rcopy(rcall(("utils", "rc.settings"), "ipck")) is None:
rcall(("utils", "rc.settings"), ipck=True)

def get_input_mode(self):
if sys.version_info[0] == 3:
app = get_app()
app.ttimeoutlen = settings.ttimeoutlen
app.timeoutlen = settings.timeoutlen

return self._input_mode

def set_input_mode(self, mode):
shape = {InputMode.NAVIGATION: 2, InputMode.REPLACE: 4}.get(mode, 6)
cursor = "\x1b[{} q".format(shape)

if hasattr(sys.stdout, "_cli"):
write = sys.stdout._cli.output.write_raw
else:
write = sys.stdout.write

write(cursor)
sys.stdout.flush()

self._input_mode = mode

if session.editing_mode.lower() == "vi" and settings.modal_cursor:
ViState._input_mode = InputMode.INSERT
ViState.input_mode = property(get_input_mode, set_input_mode)


def create_radian_prompt_session(options, settings):

Expand Down
3 changes: 3 additions & 0 deletions radian/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,9 @@ def _load_prompt(self):
def load(self):
self._load_setting("auto_suggest", True, bool)
self._load_setting("emacs_bindings_in_vi_insert_mode", True, bool)
self._load_setting("modal_cursor", True, bool)
self._load_setting("ttimeoutlen", 0.01, float)
self._load_setting("timeoutlen", 0.5, float)
self._load_setting("editing_mode", "emacs")
self._load_setting("color_scheme", "native")
self._load_setting("auto_match", True, bool)
Expand Down