From f07e524fbb147a4d02aa6d2fe103a4d8bee51a87 Mon Sep 17 00:00:00 2001 From: Gregor Lohaus Date: Thu, 28 May 2026 02:07:44 +0200 Subject: [PATCH] pretty good --- .gitignore | 1 + .gradle/9.4.1/checksums/checksums.lock | Bin 39 -> 39 bytes .gradle/9.4.1/checksums/md5-checksums.bin | Bin 21997 -> 22047 bytes .gradle/9.4.1/checksums/sha1-checksums.bin | Bin 30863 -> 30917 bytes .../executionHistory/executionHistory.bin | Bin 49514 -> 49514 bytes .../executionHistory/executionHistory.lock | Bin 39 -> 39 bytes .gradle/9.4.1/fileHashes/fileHashes.bin | Bin 27697 -> 27747 bytes .gradle/9.4.1/fileHashes/fileHashes.lock | Bin 39 -> 39 bytes .../9.4.1/fileHashes/resourceHashesCache.bin | Bin 20469 -> 20775 bytes .../buildOutputCleanup.lock | Bin 39 -> 39 bytes README.md | 4 + .../com/gregor/jprototerm/AppConfig.class | Bin 9131 -> 12866 bytes .../com/gregor/jprototerm/KeyBinding.class | Bin 4198 -> 4509 bytes .../main/com/gregor/jprototerm/Main$1.class | Bin 963 -> 924 bytes .../main/com/gregor/jprototerm/Main.class | Bin 6359 -> 9697 bytes .../com/gregor/jprototerm/ShellSession.class | Bin 6208 -> 6338 bytes .../TerminalCanvasView$FontMetrics.class | Bin 1861 -> 1861 bytes .../jprototerm/TerminalCanvasView.class | Bin 13153 -> 13288 bytes .../com/gregor/jprototerm/TerminalPane.class | Bin 4090 -> 5221 bytes .../stash-dir/Main$1.class.uniqueId5 | Bin 963 -> 0 bytes .../stash-dir/Main.class.uniqueId3 | Bin 6359 -> 0 bytes ...inalCanvasView$FontMetrics.class.uniqueId4 | Bin 1861 -> 0 bytes .../TerminalCanvasView.class.uniqueId1 | Bin 13153 -> 0 bytes .../TerminalWorkspace$1.class.uniqueId2 | Bin 841 -> 0 bytes .../TerminalWorkspace.class.uniqueId0 | Bin 11295 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 26141 -> 29095 bytes config.example.toml | 1 + devenv.nix | 22 +++- .../java/com/gregor/jprototerm/AppConfig.java | 119 ++++++++++++++++-- .../com/gregor/jprototerm/KeyBinding.java | 16 +++ src/main/java/com/gregor/jprototerm/Main.java | 64 +++++++++- .../com/gregor/jprototerm/ShellSession.java | 15 ++- .../gregor/jprototerm/TerminalCanvasView.java | 20 ++- .../com/gregor/jprototerm/TerminalPane.java | 9 ++ 34 files changed, 245 insertions(+), 26 deletions(-) delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Main$1.class.uniqueId5 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId3 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/TerminalCanvasView$FontMetrics.class.uniqueId4 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/TerminalCanvasView.class.uniqueId1 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/TerminalWorkspace$1.class.uniqueId2 delete mode 100644 build/tmp/compileJava/compileTransaction/stash-dir/TerminalWorkspace.class.uniqueId0 diff --git a/.gitignore b/.gitignore index ed72e43..7f46a51 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ devenv.local.yaml # pre-commit .pre-commit-config.yaml +build diff --git a/.gradle/9.4.1/checksums/checksums.lock b/.gradle/9.4.1/checksums/checksums.lock index 98fc7a5677a6e1bcabab90a0ddb2ffbef3f522ab..21b162513b700802a14a23ae389273ff91634be5 100644 GIT binary patch literal 39 scmZSnqqyGv@x_|y3}C=m%FMvfux^I9-O&f%C66<(8XB1!8!|8e00(>v@c;k- literal 39 scmZSnqqyGv@x_|y3}C>R&&4W diff --git a/.gradle/9.4.1/checksums/sha1-checksums.bin b/.gradle/9.4.1/checksums/sha1-checksums.bin index 8651f4c5a0a2345f96bb8789245c4c51255d2a32..163b8e6246ab5f894bf4d28ee7a38c9db2d8cb8b 100644 GIT binary patch delta 59 zcmeDG$awT4;|3E6#%GgFC2sPEIW#YRAbFbs3@Z9Jvr29jVO+RT@rU?Eg9@h2jvjsn NlWX(&ChyPI00683799Wp delta 35 rcmX^5k+J_H;|3E6#;21_C2nq3lUyaj*tt>hhxkT=2~3+EJ^Ty+5)uv^ diff --git a/.gradle/9.4.1/executionHistory/executionHistory.bin b/.gradle/9.4.1/executionHistory/executionHistory.bin index 1a9b6d6be246d3737f179de2c4b1c68256a8e71e..b89587b22af05f28cb06610690323b4b0088c75d 100644 GIT binary patch delta 844 zcmaFW#Qds>d4q4JZE0y$Qh8!Qc5z->dPYHIVWNp~Qc{w6X+^2P%oVJ;XL(Bpb90N!O_R%vP0CEOEb=N-jPfSG z^v@NDl9Ty$Vfx$1;MWOPk~T+IPIfG{+q|H#la;V`&+;6BqD!2T>kl1{WiHr0<(P%b z*~t$}O(vhI=A68s(0_Aag%hig+ggmLL)#(J^I^CI{rpRBzu zAhrK~UiJDTb^qC;KHcZ4FPOZc?w1hzkx5#6zU=?}V%@5bLH7eI3qPDCpfjZI5Quv+S|LccH?H=&(Ho$%$^^Xbhdr|Qjlv5 z8JC8n7UgE{U{&f%*hL5 zgnglI=u7zhxxFg)p>F^F>3;*CctBLWNN1c3Gc_PFFBRtECyUB-T~02)5W7Y2a?Ps3 zSIuBIJk^+dqD7ab8yGy3f41m{fEdq=H$*Tq2&`N&A;mMkx5&Hpa@LNyv$KFgo2vKE zK4Gi>e65IUNr}ePt3aV&o*mU6OBTfyY>Kehb}X_FC^TKweB*@Tt@kIsdw+7FTwmno z#yB~~$+Oym6x0d4q4JZCavHUYb!-abj9hQBrPseo9h)S$0WwWoE9x5?xQ(bLa0oVSn>I zXZuC9Z>|_3lP_etZa$y+jZLA*RJTHQ8^2yrk z0%ae*a<2+mm%UAWi{e6tw{IqIsQV@K$G&ORJPu)b+X??>L``PaVO#*#Gryj5^6mOy zp^&O04*D_y{wdYgZ8bW@weB8h61 zmqHu6df0Woyu80Fc=_&?cb*xqcAxyS$zCFH@dGvC8~5+7FP!Yy&-TFV(8*o5pBX<> zm>kfYRqt$=(!#NScXg-L=f`?FQ;R%+A>Do0yrWmz8tWVFQ|bP=R>s~l>mJy`0|tys zLsE-!GxHL2oD=iP5{tt!Qzu)th)Ug#SIG3@Ghb8mHj?G|jgo6i!EQLp$2fEH!Wdy+ zs2da%RW8rWGcQ>7_KaIggTYORs)uQelVPR?B<7{UT)b%V(<{+|$IL&s#~s|Sc5KQm zup55KPd?G2%d!z@!Q`JU`XM03Gvf^r%nSn0D<+4q3Q9h?%VoAl_*7aDP{?p{Q~XlT z7w%W&cF#LI< zifaO~A_xm~e!e(8;DPq3c!vE4`0`9DG1R4^>BVdDc??m2>K^ z{C0_8vNy8@>$ra`2&{oYT@q8rUrvdIiJnKgG-fPWGE?})-(6rWC-TD}T6lg<{gyH7C7hZ~!YhZ@wC$NbJdEbI-CMxi7V<_pExwzm#xysKkiwgE)6S z$b~?lR1YN3oNE=+=5#c0Pm|Tmx%zruS0W*H2i*f}VBlXi`M+nGLSMq~&+S#Y4|V(Z zPyZYE!~?A80k0cGk@1VkQ@vaio^?p^m#mG_e_;PY%iDkcGpHgzh$7}WlYasgy>ity zXnUc$^?AyMqj&Z!m<3jJe!+Q&BEh+nW4+bu&oAVL@O2D;G@64s=J8&VGi_hC|KRGs z@}iHfK}=XE4$)!cgsH>ZyR&xVX5P=w{!GlCAC`0$tmCAAJ4A=XA#@#+nSD$Y7=KSW zKIwE#<|%BaO3Qrc5>AIX;ej#>?;N_ZCg|DC{H$zMo zNu9jgC(;(~8)i>*n-m4q6+I24I`(xt2v6Ru#%)#uwFVmXh08Yw`tFen3-8(!rvK$$ zUeTMYTC+Aa&xfjlhCjP2rnyCzI3?E~IvmSfuzkug3m2fDL4f%MnBolS1k!o{=C|l) delta 713 zcmaESgK^^x#tkMCj5{`)N}OQXEGpZ~!x*?x@rU?EgA;6e#taM$nn0`w!UEghoiMy0 zd^vv3!TK!sB{e+^42<)#(%5x@l0d+gJXtYRIM5+`Retcc`O|II2ilnM9s#MzZtjVJ zs8Oo~(rBhmU$sHlxkbR^@`Ep{K280?12#1~~e?><<*!v zyyKMToe{fetIQ3@R<4M_PB%l)s9VpntTglGXJm1yL}>U;l5$^M7If;puR1haxCs@ zK;_{Or6;sNmzxYb7HY`F#x;pD*h=1r>~*{8#FMfKJ#_?h6WQ?m`9UPrfRxAfP{G zRacyX{zZtO|JTWHrDq5@)YvXF+ua=w5e#IVTr1O{5mdUR?`TrUY^e5wFjob4t>M31 z{9+PRyms0CD6;X0Bzb;IF8yWmM;Y!lx=t@i#k{4VhZbXQz zw7m47e*S)zloCuOQv2`cRj)r%_n$rL(|xY`0!$U`Mi*>6$2KgV^f~msV zMefY17`=qYDt`rDZ`WOlsp5LEiFQ?)^73U((@(kGx@lp7spR(ahwElFm)(?14#;t> J{AU7E0RRD6r56AI delta 60 zcmV-C0K@;Mq5<`v0kAX}0Xma47?6|o81S?G8Bqa~W*gU&RU87{Gw>4>JQp!@97yvzP7{Gw>5;Frs!@89be% diff --git a/README.md b/README.md index 43dd93f..a9269bb 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,8 @@ If `XDG_CONFIG_HOME` is unset, the fallback is: $HOME/.config/jprototerm/config.toml ``` +If no config file exists, jprototerm writes the default config on startup. + Example, also available in `config.example.toml`: ```toml @@ -60,6 +62,7 @@ toggle_floating = "ALT+F" new_floating = "ALT+SHIFT+F" next_floating = "ALT+F12" close_pane = "ALT+X" +open_font_selector = "ALT+T" ``` ## Defaults @@ -69,5 +72,6 @@ close_pane = "ALT+X" - `Alt+Shift+f`: create a new floating pane - `Alt+F12`: cycle floating panes - `Alt+x`: close the active floating pane +- `Alt+t`: open the font selector - Font default: `JetBrainsMono Nerd Font` - Kitty graphics protocol parsing is enabled by default diff --git a/build/classes/java/main/com/gregor/jprototerm/AppConfig.class b/build/classes/java/main/com/gregor/jprototerm/AppConfig.class index 24abfbb69cf5bf9f23862d2143b836616fba79df..96dce22692179b12c78097adff963820dc7ea64c 100644 GIT binary patch literal 12866 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 literal 9131 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 diff --git a/build/classes/java/main/com/gregor/jprototerm/Main$1.class b/build/classes/java/main/com/gregor/jprototerm/Main$1.class index 068e051a6a31f644ff226bdafccdcc0b2c9b1480..fc23ee6b28a9bb7ac7dcb53250d27673d162fb6a 100644 GIT binary patch delta 401 zcmYk2%Syvg5Qe{#q&aDlwoz-VwOTJ#W9lWYMY<5TE){WWK@mi&dj+2$WFdktA=C>l z+_-b)6N%GQ)B|V!IWr&s8RlKz>*~kX>l?7mx{HCSv3zpa$<0oX$04tAeLQ?cJv~>I zBz9c;^62=Y8TTt^s+z=B^4S)+%&4Z~Q)Nt18^D&S@RQArVvPw+-Di?vMJUa%ps>50 z)5A_z(FlK>(mQpK){Whq&kC#QtMe04O0*%_7G_o{MXmi8)ZQaH zdZzG@fzuLgl*C15Bvu9}v&_j0N|~jiDS1w?>p0P8LhT8A7&1Em_ktYgwgCEb0p5h|2i}QadaV delta 384 zcmYL^y-veG5QM)oiO+TnauRUBBoM%a-~spA!BOvi# z(9rQvh_waEN;kW=w>vX;r@wUc{qyk&9I)kLF`+5=6tNZcbQHPqwj#Jbzl=?+c1jMe z#`7uRr?unseK+u!W=0eG)Tk)h=_oWus^Tl`VSjMZA1V&bgKDJrHR)H)r#eeb%Y@d6 ztyxz@B2x6}&^1@q-i^hScu_%+S&+(-Q)X83T<%c}W}T$_jOv`ep?kgLmC46^G!nE? zf(_;c!@u>q+_NaNz@of2rFMn+HULplEU_#o3Iq0~$RwQP3H3sC%{}AQfxRl{ diff --git a/build/classes/java/main/com/gregor/jprototerm/Main.class b/build/classes/java/main/com/gregor/jprototerm/Main.class index 72439f568607bf55f24b8d2efb9f1a1ac0f8e1fd..e05e6bd12da4e3353aa50703e66c7df25d4b51b8 100644 GIT binary patch literal 9697 zcmbVS33yyp^*?7a$(u}W+cZtngqG5llqPA?&;@Ks|J{<5rX+1?LQ0AdUuIsC*G^`J znU|zNpe!Pl9Ra0PL=Zs`l@^$m1`t6}5f?;pLq$*&P*L2K#ou|$WG0=oe*b*^=Dm0C zx#ynqJIg)y-ahm0;m3)n*;f%HALVJ}SCmf$OtW|BLwfJ7dOaSGm?7OVW6}DxWA97_ zE6u2Btzycns_qO@fC@DVDk>tybV4XLP~Vp@`eKRt9q~lWidjZtK*l%5qP=DxlRpyE z!%QbuRkt34wxN(F(-e)06-}iQrsHzcx9MgSLWNxZbC1bZqf({?xtVo9S~IFgw#5=V zlW{#{1Zf(T2{JR7DyxpkySh_^u26Iw&15PZ_Si5@r0x+jHfVG_Q`OPsYt*Adda~0r zhJ!SVP7nd-Fttr2;E|L3kDAO=bRtzUDKVn}BU3WfOfcM=XG}b3a}v|>u1_UHM%1W} z=p(T~tG?aRLp!(VQA49Drm0yZn_^)=KZ|Mm8udOh=6MmCL>2%aPGd2WiJ}nY7 z>X~L#os&%}OdG^y7t<1rmMU6Cr@*ZyX2&#X*bH0!TN1Ijk+4Q!ma*x33_Y5xhmYG` z^-ZzCo`~U5+Jd}KW?0U2@`Qu78hUthG%|9;;L`}etyJ`XggC2oB|Pekh^!tnipW|} z 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 E0mMDHEdT%j literal 6359 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 diff --git a/build/classes/java/main/com/gregor/jprototerm/ShellSession.class b/build/classes/java/main/com/gregor/jprototerm/ShellSession.class index 9a4d193e05d9216cfff7e355c7d5da1bb8532484..95437f4a86d75c71ff83cf2ae3937d37416590f6 100644 GIT binary patch delta 2697 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

