diff --git a/powerline/config_files/themes/ascii.json b/powerline/config_files/themes/ascii.json index c6760613..1012a56d 100644 --- a/powerline/config_files/themes/ascii.json +++ b/powerline/config_files/themes/ascii.json @@ -105,8 +105,12 @@ "S": "S-LINE", "^S": "S-BLCK", "i": "INSERT", + "ic": "I-COMP", + "ix": "I-C_X ", "R": "RPLACE", "Rv": "V-RPLC", + "Rc": "R-COMP", + "Rx": "R-C_X ", "c": "COMMND", "cv": "VIM-EX", "ce": "NRM-EX", diff --git a/powerline/config_files/themes/powerline.json b/powerline/config_files/themes/powerline.json index 8eb208ad..b0120b14 100644 --- a/powerline/config_files/themes/powerline.json +++ b/powerline/config_files/themes/powerline.json @@ -103,8 +103,12 @@ "S": "S·LINE", "^S": "S·BLCK", "i": "INSERT", + "ic": "I·COMP", + "ix": "I·C-X ", "R": "RPLACE", "Rv": "V·RPLC", + "Rc": "R·COMP", + "Rx": "R·C-X ", "c": "COMMND", "cv": "VIM·EX", "ce": "NRM·EX", diff --git a/powerline/config_files/themes/powerline_terminus.json b/powerline/config_files/themes/powerline_terminus.json index caef6db3..5481ca4a 100644 --- a/powerline/config_files/themes/powerline_terminus.json +++ b/powerline/config_files/themes/powerline_terminus.json @@ -103,8 +103,12 @@ "S": "S·LINE", "^S": "S·BLCK", "i": "INSERT", + "ic": "I·COMP", + "ix": "I·C-X ", "R": "RPLACE", "Rv": "V·RPLC", + "Rc": "R·COMP", + "Rx": "R·C-X ", "c": "COMMND", "cv": "VIM·EX", "ce": "NRM·EX", diff --git a/powerline/config_files/themes/powerline_unicode7.json b/powerline/config_files/themes/powerline_unicode7.json index 5411fd38..023eb43d 100644 --- a/powerline/config_files/themes/powerline_unicode7.json +++ b/powerline/config_files/themes/powerline_unicode7.json @@ -117,8 +117,12 @@ "S": "S·LINE", "^S": "S·BLCK", "i": "INSERT", + "ic": "I·COMP", + "ix": "I·C-X ", "R": "RPLACE", "Rv": "V·RPLC", + "Rc": "R·COMP", + "Rx": "R·C-X ", "c": "COMMND", "cv": "VIM·EX", "ce": "NRM·EX", diff --git a/powerline/config_files/themes/unicode.json b/powerline/config_files/themes/unicode.json index 6c183a69..33d96346 100644 --- a/powerline/config_files/themes/unicode.json +++ b/powerline/config_files/themes/unicode.json @@ -103,8 +103,12 @@ "S": "S·LINE", "^S": "S·BLCK", "i": "INSERT", + "ic": "I·COMP", + "ix": "I·C-X ", "R": "RPLACE", "Rv": "V·RPLC", + "Rc": "R·COMP", + "Rx": "R·C-X ", "c": "COMMND", "cv": "VIM·EX", "ce": "NRM·EX", diff --git a/powerline/config_files/themes/unicode_terminus.json b/powerline/config_files/themes/unicode_terminus.json index 47320529..b0e51bd1 100644 --- a/powerline/config_files/themes/unicode_terminus.json +++ b/powerline/config_files/themes/unicode_terminus.json @@ -103,8 +103,12 @@ "S": "S·LINE", "^S": "S·BLCK", "i": "INSERT", + "ic": "I·COMP", + "ix": "I·C-X ", "R": "RPLACE", "Rv": "V·RPLC", + "Rc": "R·COMP", + "Rx": "R·C-X ", "c": "COMMND", "cv": "VIM·EX", "ce": "NRM·EX", diff --git a/powerline/config_files/themes/unicode_terminus_condensed.json b/powerline/config_files/themes/unicode_terminus_condensed.json index ddd75876..421f5c88 100644 --- a/powerline/config_files/themes/unicode_terminus_condensed.json +++ b/powerline/config_files/themes/unicode_terminus_condensed.json @@ -104,8 +104,12 @@ "S": "SLN", "^S": "SBL", "i": "INS", + "ic": "I-C", + "ix": "I^X", "R": "REP", "Rv": "VRP", + "Rc": "R-C", + "Rx": "R^X", "c": "CMD", "cv": "VEX", "ce": " EX", diff --git a/powerline/segments/vim/__init__.py b/powerline/segments/vim/__init__.py index 122c9e9a..f89b9659 100644 --- a/powerline/segments/vim/__init__.py +++ b/powerline/segments/vim/__init__.py @@ -50,15 +50,19 @@ vim_modes = { 'S': 'S-LINE', '^S': 'S-BLCK', 'i': 'INSERT', - 'R': 'REPLACE', - 'Rv': 'V-RPLCE', + 'ic': 'I-COMP', + 'ix': 'I-C_X ', + 'R': 'RPLACE', + 'Rv': 'V-RPLC', + 'Rc': 'R-COMP', + 'Rx': 'R-C_X ', 'c': 'COMMND', - 'cv': 'VIM EX', - 'ce': 'EX', + 'cv': 'VIM-EX', + 'ce': 'NRM-EX', 'r': 'PROMPT', - 'rm': 'MORE', - 'r?': 'CONFIRM', - '!': 'SHELL', + 'rm': '-MORE-', + 'r?': 'CNFIRM', + '!': '!SHELL', } @@ -87,18 +91,27 @@ def window_cached(func): def mode(pl, segment_info, override=None): '''Return the current vim mode. + If mode (returned by ``mode()`` VimL function, see ``:h mode()`` in Vim) + consists of multiple characters and necessary mode is not known to powerline + then it will fall back to mode with last character(s) ignored. + :param dict override: dict for overriding default mode strings, e.g. ``{ 'n': 'NORM' }`` ''' mode = segment_info['mode'] if mode == 'nc': return None - if not override: - return vim_modes[mode] - try: - return override[mode] - except KeyError: - return vim_modes[mode] + while mode: + try: + if not override: + return vim_modes[mode] + try: + return override[mode] + except KeyError: + return vim_modes[mode] + except KeyError: + mode = mode[:-1] + return 'BUG' @window_cached diff --git a/tests/test_segments.py b/tests/test_segments.py index 05484fe1..4149e937 100644 --- a/tests/test_segments.py +++ b/tests/test_segments.py @@ -1159,6 +1159,8 @@ class TestVim(TestCase): self.assertEqual(self.vim.mode(pl=pl, segment_info=segment_info, override={'n': 'NORM'}), 'NORM') with vim_module._with('mode', 'i') as segment_info: self.assertEqual(self.vim.mode(pl=pl, segment_info=segment_info), 'INSERT') + with vim_module._with('mode', 'i\0') as segment_info: + self.assertEqual(self.vim.mode(pl=pl, segment_info=segment_info), 'INSERT') with vim_module._with('mode', chr(ord('V') - 0x40)) as segment_info: self.assertEqual(self.vim.mode(pl=pl, segment_info=segment_info), 'V-BLCK') self.assertEqual(self.vim.mode(pl=pl, segment_info=segment_info, override={'^V': 'VBLK'}), 'VBLK')