diff --git a/CHANGELOG.rst b/CHANGELOG.rst index c6ff8be9..4d0f457b 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,21 @@ Changelog Notable changes to this project will be documented in this file. +********************* +v1.6.1 - (2022-05-08) +********************* + +Changed +======= + +- Allow ``file:`` scheme links in markdown + +Fixed +===== + +- Enable entering vi navigation mode +- Change "go to matching bracket" command key-binding in micro mode to :kbd:`Alt+(` / :kbd:`Alt+)`, so as not to conflict with the "find-next" command + ********************* v1.6.0 - (2022-04-26) ********************* diff --git a/euporie/commands/notebook.py b/euporie/commands/notebook.py index b1a48a53..fd7f8a9a 100644 --- a/euporie/commands/notebook.py +++ b/euporie/commands/notebook.py @@ -2,7 +2,7 @@ import logging -from prompt_toolkit.filters import buffer_has_focus +from prompt_toolkit.filters import buffer_has_focus, vi_mode, vi_navigation_mode from euporie.app.current import get_edit_app as get_app from euporie.commands.registry import add @@ -45,7 +45,9 @@ def enter_cell_edit_mode() -> "None": @add( keys="escape", - filter=cell_has_focus & buffer_has_focus, + filter=cell_has_focus + & buffer_has_focus + & (~vi_mode | (vi_mode & vi_navigation_mode)), group="notebook", ) def exit_edit_mode() -> "None": diff --git a/euporie/filters.py b/euporie/filters.py index 03b8c5e3..bc357898 100644 --- a/euporie/filters.py +++ b/euporie/filters.py @@ -7,8 +7,11 @@ from prompt_toolkit.filters import ( Condition, emacs_insert_mode, + emacs_mode, to_filter, vi_insert_mode, + vi_mode, + vi_replace_mode, ) from euporie.app.current import get_edit_app as get_app @@ -265,5 +268,12 @@ def kernel_is_python() -> "bool": ) -"""Determine if any binding style is in insert mode""" -insert_mode = vi_insert_mode | emacs_insert_mode | micro_insert_mode +"""Determine if any binding style is in insert mode.""" +insert_mode = ( + (vi_mode & vi_insert_mode) + | (emacs_mode & emacs_insert_mode) + | (micro_mode & micro_insert_mode) +) + +"""Determine if any binding style is in replace mode.""" +replace_mode = micro_replace_mode | vi_replace_mode diff --git a/euporie/tabs/notebook.py b/euporie/tabs/notebook.py index 54520fab..eb69a339 100644 --- a/euporie/tabs/notebook.py +++ b/euporie/tabs/notebook.py @@ -27,6 +27,7 @@ from euporie.app.current import get_edit_app as get_app from euporie.config import config +from euporie.filters import insert_mode, replace_mode from euporie.key_binding.bindings.commands import load_command_bindings from euporie.suggest import KernelAutoSuggest from euporie.tabs.base import Tab @@ -938,7 +939,7 @@ def statusbar_fields( """Generates the formatted text for the statusbar.""" return ( [ - "^" if self.edit_mode else ">", + self.mode(), f"Cell {self.page.selected_slice.start+1}", "Saving.." if self.saving else "", ], @@ -947,3 +948,24 @@ def statusbar_fields( KERNEL_STATUS_REPR[self.kernel.status] if self.kernel else ".", ], ) + + def mode(self) -> "str": + """Returns a symbol representing the current mode. + + * ``^``: Notebook mode + * ``>``: Navigation mode + * ``I``: Insert mode + * ``v``: Visual mode + + Returns: + A character representing the current mode + """ + # TODO - sort this out + if self.edit_mode: + if insert_mode(): + return "I" + elif replace_mode(): + return "o" + else: + return ">" + return "^"