1NKlPkF}pUqG`mp# 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 literal 13153 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⋘$C!qw?+_MZgT#asZ@iIQcU7Qp)^5KCOYAl4eU82Oy0VB~ETUJ7=r!Bp4}F(# zTR*qUQk5{g`ZeGXu7wx9o4fbY%u2skJilMVZi4BuKR1Za&J-v5Xs1wa-Al7TSqM6( z&F}Slf`y%f--dRT(C*kvM-Or>3>Nx5g`Kd{LVvFCLJa0GAbbeYB4D(iwPtw3)sEsC*O9x`V!pH$y4-I&wGItJU~jd5>PO>o-<1}=r&mQHayC3pm7l#nz*zHb5eXkyA57{?gri(_Wfzkgwc$kZ;+Dn%nks-+sPB8o$%ecbux;o9yYm$QOsmepTkq zDfiekWiFYboiQ#j9^=;#_BTk>eg|zmhj+k#gtvYkdEyK3)-S^6zl_-a3Y|x<()si! zc&fh`H7v9zIH-o}0I5@ou*E4$tt6UCUb#(iR;&-JDl1%9`M~|TEjg!@dp1`-a4XHNDz7YeZ=T;; zRqonci9ad1QIcPf;BS8GrOMSe@Kn{%q^BeJ5T4n%=?&P_n+RBM!GXSwiT@o5^BWNR z9Wz1MJXmy`T4g4K!PROAj_m<0P-{?PgL_Tt19(NXk`K|bJ|&x8N9fgf}%07vZXZH_7k6ih@8l~?9X@mqH2%`eM$Lhrw%WJ2$*T3uPDQ~XcK zPal<-`3L#@uWdi?)fUXEDV$wXB(d>>n(^}UVNGdS!6S6Gzp$(z#RI$jZn*G5e-XZv z+U>XSWyh_mHraWZEh0;E8PY}|eFbRe6{?e41(l=lYdEr$w9*W$D4bZ(*3Ex@` z_i`LwQ7xu}NQCc468wEyNe{qG9zux!0d_wRBfS3*0sTkl^$1d*N8t(|V>kT_`^3l1 zB3}>eRnl`Xi!)$^i}6D7klF}8(}=zj@(aQBLE~wQz`NgU#>QiWyGS-;rI6)i<99R+ z_kDGy+9VE^^U{lrlDI{H3MFxifCA?kw+IJ`k|btukZ6_U8EGF%XQ@vhqRZxP1C4uM z^45(X&`gVWS$yRH{Cy#;R06-`0Q@#u?Iw%gv(tg5oQX|2uG0FPiS;==fZaH$Vml_*J) z1okEAxuWFEl}dOrvJLFh)n+&^`xK(aP!mnbOd{^#Q?P|RtB9^bMsW{Uia2cc*mi^} z$MQ@emkOX>sW#XS!PptuRXa-9Q>#zH!-iC+I@gpUs#`^!x|oVPbxF0&DQ#Eht4q-n UFHZoNe03R3QkSbM)E+APKdeuiA^-pY diff --git a/build/classes/java/main/com/gregor/jprototerm/TerminalPane.class b/build/classes/java/main/com/gregor/jprototerm/TerminalPane.class index 2b79a1b8afe799e25e0c164822327fddb2d9b3c1..b860482c352e118dc65ea5ac875fe183695031b1 100644 GIT binary patch literal 5221 zcmb7Hi(3@e75@$F?%*;CA}{5kMvSn4Ym6q1t0sW)kpNmD7&NgC%g7EcJDc4BA=*eD zHc8WmX`7@;8*88GJK6@c+Qu}twqL*gMg8(M{hd1ltjl7fe#@P?_uO-S_nhB3=gz$uOr1~h3{yOhR*Y1ei{N0D<4&Hj@!FWyh@!*Ui{NA&qZBBUDk4!Qp4~sKG9Obv6g`_gY%GZ`e6oQ@y-!Q`GTG-z(eWDgiL(6~I+~Z*F$Z4qB(^vbhuo0fiL6mk_np&T`ag}#yxDA!*q;>Orza|F%28?*>u<|8m{SDbCp9v`K*EC z_=<+*r)=i-zKoep*l{wsdQP({W?r(HNtN=Zfgvd#B`1@P>GDVt)?ot{n6%m?e|uym zVZc^1Q}TAoKvLd^brOVrmrd4)asTiw0i8%XBwM zlE-te3;2{cZ{TZ^CBb;o$+EO>!FdVa>k_^W9dEEOEySr~+;zG{&Qzs$S)V=C?yJMtJmorT5W!-kl>Kz{&vNHXi?TT(EZYBrJj4ki}WWY_>q`*>n zc}JGf`|*rLQfX*b^}28_=j{okRVNF$)+F6pk;7rXdXSKPt{FeoW2O}-9q--If;}-E zKh&^l!Lj`bb{p?t!J#Qtk&BLX>bOXhrb~T^yJTN(&N8YR9xj*yi=F;tZsx?q-MkMR zC0)sxy?%-?1kFc9X_%7(b4{0WdkAgF8BYz<;d=8P{u8OPq&YS;Y&LnIo3?Pxzf4d= zpEI6`TYGJ3+beS&yIDLzH+4FWn{}DWJ(inrhO_0k%xD&1eSVvWm4)z!F#d>-bj%o- zm3`~-3rYSaqMc+-9qV$&(kut0Q8_xwg7}kkn(GFB&9@N#9L8Vpv5uPtKEYpEI2WR3 zrzV_JRo>|w`$jhM`S<=NPu0}k)coW~@8!f1FYU)W4 z7O5w}Sd3-(F23g@Izx1VXv3PiYgl^?8++QWqZQ_FEgjvj4UZH#-7pPl+G)6u` zC{?E)>5yG#W|Q-x!Oi2wKI5|X(_5ORjcDS z&O4_OZ{r=>{l3yt^f}e=E2mV)yE-K`9Y6RFu?V`3yQ6#b-q39&x(A7F8_{hix`&oP z_dYHbLieLP(OtrieRNL~wFJ0UDAXyQi(JQE3F3iPBJ5e9QibyIBaGh;M(#1DLPrjU z+IbJvs&wErMy_7Im8X0wKQZLVcp$i@^$x;7*;XREB*yn#<=km*@DN43He; zjl?&xouhD8bcbg#@ClACur8#Qo={p1Pt4b<$^DJ!B*oGk1x2;EVX#~AXco`3-n!h= zdaLawS9O$QB_&oekz~xp-pkd4oIR9drP{Y5Y~dCBb1oMtws=(WOUO@%Xb3;$UqKP& zCm(AgY!rD8Gi0>-c4xKnvhj%!2nt_{hZ zR2i-)2&6n8$TJ0j{Gu?B@_ZmC2*g|hh!jupfQ1kILq!RG&Li;;^E@(K5QtrH^GN>Y zM8VC;f}2P4Hzx~jb_#AD%io+XxcQg(m4D_ba%&lnS`*ncgLtH61|yN$;0#71wfYRk z798poRF@7NM;H?%=xG+qNu_=pXQ^U7$~E$lpn@_a{vwQqizulIypO;Y(zCYi5*j$x*Iz;v$8^IbEa#Z53S9CeDhGE2RUXyV zH&g{?F~L<907Hhl`dK_LJgt?^RWF?@9jRhF%Svfn9c1M$-4WurI;4vCPPjZ9_&cjc zFZp(}TmWa7S!bDIFR)0SW08CbJMl91vuhs2dGh{MJd4-J@z*iJUOt95@Enux9J{x4 zK+jLp^M0CEEl4Ogty+-e&a`}6DUVId=M;;fm(-z^SpOL|u)ZEw#a{|7zxe$y?((Ty z#si1>tDMDGXED7HJ})sZu#ml(!-z5;iYA{$zN+KCsyfewqOo%puS7JzZqMRXQJdS+ z-eT3grQVErjp0?X4X=Ay5Z9%`+3}R%* zPSSK2Z9J-Uuk*Ied$J5(Lkg0czhP-FQeG>8_8C^_{K6}SS6F_B-_x8l+Z&ww5Lft< Vr>nTe-=|y)6WT5O9sj`U{{ggwem(#I literal 4090 zcmb7H`%@d&75-L8S`cgV2rnbRi66BP5XHo)6TrBB#E%+`YX~+tcCv`Iv{-1B)e4OJ z2yN5m(Ij>H%1`n5xBQZs#xoVpG&4=7p6L($lRBNI-?_VhtcuoVW_5P&-us>Jp8K71 zmVf;F&wl~%Dn5-NggPBz0}(_uG%uMeW-4dqGpVVCB`fV|h>qEL+Z)$Vm*}6>QLkY@ zO)7bIE|qrj>5}VOc`s#p&a$0Oolxeob<^T#+KNF(T>~0n=-6doH<~o;OFPS{jB8~a zH?>r79nbMBcR4k~A3Ja6E}3~t!)`8LwA|^uStw>5@)(+U3b&);vc*6vp3$JM*hPCG zM^J5E#@h{api@J=xD}5Yx+fN`mDEzsUdUvfqUWt`u~A5S40Iz-q_mSOE$53wIxk4Q z2Kr^iH(7@oy*I`$dZj{_R^?u0m1@N7pgLe5PM2NUPd_wVREm^&K7cW_8Y!azTg z8ak`7&-$#%#3@*L4aXAy7jkE(^wx+$QN$3pu`|*rna|4Hlz|sSJ-Tb%bgg1GhGD#@ z;jwLKn8d%{0mrMzj+wey)#!5+rT0`dxHCa#_ApOv7G8W_Vd zdMjGRA|t8cz(j3DO=qoKZrY#4O&!Pgbeu47Qb_F}!pbF#W|1Nk37fhkdQ{mqx7dwbF-#v%X2Uo_OfYl(38agq?$(vsF47$5weC!fjqGN$Q?Csw_K? zvP@59nUu;h9hGGgD$Bm2Ec=ME%tU3GdbDjsW*MfZH9ozAI)rHtBp*Ucehq!@AsWhv zCBtPjCkM)COZJq}mFz8}=Yc}G!{0t86o?j9oLh+5gFWcwcpp2}Ui^@6lRhqfgdg*X z9@IWHbteo%>P|S;p#eX^+X16I*$JcW?)X>O`xOpOevQVt!S47&3|t)A!1F_2@@)vh zqgBn^$MyTk;Q+dDu)=q@bXd+Jmh@EOH=sqa2yu24>tt5PQFfHT_g&(O@4n=p&^9;u zH!%YnIGm*0!AGB?{^H=Hp>G~=mX3CM1FyKUb&5|1xr6;w=kA*@!1EepRE89%4z=UH zt$6g|r}!ED{#>Diz9kI5ni_SyqjRRFDawMc8AGsnCxC8yCXZW zdk^o|V)w!0?0$t019szNEoT}P)r@RwMLq|Cqm0bU6`rD7afm9Nv)4!y4X|Ddu$p-Q zBY#Ju7@otpp!$*CO$&^2FJs)xcm;Cv7IJe%gn7=ATx=VGieUH_YWULvR85*J*-7pcXoW?G$YgFpsbvG_2OfPnIq+!k8@|=iOvQm$o3fSMU*+2~ z96ej%r6cennrMagEnkO}CVW8zwc#T&n!?BY6&5L4*+_&eCcof~pBnxaE>wU=wzlwV z+zl3QA6mSO$?8L!;-Out2yNw|Nl_BVtu=`>R}-18N#v8-M4GFKTp^LGI}nkoC`2yf zH~jS@BDK|z$fZA4MdVsdBC|CY&r~mdqvqndnv1VgFHYB7{CdsB^VN$pH5dODzYF%f zMkO|ItDVV1Wn4=3mobyM+vc&K%Md> zs6yE(Uw}&No$~b;%#((r^F6=ad>Yy?-$-j%kKaRc&pjBu_fX#+{tV#a>1_{hAkDWd0EU=&&jvC{>a&bTZ zsW+tn?uoEIH;zPU_e52R9)qV6W|jMqrs^l(ILig#GP8=*Ziyvug(Yx}W#kUdF$z%Z29^;eXG;zZ*UTqs#+Q9Pm@%h#CT^6$UDiqNaP|@Vu zHGsMiK*jwK3gXBH-b!k$&OWjyu$7JLL!RA7g#MT*b(eekq{2l!a3Q;3F_oPAJ#Rz! G!+!v}eGyIo diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Main$1.class.uniqueId5 b/build/tmp/compileJava/compileTransaction/stash-dir/Main$1.class.uniqueId5 deleted file mode 100644 index 068e051a6a31f644ff226bdafccdcc0b2c9b1480..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 963 zcma)4-)|B@5dIb@2j@wTs;$=AqGCO0?ddbdXh@B1D4LYe__)9dOO9RLJJ3h}B@=(e z2mb*7DB~>9^g%FgvNOB0-+VJWGrxZS_zB<;VIC=@9b`PLAj`1T)uXU)L|>b5_}1t| zC&G-v6E0Qx5raSBQQ2Cg;!#_Q_YBp>Vwct&Rp)BLV~ef1$RY2*^>7IuLvhF_JRB!7 z3SV}HqMO7F1tZ>#r4dc7n&T*9*bN#}Sj1I-4y#rEHn}KZ)q(G!h&6^C>+|MA$dw%N zL~0d2J3qDLNEn9fW2t2FgdrVN+Agl*nuB!@8`eAc-yac;5vphTj)En1u%)Xld0SAU zN}C~5*FC|o+K@^#$D@ugE#8U9vewXDsyjE*-si?lGLTfc?Ikg0t*cS07FT{qJ^lxh zaQ=x%2Dc1c^m7%mY$M7RNY9& zQuSwa4k`?riwkSrJnUhgVI@wuNfqdJ zVw7l-3pCWs_w6jxDMh=8>!fc?hn*(fTB`eB!1i8$hjVsT{f5h*rqE52Sum2faFgWv z+rToAicvJxCZUy$c;PM*VE fl*v1Td*q+OF7A`gAV3ulrj`H)q+P<;U(xylFtF+$ diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId3 b/build/tmp/compileJava/compileTransaction/stash-dir/Main.class.uniqueId3 deleted file mode 100644 index 72439f568607bf55f24b8d2efb9f1a1ac0f8e1fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6359 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 diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/TerminalCanvasView$FontMetrics.class.uniqueId4 b/build/tmp/compileJava/compileTransaction/stash-dir/TerminalCanvasView$FontMetrics.class.uniqueId4 deleted file mode 100644 index 37dff2de2b3c37c1d0970ceb13443c1b3273bc80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1861 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⋘$C!qw?+_MZgT#asZ@iIQcU7Qp)^5KCOYAl4eU82Oy0VB~ETUJ7=r!Bp4}F(# zTR*qUQk5{g`ZeGXu7wx9o4fbY%u2skJilMVZi4BuKR1Za&J-v5Xs1wa-Al7TSqM6( z&F}Slf`y%f--dRT(C*kvM-Or>3>Nx5g`Kd{LVvFCLJa0GAbbeYB4D(iwPtw3)sEsC*O9x`V!pH$y4-I&wGItJU~jd5>PO>o-<1}=r&mQHayC3pm7l#nz*zHb5eXkyA57{?gri(_Wfzkgwc$kZ;+Dn%nks-+sPB8o$%ecbux;o9yYm$QOsmepTkq zDfiekWiFYboiQ#j9^=;#_BTk>eg|zmhj+k#gtvYkdEyK3)-S^6zl_-a3Y|x<()si! zc&fh`H7v9zIH-o}0I5@ou*E4$tt6UCUb#(iR;&-JDl1%9`M~|TEjg!@dp1`-a4XHNDz7YeZ=T;; zRqonci9ad1QIcPf;BS8GrOMSe@Kn{%q^BeJ5T4n%=?&P_n+RBM!GXSwiT@o5^BWNR z9Wz1MJXmy`T4g4K!PROAj_m<0P-{?PgL_Tt19(NXk`K|bJ|&x8N9fgf}%07vZXZH_7k6ih@8l~?9X@mqH2%`eM$Lhrw%WJ2$*T3uPDQ~XcK zPal<-`3L#@uWdi?)fUXEDV$wXB(d>>n(^}UVNGdS!6S6Gzp$(z#RI$jZn*G5e-XZv z+U>XSWyh_mHraWZEh0;E8PY}|eFbRe6{?e41(l=lYdEr$w9*W$D4bZ(*3Ex@` z_i`LwQ7xu}NQCc468wEyNe{qG9zux!0d_wRBfS3*0sTkl^$1d*N8t(|V>kT_`^3l1 zB3}>eRnl`Xi!)$^i}6D7klF}8(}=zj@(aQBLE~wQz`NgU#>QiWyGS-;rI6)i<99R+ z_kDGy+9VE^^U{lrlDI{H3MFxifCA?kw+IJ`k|btukZ6_U8EGF%XQ@vhqRZxP1C4uM z^45(X&`gVWS$yRH{Cy#;R06-`0Q@#u?Iw%gv(tg5oQX|2uG0FPiS;==fZaH$Vml_*J) z1okEAxuWFEl}dOrvJLFh)n+&^`xK(aP!mnbOd{^#Q?P|RtB9^bMsW{Uia2cc*mi^} z$MQ@emkOX>sW#XS!PptuRXa-9Q>#zH!-iC+I@gpUs#`^!x|oVPbxF0&DQ#Eht4q-n UFHZoNe03R3QkSbM)E+APKdeuiA^-pY diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/TerminalWorkspace$1.class.uniqueId2 b/build/tmp/compileJava/compileTransaction/stash-dir/TerminalWorkspace$1.class.uniqueId2 deleted file mode 100644 index cae4c9b87a504144bf944af3410b9129f8d9cef6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 841 zcma)4U2hUW6g>kA3%IqkR*Lnbtz9j&+KndqqA@WAEGZvGusrl>SSGM^*&(w_{Xf1K zAJxPdWBLR9QN}xK6EvFCWHa}kn=|*EJ9oeT_<9DQ3MYpIk|qobDWnV8{ zl)J)yz_4R?-guEaYVxT~*X&=e?71uZH&=<{dX^@+Y+(_32BT4}bs07<^ry#Pwr~Y2 z45m~A?Sdg$D%VXE7}m!8lsi5ThE7X%X6~rw34c&kN-8Z^v~W$!C0@VO@VbQ?v3jN5 zYw5x*3+uX&dR2dM&^58ike_#K_s8_844J2{?*(4;EEYZ@_xo}n7#15|AX>9YU#Kqc z`&3zONSFIZTzMLw7Z*AacTeb*&T+0IXUY{dPv0o~^|X8105z`$t}jC`7&b*Tk^>X> z7`Fd&J>fl&KC4?_{=H)!D-^lPzvQLkKQRJn~UiZ-FQNKyvWzJQ&5 z%YB0RQGW}cv1GL0!8nZJD#6qot`SVn;Z1^O3_rj?7AsiARTN3%F2!v;#3PE2@f;P3 xN!%g5bgcTG7@);~SU>@po=J@6p9l3U#jG-RC>q$M^L|{}#U906JQF4P%ugy{#ajRX diff --git a/build/tmp/compileJava/compileTransaction/stash-dir/TerminalWorkspace.class.uniqueId0 b/build/tmp/compileJava/compileTransaction/stash-dir/TerminalWorkspace.class.uniqueId0 deleted file mode 100644 index 9774dde921b8fb0fea2f3e5e6b0f027cd8c027fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11295 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 Ol$WT7)FbLK)cg@Hd*`J9 diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index adba47dcb0ba42fab4a0e4f383e5c3667a0b50f3..50a8bb1848a1f4cb3110637dd3227089383901f3 100644 GIT binary patch literal 29095 zcmYIwc_38%_y62G+npKJZQu84uW8>`Gxkg-Bid^)7>yatP_)|jU81s8B1#A)p_Da5 zNm){sqNq?J*?#Bh`FwxRACH;2_rBlfefIM@=QfHYM1&}Z%%O0oBo`C86^-O>t`M8c z6?BrfrL{tCBexMNtT2)zgXC%lR4G7xwo%FwusrG~1I zJS7UTi4Af2*hOu@gm`luFW0DNDwl?nMzKd5jWIxRk_W6Ok%^>ZNuF}W38l5jL_Ch< zv>F$8jC=fpUB$OpWO(?&k<&)w`RD|ai%25Fk^W1CK_%xTFYvp~D^q)yOjMt=8=XvY z7TZrDxywxCreXzdW%x#MMdR!0BZEUVemb50Qw3wD!P7D^{^`c46>7zC6-Uy>R-Q{Z z**2XwLlvD#a<;afMRJqN%p~SG7CGwmto81(Pjc@J&YsxxcDCUh-k7;0H<9d=NI8$> zA`zd){f_tlazA6$xWfNQ=-}Q@TJyP+*d%v}%v2&X$J^AGt#bRaAidQzIsbiD^wkCI ziQ{l_taudryZki-l8T~{6G7^5N*6@W6*1u8Zg8J9!Fy1jsU(s+B3R*p zkUXVex>h5yhGl0XSZq_#T>nt%pgyd{v?+*(p_IO9&Mvk!~YA^>|``sT`<;9}*D39YpmmqQ*&t z&BdoACgOVt$;$?e+St}ctV{yJ74lOO(DIQ}B_qNRB!%FlL?-)BjqW3woK*PfpS6zM zmWHUMBL)u;&O?MF&Hyf(%1vwuE@QGsu;PDTMns&67(7OFvfw@pla2h6jTqd5eYn2 zPmg@9L4>s+9jp#SLAa}th2A3u^$0fv`2bJa+StftA7K}J>wgy;5cNiczoChcovl** zPeGayjgy~+Tg0OSR_-n18oopt;GuPr{6|sgL8Zz zk?zQkBP9GlG&&H&PDI#+sQpCPzYvXX#4s884Z9LH-vc}pnb^qTc;7$?ej_~~Bw#@= zB0Q-zvi~1M*oPQ-BY)wn5?MdNrZaE=5XJ%onMfiHfc_1_uMmSr?jJ%lh7o}S%5g-& zkWo;7!cAb#C@8s|So-Oo61boOS5(shaYIQi3W@1I>vl(Z9w^5Xp7Vm|tRckOVDbO% z_eKqUPy=6-V~WXs!%yIg{7|(J#GlweB$b#OLH{Kqp6Q>#Tt*E-QDF=chLSw3Geh@2n)ZF>j)fMdCW3jEN2G+srG zhQTe29Q7CcfjwOR-Eoi)1o6L>wZH+(1cQ|M%@C5GA$&GlMI5)wUI$w>D;}4)sy8Vq1wr)dJ4Md zKFUc&IcX>-9pyYgIn;-+xzbj)IRhm*E6pDf;!{YJR@k;o_-JMZCifVqA>ub)_@}}v zZu+xM_IqS$SBN(?3)Rj>x%ZJAxPdVBX9!-@yXDETAY-TXS7x%r_bwlJf~r47)i&f3 z$|5r7;y&8TMv;R49tcI8I|2{(n℞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 qZs-%^i^OPb-1HKKdW0e zWr$1>lp)Fz#l=z-5V&vf`~Lsl=lb}NG&wovJ?~!0U_^w9Fab+|3kbx`+|GtXJgwvs zD?2$G@i|~Gw^Q0FC2|`IapoZI))JYFi+D;D3aOnfJ^AqTIZGEVN$2~t#ZKI)dw{2b z4MM!6a*4T;xxMeSu5e_Gm7ceI*t0?B`{M@lhin^ag3-tsm``demJLI^?BoX(_F{9% zaKvRXEomA4gNXZ>&l+&lzS0-;(vOM(j2`R z8-ut?9LFM_w&r#g5;<*SS|-1w)x3C5Z(pUKUaS8&;n4B$w5^1W2>MvIYfH|`4$r-r z88dUvPf(wzicLaX?d>Nc9(J~tQY$)Q>~Vhc@OW=u_WYmCA5uh9OjXo}PDMP#wui-v zX^5Lta)efy%71;ycBOsP_W~_9r$v?1)kgCXPpPei)Ygg?->98AqT)kM+@T;O<%EUnr6DbyUq&CXUi7Z9nGOU)H@^*$A;-jJ1d z<==PUxfRMc^Y|l%)9Q;Y+^CEv$Gz5cID6kf_6(svCOvC*DX4G^_;w3l|3mO~9fG1m z&~eCo?FE|!f`x)bh?|Av@M6UGfJ|y;Wo@TWDjlgMh`SVyOOZ2jvAs2{hN4s8nPuwB zH?I(^6s!`gMm!IQ4~s32u0cE$<`P@UTEs(YYww_>#;gN4EhH#5V-z|a;i1^z5$F(P zz4`{hM!~90h^P4gcBrW+Is%=7j6e}|9-^wbTn%wQEU{I>RczFBWE_f(n1UfgkO|C% zAyW`_k%maqSfGV?NNj;_+K9VStd!^=XKcmx3Tr!fj)89qJT?>No6bx=0nt^}6Koc& z)<=BB_VzNVxtQTF$^h~C-(Rr&2*l9DNL47B9n*cg&B=P}R zw~9;!+XSn(!@iYbD+#rO0mVu(Fwu~K-A+Mv>g>|oE!ZPiy%*qRwneG!Lp;T{7BZLw z7DV<7#U^F~bAg3GBCr%#39J!Usht#LNUF4UFgt+w9uX_VX3P&8vxA7o0i~UdOon(I z7RwwYHi);qTxug#N)JmYTR^sr%ntGT?-dmGjSL17BZ$5FA>9RX#N7tKQy@NeHumy= zG6={*5T%KO$zj0}fyGh8Ln$_s!Ca1rJ99EH#WB%wbA36w<%c4!N=JW~KyGIa(4#1VAOWam zAiB-;9E<`%vOA(Su;{#jzd@+_c~pDD(hKkih>PSX!x{*35!DJt1t9?RB?eNsOwAd% zaT!(DyaJc(WOhIr75 z`7waDNYvyesuu<0D9U!=N;GN`jNU>KxBr3?g9`O-!(%eB($Y?DGq9sOsP0|Vc!5?d zjI*`08vx`Us^*2p0VEDm8L<4oxcjJPJZka)6(qn458r+%S6E#@zjKP$HLh=ve&rz*IS}qskO1*# zpy((Bc@1PMV~{G74U8{Gwcen@x2T{3K(B=PL5e{*s{mfP(c?Es2iX(S170+08Sxsu(10JdzXn7 z3i_&HwW7Zz_JaG*gX4_*uo=CmMjt9nLi=H)9UyKgMXyLp-*%{F_oSiMOjk~vwPTtS zCi;V(q|dhPLM(n`W??%s^)MsbEN4vD1=DoJ4Baq+J0|eJ1fH1S3??AFFvLyaV7uBI zLtGVBJ{XWhE>+l2>wMwV(h@v^vl!yeSQR?=Pl#Z1tO$ZdzSxw+&TtYc>Gq-XJXQ7_ZGK`nHX0M%!t`S> z!EH=%2NOu{VxZXu)M+eCzz7v}57w62O5!jeyS-R0R@%wwrR*dm?j3fO7nfiiUGRS6 zeM~$z=chE(P_7nM0vW0@ParD3WB@8vF(YAg4vA{;swi zec)-o#nZ%-i(jce#&lCKqbHbgDh3=$r7>7IBz*xmn1 zhk_~wq=}Uve75v*ucvR-hUL!Pb@0e2)j*BQC79+bOrsPNyoPzvGT4jRKlcpuR5_65 z=zq;7{i?aUH`3HL*7(<`9Us@;Z+nAjy~T_x7`6aTsAQHf2h=;#r$XZ5tT^$y3)Gg! z8mgEgRhY0E6TAbg*8qGDN~w%`53q}+a(bqH^yW6<_z{1yx1YU#`03(>^b8gIjsu@( z2Tv|sBkPEoko^HuPe*G3DPnLz#PqN=XBtUqbiQ~25$>a!G`0@YsK*Q%F!euZBO^zO zk1(@DDQ;pGP>Sh5!3-POc-KQVE9Pq}QU_1}gqeKC1kIRW)fd>DQVzz#{Vl z%#wsAe(Y-Acc3}R{%~L^+YT5nL!HFeuW*NJ%1g;(^1N6= zZ=qFgj&02;6- zFs;`N`B#(XMaJt7CdFKvVZGrJOLUn9RJp=JTpi3ZQ2Jt1ZF1J2{wuiQ-;-6(51qZr zG7e=KT*9uwieg)_mBb!)eF15SIJU5`;DR~n{&l*>_u_Ea1lw&)t zl)2wIZXCzbywB2zXNexL1PLs`Ll&r*L_qR^!#0m#7Dm$L5C>980N{Y;O$HoF%p9y9 z!`-8xum-}+88Oy+%hxud^1x^P7JJSHr?5<(uryLx{4|zUI!joARiRlZ)r5UP>DOHy zW4vugBTE;|4mF}WD>GR7Pg&ZTEWtB|Q7)m>b67y;Xm9-pqnExg%9vVm9ba=jKknvC zt5I1jgKU<`iX0XbDS;$O2AYQ>1!3HXFP5j)H@*Pc3)%hG(o(kjLBm}%_9%5scO z`Mp3=;xcKAwGFy{rsc)WFIlSjEY)rvG3?eHJY2b*OhLHF-h_OXC#_gr^ixJs>lnOxxOC zlpm^ZBo|rcxNYdE{QH_^(t@^P^rfLXw=x4%+S22*oAzve^|p+q8jY62>@um9E#u|V z<60gy%w8S1X@PI&G}Y^?>dH}i4taaY>C(;h-HF>Qo^(_%{D9JqSq861{9dEI_qrPYW$3jIxumhZ*0x3N|t67OG{7<*a1&k zp+@h`oZd1ma_B9I?W?Wt_svj$#}d`B^xiY9Kz#sKKWtMA&^g*FttCpSIsMyiP~nZX z_+=F-D04~8(8X%tZg4zf+j}fwo~WOPXp*zNIo;{cgR7aQ0}AS=a1E{ z=!(BGU2~bFGVjZ{W|rs+OEm`j3S;GRvEw(OE2v12Ye)LvyD>wD8N0l!aLR8!qh0d; zJ4^Ei%diw{0Wv|DCXoYOpFLgncGQ-R)Zh30;wJm1%xPtr>;ev}Ibg~4J-@x_jQCg67gfCW^}t1*ILOr*objd<47q`a zwdvilMprLB+*bQdOB`;qh3@sj)ibeLjNW5pQpdVJ|J{V07o_K(+qiq>rsi;H5g zv#=QCcR=a+;jjmY+#QG03ufIfc=9xtbZ-kyD114x!k%tS_dS$xqPTEru0}O`nbq-Q zwA#bB4_JJ$e_?L^1M>%=-u}4y@&JIx&IU~SKkj>SbL>X<3^kR*ql{LM7#(C3i0hxj zb%PirQ0H;P7g9Gesl~upFiH@!WaG>{GUAWHP3p(zm zlGqEl!9`q{i3Q`3>9Vu63c-;xz%X*DSVn99nttEw!hExxJJQ6*w*25+!i}7;%djW8 z)Cv+*bN0Sg4xeH-I8p9iHsg1h-$j(JDV}5KIwsjRKE^RE=tu6}E4cnu9N0e;KpU7- zdW=EqHJC$eV`d?yPaExZ?L4pZFrXm-J5_&aVHmD<9oNsq!T}tqm9;Vg$R$=t=*fM( zZjbG{OtL=(O`4VZsQdanh7WK-0xo!ngOisCARdq?&EycTDT*-a5iH^$lQE0X;<|(C#q;ZD4Bv3~?u-z- zoFrWM4o!x=GqD}L0yXK0_Rw23^^DcuEy=Sy9^-=5DL4ee|H*36vzIS-y+Y|{wdQE` zj57|XeS&MI;@T_H7;aZEmQ9V;HjHy7-Y8ZzJkE`E?@c?CjtetzjUfCfGsaR3t`Jz} zm-aW$Nly$CpIX{&b0jd_G7}d)!@=W!4$Sw@wRez-w-eKMcDvX4&1anY9pif&VJY(svaXX*Xxd0J$%O3TwM49H_pRNE`h}j#lRYW4V=7b z^LDSg_K7(Mh;L7nFLBL$Tu^`uR^4M!pjPJQd%ak$vaaDy+uo%d;oaMXxK|KBP_UvDS4~4-GlHN54wi})OrDY&lHbo- ze)CN4{fo_h+fR-v!-eIz#v5GsEiS0QLBGC4!Hr`)lx8f-f3)w%lGV=|!#Hn;gtKUs z?q90Y$D73*m56NLf6f_FiK|uN{A!>RE{wry0E=P^CK>97Q*kK$yvQ?Y?~c3mLj@*t zMfk<4_qgai>jMy+$$2U*?dg5kyt7${KJe%5Tzisxe_Bf|Zd!*MRABY6ABnOD*!1-w?m4Q)dIL&FgR^2#x&4-azS^DaE zGgh|Xx~({<={DeQNSs;8nNUzp<5%^*_8ebVwzBwoo|fk1?d`Z`2QFIi6UcT%Y7hK4 zMlbTocqQ6*qk&&KayoMQ7p~ih3x8p^Q8{gDdwS%WXTki-#b0jDTChg?8yC5wI`rY5 z^aQnd&Y^RAU$-wR@SphyHwk2c*vW<}KQDhy6m8R+^5bEPms%Gtbj7+Eg#r3~tHt*f zfmvCfEuZWe+*zrm(u0dKu`Hb4Up)7v#qpKdnOYVjRNhY*`xh7X;t==ufm|_3LPjis z6a2i+WOwZ-aa<7jRkh1%{PccY%ZU(vL>ae>{&sZ5p9=B$@^MX5mL7O*Fx8pRbRje{ z(I8BX4j8&>w@Sc^U6WeZcF?~K_^yPy8^L!c^gRf5Pr@Jpi^7wzWQn_0ACbUIYXgJ3w=<(5kHJvYz%TBqP4?5q-_Tn-KXB0$)OKmH>Cuk3c-E zm^6n!0j{%@3V`3{a*4#2ZvW!$<#BZ6f#*MERhK;GPYxtB&k>>(K?4IITvnsc_4-Rc z^_?O<>(>WgsM^zgo)BIj)GreJU_v8=5Jq5^2v9#t>m?L*8J@C}Lj-*VP9Vh~Jxc#P zFn=toy2e>=_UKtZ0;}d)8 zC;mleOsEz?Af5vux`i5jSGsU$v+BnHZv!_MD+7?(~Z7)^!?2YZPwO`cUOo z`kCTIaI2IZckfY*L+U?cy2!~s?$N^3g{dez>>TVHZ~vYeM? zel$ILtl~bQ8Bc6W#U228#EJw0@jVKuL&(8{S0SVIS%3WQZ;3tX;ABMXe_BxUkPvM> zNk{zY=ZZ~s&Fyv^TW~d* zF#e1^W~juJ6X=LEmAFm?dFq#S%%mnoL3IkD_Jq(+N5k<5oPO?`eLte`M(wfi1zsjW zVKu3QFpc2rQt7Zi$hkmf6?RBJR0%TG!&gi%-xz-Tiifv)1|fV(sQIumfoPB(f?OyF zhpc_>Ut)yIkgBx~_g5I4qfXJmUG26(3tr^;gbqJ@^3#!T&j>AdMp8b%ac-2!AKRpl zx;0n7X;c4mVsjQDO2x8)$E1+1${Bzi(t-4NyKAS7bzf9ZuMf4oSlg?aOMv}(0oeX; zYKaz(tw;-;bD;0Uy3+yt#b|yVPXF!?xVgHdXXDsmd&w757M{r?gsu2X0&?2G6HM~Z zHP&EemWp@Y%p-VIUqX)heaP8SRp+C2PwkFfv}^CZ zs6E}YUugS&t?yg-QFs}pGZXq}?W@lnHEOa-i{bu`+E;{TDIt7K2+9b-s&d%1g0ZAj zH~t0?D;uaI(AQj_q-e%v@7x_4eXHhYi1AxOt%AWqC9|-(G6kjQd0iM6mKSyjTOHXp z^}cp{6=4*F-^A(NIZa)=8WM8rRPU{#W9?2>69(@H-5Nsho&f9i0iKsi?I?LIUKPc`QdbIqV;iU*j0m^heuzpJ-zsO6T$yPKs4@w4yVWLc&>M< z;$Xa!cyiGxw}h3S34>+=yzF2+1gCAcj_wp*+^c$g*!BAxhE4JLLYV9aCcpCI>ysA& z*0+A^+7widjwtQL>H027%%Qn?;u+?C_9ruK?|mgi)z~)>D+e=$xm-FB=hJ#a@9Vv+ zvi3K4_9Sa~>h$>Ugjy#015oXtR01oEH?}_$YQ61D!_K*SA0MU&TL@7rUW(FfLG2A! zwBsyVU7wckA9HO`E3vhW;775jcHmJ3BpqmORK=5tDv6azr1`wHb8e07Ai!SyWYhxK z3x%}=@W@n7e>ir=9q&iwX^;5QJ%>2%$ODBJRG_=O0HJoPXI(sQaKj zj0oD;KpBp<_e|V)_|LbB9sb6d(uo@$|0RUIgl;bC&jRTjJkiPnm0@2#WY4>GV{9qX zN2vD`0w+=+aVC*7Q0yKk{kTBM``;(HAqp> zEV^XkFlyZ9W1DBcD7@YwpL5#a0=dnHI0rIzVenbn{i;pN@DuMw zOsz1yNE+6#f=RIdkdV4rJ~lCecQ$qO-RpB6v>M&2MrrR0ahJWk56qmwd#-n)p>0

ERtpP)*y-;sdyaOD9;rWPfy3q{ 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 diff --git a/config.example.toml b/config.example.toml index cb450ee..6289750 100644 --- a/config.example.toml +++ b/config.example.toml @@ -21,3 +21,4 @@ toggle_floating = "ALT+F" new_floating = "ALT+SHIFT+F" next_floating = "ALT+F12" close_pane = "ALT+X" +open_font_selector = "ALT+T" diff --git a/devenv.nix b/devenv.nix index 78379c6..15b5c3c 100644 --- a/devenv.nix +++ b/devenv.nix @@ -7,6 +7,7 @@ let "git+https://gitea.gregorlohaus.com/gregor/jlibghostty.git"; jlib = jlibghostty.packages.${system}.jlibghostty; + hostNvidiaLibs = ".devenv/host-nvidia-libs"; in { packages = [ @@ -26,9 +27,10 @@ in pkgs.libGL pkgs.gtk3 pkgs.alsa-lib + pkgs.mesa-demos ]; - env.LD_LIBRARY_PATH = lib.makeLibraryPath [ + env.LD_LIBRARY_PATH = "${hostNvidiaLibs}:" + lib.makeLibraryPath [ pkgs.openjfx pkgs.glib @@ -42,5 +44,23 @@ in pkgs.gtk3 pkgs.alsa-lib ] + ":/usr/lib/x86_64-linux-gnu/nvidia/current"; + env.__GLX_VENDOR_LIBRARY_NAME = "nvidia"; + env.__EGL_VENDOR_LIBRARY_FILENAMES = "/usr/share/glvnd/egl_vendor.d/10_nvidia.json"; env.JLIBGHOSTTY_MAVEN_REPO = "${jlib}/maven"; + + enterShell = '' + mkdir -p ${hostNvidiaLibs} + for lib in \ + /usr/lib/x86_64-linux-gnu/libnvidia*.so* \ + /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so* \ + /usr/lib/x86_64-linux-gnu/libEGL_nvidia.so* \ + /usr/lib/x86_64-linux-gnu/nvidia/current/libnvidia*.so* \ + /usr/lib/x86_64-linux-gnu/nvidia/current/libGLX_nvidia.so* \ + /usr/lib/x86_64-linux-gnu/nvidia/current/libEGL_nvidia.so* + do + if [ -e "$lib" ]; then + ln -sfn "$lib" ${hostNvidiaLibs}/"$(basename "$lib")" + fi + done + ''; } diff --git a/src/main/java/com/gregor/jprototerm/AppConfig.java b/src/main/java/com/gregor/jprototerm/AppConfig.java index cd07328..2684e78 100644 --- a/src/main/java/com/gregor/jprototerm/AppConfig.java +++ b/src/main/java/com/gregor/jprototerm/AppConfig.java @@ -8,7 +8,11 @@ import io.github.wasabithumb.jtoml.value.primitive.TomlPrimitive; import io.github.wasabithumb.jtoml.value.table.TomlTable; import java.nio.file.Files; +import java.io.IOException; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; public record AppConfig( @@ -22,10 +26,23 @@ public record AppConfig( boolean kittyGraphics, Map keybindings ) { + private static final List KEYBINDING_KEYS = List.of( + "navigate_left", + "navigate_down", + "navigate_up", + "navigate_right", + "toggle_floating", + "new_floating", + "next_floating", + "close_pane", + "open_font_selector" + ); + public static AppConfig load() { AppConfig defaults = defaults(); Path path = configPath(); if (!Files.isRegularFile(path)) { + writeDefaultConfig(path, defaults); return defaults; } @@ -40,16 +57,7 @@ public record AppConfig( doubleValue(document, "window.width", defaults.windowWidth), doubleValue(document, "window.height", defaults.windowHeight), booleanValue(document, "kitty_graphics.enabled", defaults.kittyGraphics), - Map.of( - "navigate_left", binding(document, "keybindings.navigate_left", defaults.keybindings.get("navigate_left")), - "navigate_down", binding(document, "keybindings.navigate_down", defaults.keybindings.get("navigate_down")), - "navigate_up", binding(document, "keybindings.navigate_up", defaults.keybindings.get("navigate_up")), - "navigate_right", binding(document, "keybindings.navigate_right", defaults.keybindings.get("navigate_right")), - "toggle_floating", binding(document, "keybindings.toggle_floating", defaults.keybindings.get("toggle_floating")), - "new_floating", binding(document, "keybindings.new_floating", defaults.keybindings.get("new_floating")), - "next_floating", binding(document, "keybindings.next_floating", defaults.keybindings.get("next_floating")), - "close_pane", binding(document, "keybindings.close_pane", defaults.keybindings.get("close_pane")) - ) + keybindings(document, defaults) ); } catch (TomlException ex) { System.err.println("Could not parse " + path + ": " + ex.getMessage()); @@ -75,11 +83,30 @@ public record AppConfig( "toggle_floating", KeyBinding.parse("ALT+F"), "new_floating", KeyBinding.parse("ALT+SHIFT+F"), "next_floating", KeyBinding.parse("ALT+F12"), - "close_pane", KeyBinding.parse("ALT+X") + "close_pane", KeyBinding.parse("ALT+X"), + "open_font_selector", KeyBinding.parse("ALT+T") ) ); } + public AppConfig withFont(String family, double size) { + return new AppConfig( + columns, + rows, + shell, + family, + size, + windowWidth, + windowHeight, + kittyGraphics, + keybindings + ); + } + + public void save() { + save(configPath(), this); + } + public static Path configPath() { String configHome = System.getenv("XDG_CONFIG_HOME"); if (configHome != null && !configHome.isBlank()) { @@ -92,6 +119,76 @@ public record AppConfig( return "/bin/bash"; } + private static Map keybindings(TomlTable table, AppConfig defaults) { + Map parsed = new LinkedHashMap<>(); + for (String key : KEYBINDING_KEYS) { + parsed.put(key, binding(table, "keybindings." + key, defaults.keybindings.get(key))); + } + return Map.copyOf(parsed); + } + + private static void writeDefaultConfig(Path path, AppConfig defaults) { + save(path, defaults); + } + + private static void save(Path path, AppConfig config) { + try { + Path parent = path.getParent(); + if (parent != null) { + Files.createDirectories(parent); + } + Files.writeString( + path, + config.toToml(), + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING, + StandardOpenOption.WRITE + ); + } catch (IOException ex) { + System.err.println("Could not write " + path + ": " + ex.getMessage()); + } + } + + private String toToml() { + StringBuilder builder = new StringBuilder(); + builder.append("[terminal]\n"); + builder.append("columns = ").append(columns).append('\n'); + builder.append("rows = ").append(rows).append('\n'); + builder.append("shell = ").append(quoted(shell)).append('\n'); + builder.append("font_family = ").append(quoted(fontFamily)).append('\n'); + builder.append("font_size = ").append(trimDouble(fontSize)).append("\n\n"); + builder.append("[window]\n"); + builder.append("width = ").append(trimDouble(windowWidth)).append('\n'); + builder.append("height = ").append(trimDouble(windowHeight)).append("\n\n"); + builder.append("[kitty_graphics]\n"); + builder.append("enabled = ").append(kittyGraphics).append("\n\n"); + builder.append("[keybindings]\n"); + for (String key : KEYBINDING_KEYS) { + KeyBinding binding = keybindings.get(key); + if (binding != null) { + builder.append(key).append(" = ").append(quoted(binding.toString())).append('\n'); + } + } + return builder.toString(); + } + + private static String quoted(String value) { + return "\"" + value + .replace("\\", "\\\\") + .replace("\"", "\\\"") + .replace("\n", "\\n") + .replace("\r", "\\r") + .replace("\t", "\\t") + + "\""; + } + + private static String trimDouble(double value) { + if (value == Math.rint(value)) { + return Long.toString((long) value); + } + return Double.toString(value); + } + private static KeyBinding binding(TomlTable table, String key, KeyBinding fallback) { String value = stringValue(table, key, null); if (value == null) { diff --git a/src/main/java/com/gregor/jprototerm/KeyBinding.java b/src/main/java/com/gregor/jprototerm/KeyBinding.java index 1c0ebe9..f7c5cab 100644 --- a/src/main/java/com/gregor/jprototerm/KeyBinding.java +++ b/src/main/java/com/gregor/jprototerm/KeyBinding.java @@ -35,6 +35,22 @@ public record KeyBinding(boolean alt, boolean control, boolean shift, KeyCode co && event.getCode() == code; } + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + if (control) { + builder.append("CTRL+"); + } + if (alt) { + builder.append("ALT+"); + } + if (shift) { + builder.append("SHIFT+"); + } + builder.append(code.getName().toUpperCase(Locale.ROOT).replace(' ', '_')); + return builder.toString(); + } + private static KeyCode keyCode(String token) { KeyCode alias = switch (token) { case "GRAVE", "BACKTICK", "BACK_QUOTE", "`" -> KeyCode.BACK_QUOTE; diff --git a/src/main/java/com/gregor/jprototerm/Main.java b/src/main/java/com/gregor/jprototerm/Main.java index 911c412..351871c 100644 --- a/src/main/java/com/gregor/jprototerm/Main.java +++ b/src/main/java/com/gregor/jprototerm/Main.java @@ -3,19 +3,29 @@ package com.gregor.jprototerm; import javafx.animation.AnimationTimer; import javafx.application.Application; import javafx.scene.Scene; +import javafx.scene.control.ButtonType; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Dialog; +import javafx.scene.control.Label; +import javafx.scene.control.Spinner; +import javafx.scene.control.SpinnerValueFactory; import javafx.scene.input.KeyEvent; +import javafx.scene.layout.GridPane; import javafx.scene.layout.StackPane; +import javafx.scene.text.Font; import javafx.stage.Stage; public final class Main extends Application { private TerminalWorkspace workspace; + private TerminalCanvasView terminalView; + private AppConfig config; @Override public void start(Stage stage) { - AppConfig config = AppConfig.load(); + config = AppConfig.load(); workspace = new TerminalWorkspace(config); - TerminalCanvasView terminalView = new TerminalCanvasView(workspace, config); + terminalView = new TerminalCanvasView(workspace, config); StackPane root = new StackPane(terminalView.canvas()); terminalView.canvas().widthProperty().bind(root.widthProperty()); @@ -23,7 +33,7 @@ public final class Main extends Application { terminalView.canvas().setOnMousePressed(event -> terminalView.canvas().requestFocus()); Scene scene = new Scene(root, config.windowWidth(), config.windowHeight()); - scene.addEventFilter(KeyEvent.KEY_PRESSED, event -> handlePressed(config, event)); + scene.addEventFilter(KeyEvent.KEY_PRESSED, this::handlePressed); scene.addEventFilter(KeyEvent.KEY_TYPED, event -> handleTyped(event)); new AnimationTimer() { @@ -42,7 +52,7 @@ public final class Main extends Application { terminalView.canvas().requestFocus(); } - private void handlePressed(AppConfig config, KeyEvent event) { + private void handlePressed(KeyEvent event) { if (config.keybindings().get("navigate_left").matches(event)) { workspace.navigate(Direction.LEFT); event.consume(); @@ -67,6 +77,9 @@ public final class Main extends Application { } else if (config.keybindings().get("close_pane").matches(event)) { workspace.closeActivePane(); event.consume(); + } else if (config.keybindings().get("open_font_selector").matches(event)) { + openFontSelector(); + event.consume(); } else { String encoded = KeyEncoder.encode(event); if (encoded != null) { @@ -88,6 +101,49 @@ public final class Main extends Application { } } + private void openFontSelector() { + Dialog dialog = new Dialog<>(); + dialog.setTitle("Font"); + dialog.getDialogPane().getButtonTypes().addAll(ButtonType.OK, ButtonType.CANCEL); + + ComboBox family = new ComboBox<>(); + family.getItems().setAll(Font.getFamilies()); + family.setEditable(true); + family.setMaxWidth(Double.MAX_VALUE); + family.setValue(config.fontFamily()); + + Spinner size = new Spinner<>(); + size.setEditable(true); + size.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(6.0, 48.0, config.fontSize(), 0.5)); + + GridPane content = new GridPane(); + content.setHgap(10.0); + content.setVgap(10.0); + content.add(new Label("Family"), 0, 0); + content.add(family, 1, 0); + content.add(new Label("Size"), 0, 1); + content.add(size, 1, 1); + dialog.getDialogPane().setContent(content); + + dialog.showAndWait() + .filter(button -> button == ButtonType.OK) + .ifPresent(ignored -> { + String selectedFamily = family.getEditor().getText(); + if (selectedFamily == null || selectedFamily.isBlank()) { + selectedFamily = family.getValue(); + } + if (selectedFamily == null || selectedFamily.isBlank()) { + return; + } + + double selectedSize = size.getValue(); + config = config.withFont(selectedFamily.trim(), selectedSize); + config.save(); + terminalView.setFont(config.fontFamily(), config.fontSize()); + terminalView.canvas().requestFocus(); + }); + } + public static void main(String[] args) { System.setProperty("prism.order", System.getProperty("prism.order", "es2,sw")); launch(Main.class, args); diff --git a/src/main/java/com/gregor/jprototerm/ShellSession.java b/src/main/java/com/gregor/jprototerm/ShellSession.java index 64101cd..e70a6fb 100644 --- a/src/main/java/com/gregor/jprototerm/ShellSession.java +++ b/src/main/java/com/gregor/jprototerm/ShellSession.java @@ -19,7 +19,7 @@ public final class ShellSession implements AutoCloseable { private final ExecutorService reader; private volatile boolean closed; - private ShellSession(PtyProcess process, TerminalPane pane) { + private ShellSession(PtyProcess process) { this.process = process; this.stdin = process.getOutputStream(); this.reader = Executors.newSingleThreadExecutor(runnable -> { @@ -27,7 +27,6 @@ public final class ShellSession implements AutoCloseable { thread.setDaemon(true); return thread; }); - reader.submit(() -> readOutput(pane)); } public static ShellSession start(String shell, TerminalPane pane, int columns, int rows) { @@ -42,13 +41,17 @@ public final class ShellSession implements AutoCloseable { .setInitialRows(rows) .setDirectory(System.getProperty("user.home")) .start(); - return new ShellSession(process, pane); + return new ShellSession(process); } catch (IOException ex) { pane.write("failed to start shell: " + ex.getMessage() + "\r\n"); throw new IllegalStateException("Could not start shell " + shell, ex); } } + public void startReading(TerminalPane pane) { + reader.submit(() -> readOutput(pane)); + } + public void resize(int columns, int rows) { if (closed) { return; @@ -57,11 +60,15 @@ public final class ShellSession implements AutoCloseable { } public void send(String text) { + send(text.getBytes(StandardCharsets.UTF_8)); + } + + public void send(byte[] bytes) { if (closed) { return; } try { - stdin.write(text.getBytes(StandardCharsets.UTF_8)); + stdin.write(bytes); stdin.flush(); } catch (IOException ex) { close(); diff --git a/src/main/java/com/gregor/jprototerm/TerminalCanvasView.java b/src/main/java/com/gregor/jprototerm/TerminalCanvasView.java index cf03466..9b1a0d0 100644 --- a/src/main/java/com/gregor/jprototerm/TerminalCanvasView.java +++ b/src/main/java/com/gregor/jprototerm/TerminalCanvasView.java @@ -32,10 +32,14 @@ public final class TerminalCanvasView { private final TerminalWorkspace workspace; private final AppConfig config; private final Map kittyImageCache = new HashMap<>(); + private String fontFamily; + private double fontSize; public TerminalCanvasView(TerminalWorkspace workspace, AppConfig config) { this.workspace = workspace; this.config = config; + this.fontFamily = config.fontFamily(); + this.fontSize = config.fontSize(); canvas.setFocusTraversable(true); } @@ -43,6 +47,11 @@ public final class TerminalCanvasView { return canvas; } + public void setFont(String family, double size) { + this.fontFamily = family; + this.fontSize = size; + } + public void render() { double width = canvas.getWidth(); double height = canvas.getHeight(); @@ -75,7 +84,7 @@ public final class TerminalCanvasView { gc.setLineWidth(workspace.isActive(pane) ? 2.0 : 1.0); gc.strokeRect(pane.x() + 0.5, pane.y() + 0.5, pane.width() - 1.0, pane.height() - 1.0); - Font font = Font.font(config.fontFamily(), config.fontSize()); + Font font = Font.font(fontFamily, fontSize); gc.setFont(font); FontMetrics metrics = measureFontMetrics(font); @@ -105,15 +114,14 @@ public final class TerminalCanvasView { } private static FontMetrics measureFontMetrics(Font font) { - Text text = new Text("Mg"); + Text text = new Text("┃MgÅjy"); text.setFont(font); - double textHeight = text.getLayoutBounds().getHeight(); - double lineHeight = Math.max(1.0, Math.ceil(textHeight * 1.2)); - double baselineOffset = -text.getLayoutBounds().getMinY() + ((lineHeight - textHeight) / 2.0); + double lineHeight = Math.max(1.0, text.getLayoutBounds().getHeight()); + double baselineOffset = -text.getLayoutBounds().getMinY(); Text cell = new Text("M"); cell.setFont(font); - double cellWidth = Math.max(1.0, Math.ceil(cell.getLayoutBounds().getWidth())); + double cellWidth = Math.max(1.0, cell.getLayoutBounds().getWidth()); return new FontMetrics(cellWidth, lineHeight, baselineOffset); } diff --git a/src/main/java/com/gregor/jprototerm/TerminalPane.java b/src/main/java/com/gregor/jprototerm/TerminalPane.java index b2b35d0..2ce4e00 100644 --- a/src/main/java/com/gregor/jprototerm/TerminalPane.java +++ b/src/main/java/com/gregor/jprototerm/TerminalPane.java @@ -5,6 +5,7 @@ import dev.jlibghostty.KittyGraphics; import dev.jlibghostty.RenderStateSnapshot; import dev.jlibghostty.Terminal; import dev.jlibghostty.TerminalOptions; +import dev.jlibghostty.DeviceAttributes; import java.util.Optional; import java.util.concurrent.atomic.AtomicReference; @@ -32,6 +33,7 @@ public final class TerminalPane implements AutoCloseable { public static TerminalPane create(int columns, int rows) { Terminal terminal = Ghostty.open(TerminalOptions.of(columns, rows)); + terminal.setDeviceAttributesProvider(DeviceAttributes::xtermCompatible); TerminalPane pane = new TerminalPane(terminal, columns, rows); pane.refresh(); return pane; @@ -53,6 +55,13 @@ public final class TerminalPane implements AutoCloseable { public void attach(ShellSession session) { this.session = session; + terminal.setPtyWriter(bytes -> { + ShellSession current = this.session; + if (current != null) { + current.send(bytes); + } + }); + session.startReading(this); } public void send(String text) {