Skip to content

Commit baf27e0

Browse files
split keymap creation from EventQueue
1 parent 3d7af67 commit baf27e0

File tree

2 files changed

+25
-15
lines changed

2 files changed

+25
-15
lines changed

pyrepl/unix_eventqueue.py

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -52,18 +52,29 @@
5252
"up" : "kcuu1",
5353
}
5454

55-
class EventQueue(object):
56-
def __init__(self, fd, encoding):
57-
our_keycodes = {}
58-
for key, tiname in _keynames.items():
59-
keycode = curses.tigetstr(tiname)
60-
trace('key {key} tiname {tiname} keycode {keycode!r}', **locals())
61-
if keycode:
62-
our_keycodes[keycode] = key
63-
if os.isatty(fd):
64-
our_keycodes[tcgetattr(fd)[6][VERASE]] = unicode('backspace')
65-
self.k = self.ck = keymap.compile_keymap(our_keycodes)
66-
trace('keymap {k!r}', k=self.k)
55+
def general_keycodes():
56+
keycodes = {}
57+
for key, tiname in _keynames.items():
58+
keycode = curses.tigetstr(tiname)
59+
trace('key {key} tiname {tiname} keycode {keycode!r}', **locals())
60+
if keycode:
61+
keycodes[keycode] = key
62+
return keycodes
63+
64+
65+
66+
def EventQueue(fd, encoding):
67+
keycodes = general_keycodes()
68+
if os.isatty(fd):
69+
backspace = tcgetattr(fd)[6][VERASE]
70+
keycodes[backspace] = unicode('backspace')
71+
k = keymap.compile_keymap(keycodes)
72+
trace('keymap {k!r}', k=k)
73+
return EncodedQueue(k, encoding)
74+
75+
class EncodedQueue(object):
76+
def __init__(self, keymap, encoding):
77+
self.k = self.ck = keymap
6778
self.events = []
6879
self.buf = []
6980
self.encoding=encoding

testing/test_unix_reader.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
from pyrepl.unix_eventqueue import EventQueue
1+
from pyrepl.unix_eventqueue import EncodedQueue
22

33
from pyrepl import curses
44

55

6-
@pytest.mark.xfail(run=False, reason='wtf segfault')
76
def test_simple():
8-
q = EventQueue(0, 'utf-8')
7+
q = EncodedQueue({}, 'utf-8')
98

0 commit comments

Comments
 (0)