Implement handling for special keys

This commit is contained in:
Kovid Goyal 2016-10-20 15:25:29 +05:30
parent e010d13994
commit f9cc8f6584
3 changed files with 41 additions and 76 deletions

View File

@ -7,18 +7,47 @@ from PyQt5.QtCore import Qt, QObject, QEvent
CTRL_MASK = 0b10011111 CTRL_MASK = 0b10011111
key_map = {
Qt.Key_Up: '[A',
Qt.Key_Down: '[B',
Qt.Key_Left: '[D',
Qt.Key_Right: '[C',
Qt.Key_Home: 'OH',
Qt.Key_End: 'OF',
Qt.Key_Insert: '[2~',
Qt.Key_Delete: '[3~',
Qt.Key_PageUp: '[5~',
Qt.Key_PageDown: '[6~',
Qt.Key_F1: 'OP',
Qt.Key_F2: 'OQ',
Qt.Key_F3: 'OR',
Qt.Key_F4: 'OS',
Qt.Key_F5: '[15~',
Qt.Key_F6: '[17~',
Qt.Key_F7: '[18~',
Qt.Key_F8: '[19~',
Qt.Key_F9: '[20~',
Qt.Key_F10: '[21~',
Qt.Key_F11: '[23~',
Qt.Key_F12: '[24~',
}
def key_event_to_data(ev, mods): def key_event_to_data(ev, mods):
data = bytearray() data = bytearray()
if mods & Qt.AltModifier: if mods & Qt.AltModifier:
data.append(27) data.append(27)
t = ev.text() x = key_map.get(ev.key())
if t: if x is not None:
t = t.encode('utf-8') data.extend(b'\033' + x.encode('ascii'))
if mods & Qt.ControlModifier and len(t) == 1 and 0 < t[0] & CTRL_MASK < 33: else:
data.append(t[0] & CTRL_MASK) t = ev.text()
else: if t:
data.extend(t) t = t.encode('utf-8')
if mods & Qt.ControlModifier and len(t) == 1 and 0 < t[0] & CTRL_MASK < 33:
data.append(t[0] & CTRL_MASK)
else:
data.extend(t)
return bytes(data) return bytes(data)

View File

@ -14,7 +14,6 @@ xterm-kitty|KovIdTTY,
it#8, it#8,
lines#24, lines#24,
pairs#32767, pairs#32767,
U8#1,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bel=^G,
bold=\E[1m, bold=\E[1m,
@ -56,90 +55,27 @@ xterm-kitty|KovIdTTY,
initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\, initc=\E]4;%p1%d;rgb\:%p2%{255}%*%{1000}%/%2.2X/%p3%{255}%*%{1000}%/%2.2X/%p4%{255}%*%{1000}%/%2.2X\E\\,
invis=\E[8m, invis=\E[8m,
is2=\E[!p\E[?3;4l\E[4l\E>, is2=\E[!p\E[?3;4l\E[4l\E>,
kDC=\E[3;2~,
kEND=\E[1;2F,
kHOM=\E[1;2H,
kIC=\E[2;2~,
kLFT=\E[1;2D,
kNXT=\E[6;2~,
kPRV=\E[5;2~,
kRIT=\E[1;2C,
kb2=\EOE,
kbs=\177, kbs=\177,
kcbt=\E[Z,
kcub1=\EOD, kcub1=\EOD,
kcud1=\EOB, kcud1=\EOB,
kcuf1=\EOC, kcuf1=\EOC,
kcuu1=\EOA, kcuu1=\EOA,
kdch1=\E[3~,
kend=\EOF,
kent=\EOM,
kf1=\EOP, kf1=\EOP,
kf10=\E[21~,
kf11=\E[23~,
kf12=\E[24~,
kf13=\E[1;2P,
kf14=\E[1;2Q,
kf15=\E[1;2R,
kf16=\E[1;2S,
kf17=\E[15;2~,
kf18=\E[17;2~,
kf19=\E[18;2~,
kf2=\EOQ, kf2=\EOQ,
kf20=\E[19;2~,
kf21=\E[20;2~,
kf22=\E[21;2~,
kf23=\E[23;2~,
kf24=\E[24;2~,
kf25=\E[1;5P,
kf26=\E[1;5Q,
kf27=\E[1;5R,
kf28=\E[1;5S,
kf29=\E[15;5~,
kf3=\EOR, kf3=\EOR,
kf30=\E[17;5~,
kf31=\E[18;5~,
kf32=\E[19;5~,
kf33=\E[20;5~,
kf34=\E[21;5~,
kf35=\E[23;5~,
kf36=\E[24;5~,
kf37=\E[1;6P,
kf38=\E[1;6Q,
kf39=\E[1;6R,
kf4=\EOS, kf4=\EOS,
kf40=\E[1;6S,
kf41=\E[15;6~,
kf42=\E[17;6~,
kf43=\E[18;6~,
kf44=\E[19;6~,
kf45=\E[20;6~,
kf46=\E[21;6~,
kf47=\E[23;6~,
kf48=\E[24;6~,
kf49=\E[1;3P,
kf5=\E[15~, kf5=\E[15~,
kf50=\E[1;3Q,
kf51=\E[1;3R,
kf52=\E[1;3S,
kf53=\E[15;3~,
kf54=\E[17;3~,
kf55=\E[18;3~,
kf56=\E[19;3~,
kf57=\E[20;3~,
kf58=\E[21;3~,
kf59=\E[23;3~,
kf6=\E[17~, kf6=\E[17~,
kf60=\E[24;3~,
kf61=\E[1;4P,
kf62=\E[1;4Q,
kf63=\E[1;4R,
kf7=\E[18~, kf7=\E[18~,
kf8=\E[19~, kf8=\E[19~,
kf9=\E[20~, kf9=\E[20~,
kf10=\E[21~,
kf11=\E[23~,
kf12=\E[24~,
khome=\EOH, khome=\EOH,
kend=\EOF,
kich1=\E[2~, kich1=\E[2~,
kind=\E[1;2B, kdch1=\E[3~,
kmous=\E[M, kmous=\E[M,
knp=\E[6~, knp=\E[6~,
kpp=\E[5~, kpp=\E[5~,

Binary file not shown.