From f9cc8f65841a353e691d38698a39c7852aa0bcbb Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 20 Oct 2016 15:25:29 +0530 Subject: [PATCH] Implement handling for special keys --- kitty/keys.py | 43 +++++++++++++++++++---- terminfo/kitty.terminfo | 74 +++------------------------------------- terminfo/x/xterm-kitty | Bin 2293 -> 1829 bytes 3 files changed, 41 insertions(+), 76 deletions(-) diff --git a/kitty/keys.py b/kitty/keys.py index 77888f58a..892ce8797 100644 --- a/kitty/keys.py +++ b/kitty/keys.py @@ -7,18 +7,47 @@ from PyQt5.QtCore import Qt, QObject, QEvent 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): data = bytearray() if mods & Qt.AltModifier: data.append(27) - t = ev.text() - if 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) + x = key_map.get(ev.key()) + if x is not None: + data.extend(b'\033' + x.encode('ascii')) + else: + t = ev.text() + if 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) diff --git a/terminfo/kitty.terminfo b/terminfo/kitty.terminfo index 9e022f1cb..d728f8362 100644 --- a/terminfo/kitty.terminfo +++ b/terminfo/kitty.terminfo @@ -14,7 +14,6 @@ xterm-kitty|KovIdTTY, it#8, lines#24, pairs#32767, - U8#1, acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~, bel=^G, 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\\, invis=\E[8m, 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, - kcbt=\E[Z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, - kdch1=\E[3~, - kend=\EOF, - kent=\EOM, 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, - 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, - 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, - 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~, - 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~, - kf60=\E[24;3~, - kf61=\E[1;4P, - kf62=\E[1;4Q, - kf63=\E[1;4R, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, + kf10=\E[21~, + kf11=\E[23~, + kf12=\E[24~, khome=\EOH, + kend=\EOF, kich1=\E[2~, - kind=\E[1;2B, + kdch1=\E[3~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, diff --git a/terminfo/x/xterm-kitty b/terminfo/x/xterm-kitty index 335593e36767499b0e748e23d9ce066c01692a85..c09025cc2bea48deb2531f614b7880074008ee2f 100644 GIT binary patch delta 267 zcmew=xRj4aicyq7mVuuklkq$AM4lf!|Nmz&{{NrPSjIC&$Zm|HVr4^ZI$|EY}g z7?(3{VBE=gi19Sz6~?=a&%omU|G#Ja%=iPy{>#X~1X3x)B+8_~q|Btsq`_1L6scvZ zXPPX?D8knQmIf&~%5<6uWIEGDrpXVP94CKZQf0ZybQ{iLdI)0b@jYYu$n=fr9}^Sv z|Nq>~ARS_vKqflKV+NVR`@aM#SHZlUd9xmKF5~7!EaHrl_p&-m+M8!ENJrb7=P*e7 Ty8&57#&salq;B&)c5y}kZsT=% delta 885 zcmY+AUx-X$6u|HK&bcVl_*2H8vDqi2ZSCBDbH^=z)?i-PwVRUlKzSIo;z5#R(1uW( z22bmWeUa2O;>80cQj)fPvK~ClgOZf8q4YW5cfO|Fy7za^`Of*>(>I;}xh%H^R(L($ z67M*?@o(jR@tnXpTuO zRHk#aTB|mwO{!0AR+qRkp|04vIn(+^H=g9^gUx2uM`eCSpH;^MLF0?9fA99rtG|lS z%rEBeavSlV98J9!*JB@sxCM7$4Ttd{9>F@E!n1f0ui+%##e4VwAK?>xj<4_?&f+KR z;8*;CztN*bw3Jp+FKwg&N@@E#+C%&303D`dG)|}KJWbF|x=mAbpB_?+c*p+yQ+i3S z={?Pm)^ny*C{%p2%Ky(+pN|G}Rd-bLulntNJOMD+zC%5L#i3ozmS1fg@`_{I%60o4 z_liTi`Q6J|m<1OYr7YlzL5&e~i&f4N$>MHtr)dezSP;44VNQ5>zhFc#Y9M2cu~OO1 zr;Zh2FyP4JR_QhhBG;G2B9BELi#&Gn*e+1cgsEdi$ZlH?N(~o;j*+mGB_dBmo`^hg z^2Eu7X(p@)S#I-yC2nzH