Add a Emoji panel to the unicode input kitten

This commit is contained in:
Kovid Goyal 2018-02-13 09:06:39 +05:30
parent dab852c412
commit a36f4a4670
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -10,8 +10,8 @@ from gettext import gettext as _
from kitty.config import cached_values_for from kitty.config import cached_values_for
from kitty.fast_data_types import wcswidth from kitty.fast_data_types import wcswidth
from kitty.key_encoding import ( from kitty.key_encoding import (
DOWN, ESCAPE, F1, F2, LEFT, RELEASE, RIGHT, SHIFT, TAB, UP, backspace_key, DOWN, ESCAPE, F1, F2, F3, LEFT, RELEASE, RIGHT, SHIFT, TAB, UP,
enter_key backspace_key, enter_key
) )
from ..tui.handler import Handler from ..tui.handler import Handler
@ -21,7 +21,7 @@ from ..tui.operations import (
set_window_title, sgr, styled set_window_title, sgr, styled
) )
HEX, NAME = 'HEX', 'NAME' HEX, NAME, EMOTICONS = 'HEX', 'NAME', 'EMOTICONS'
@lru_cache(maxsize=256) @lru_cache(maxsize=256)
@ -205,6 +205,9 @@ class UnicodeInput(Handler):
if self.mode is HEX: if self.mode is HEX:
q = self.mode, None q = self.mode, None
codepoints = self.recent codepoints = self.recent
elif self.mode is EMOTICONS:
q = self.mode, None
codepoints = list(EMOTICONS_SET)
elif self.mode is NAME: elif self.mode is NAME:
q = self.mode, self.current_input q = self.mode, self.current_input
if q != self.last_updated_code_point_at: if q != self.last_updated_code_point_at:
@ -225,10 +228,16 @@ class UnicodeInput(Handler):
self.current_char = chr(code) self.current_char = chr(code)
except Exception: except Exception:
pass pass
else: elif self.mode is NAME:
cc = self.table.current_codepoint cc = self.table.current_codepoint
if cc: if cc:
self.current_char = chr(cc) self.current_char = chr(cc)
else:
try:
if self.current_input:
self.current_char = chr(self.table.codepoint_at_hint(self.current_input))
except Exception:
pass
if self.current_char is not None: if self.current_char is not None:
code = ord(self.current_char) code = ord(self.current_char)
if code <= 32 or code == 127 or 128 <= code <= 159 or 0xd800 <= code <= 0xdbff or 0xDC00 <= code <= 0xDFFF: if code <= 32 or code == 127 or 128 <= code <= 159 or 0xd800 <= code <= 0xdbff or 0xDC00 <= code <= 0xDFFF:
@ -256,6 +265,7 @@ class UnicodeInput(Handler):
for name, key, mode in [ for name, key, mode in [
(_('Code'), 'F1', HEX), (_('Code'), 'F1', HEX),
(_('Name'), 'F2', NAME), (_('Name'), 'F2', NAME),
(_('Emoji'), 'F3', EMOTICONS),
]: ]:
entry = ' {} ({}) '.format(name, key) entry = ' {} ({}) '.format(name, key)
if mode is self.mode: if mode is self.mode:
@ -316,6 +326,8 @@ class UnicodeInput(Handler):
self.switch_mode(HEX) self.switch_mode(HEX)
elif key_event.key is F2: elif key_event.key is F2:
self.switch_mode(NAME) self.switch_mode(NAME)
elif key_event.key is F3:
self.switch_mode(EMOTICONS)
elif self.mode is NAME: elif self.mode is NAME:
if key_event.key is TAB: if key_event.key is TAB:
if key_event.mods == SHIFT: if key_event.mods == SHIFT: