From 5f4be185e8972bfe9eff78600afdfd25322c85fe Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 18 Oct 2024 06:44:45 +0100 Subject: [PATCH] add preferredColumn field to app type --- fcore/app-type.sml | 6 ++++++ fcore/app-update.sml | 6 +++--- fcore/app-with.sml | 22 ++++++++++++++++++---- shf | Bin 1175712 -> 1175712 bytes 4 files changed, 27 insertions(+), 7 deletions(-) diff --git a/fcore/app-type.sml b/fcore/app-type.sml index d1ea4eb..ef957c0 100644 --- a/fcore/app-type.sml +++ b/fcore/app-type.sml @@ -4,8 +4,13 @@ struct { buffer: LineGap.t , windowWidth: int , windowHeight: int + (* line to start drawing from *) , startLine: int + (* absolute index of movable cursor *) , cursorIdx: int + (* when moving cursor up or down a line, + * move to this column if possible *) + , preferredColumn: int } fun init (buffer, windowWidth, windowHeight) : app_type = @@ -14,5 +19,6 @@ struct , windowHeight = windowHeight , startLine = 0 , cursorIdx = 0 + , preferredColumn = 0 } end diff --git a/fcore/app-update.sml b/fcore/app-update.sml index fa3f36d..a34990d 100644 --- a/fcore/app-update.sml +++ b/fcore/app-update.sml @@ -8,7 +8,7 @@ struct fun resizeText (app: app_type, newWidth, newHeight) = let - val {buffer, windowWidth, windowHeight, startLine, cursorIdx} = app + val {buffer, windowWidth, windowHeight, startLine, cursorIdx, ...} = app val newBuffer = LineGap.goToLine (startLine, buffer) val drawMsg = TextBuilder.build @@ -21,7 +21,7 @@ struct fun moveRight (app: app_type) = let - val {buffer, windowWidth, windowHeight, startLine, cursorIdx} = app + val {buffer, windowWidth, windowHeight, startLine, cursorIdx, ...} = app (* move LineGap to cursorIdx, which is necessary for finding newCursorIdx *) val buffer = LineGap.goToIdx (cursorIdx, buffer) @@ -39,7 +39,7 @@ struct fun moveLeft (app: app_type) = let - val {buffer, windowWidth, windowHeight, startLine, cursorIdx} = app + val {buffer, windowWidth, windowHeight, startLine, cursorIdx, ...} = app val buffer = LineGap.goToIdx (cursorIdx, buffer) val cursorIdx = Cursor.viH (buffer, cursorIdx) diff --git a/fcore/app-with.sml b/fcore/app-with.sml index 25c6c51..14b1b5e 100644 --- a/fcore/app-with.sml +++ b/fcore/app-with.sml @@ -4,27 +4,41 @@ struct fun bufferAndSize (app: app_type, newBuffer, newWidth, newHeight) = let - val {buffer = _, windowWidth = _, windowHeight = _, startLine, cursorIdx} = - app + val + { buffer = _ + , windowWidth = _ + , windowHeight = _ + , startLine + , cursorIdx + , preferredColumn + } = app in { buffer = newBuffer , windowWidth = newWidth , windowHeight = newHeight , startLine = startLine , cursorIdx = cursorIdx + , preferredColumn = preferredColumn } end fun bufferAndCursorIdx (app: app_type, newBuffer, newCursorIdx) = let - val {buffer = _, cursorIdx = _, windowWidth, windowHeight, startLine} = - app + val + { buffer = _ + , cursorIdx = _ + , windowWidth + , windowHeight + , startLine + , preferredColumn + } = app in { buffer = newBuffer , cursorIdx = newCursorIdx , windowWidth = windowWidth , windowHeight = windowHeight , startLine = startLine + , preferredColumn = preferredColumn } end end diff --git a/shf b/shf index 75e4bf38d6e27be5fea669a1a5515bd068ca4d51..255b1bcb2238ae2fc8e9441e142fb5a7d1a60beb 100755 GIT binary patch delta 9304 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

-_?-zK2_bwO%)v*(aU6&V z#e7f?^^b&+bL^#w;>@gmZJ?6lBO!)y06y^^t5%QR+Q&%Y`|L{Ug>21Z1RfK=G*sm) z1%GDg7X7H1!OK>$WMy519aXDUVISLxsz;PxU0}2SFLUtClEv@3#D0+dzuKf7)Jm`% z;=^SkXP22*m>AJathmgE{*8$oCgv*N{E%^r8p$8A{TBRG*nSlejo$&^xyqIkJQob$ z`4Y}O1BfUT=(Is*my@ckhy^GVze2sjorCOdW! zJ{y}=HtH~+c7u&q!Z%Q5?0u*oEhwv1^*Ht-R;o}fMHaT?@xCFp`k!SNTrInz{Ay*l z>N7To1WetzY=q&8!!-(5Jg(8ovXO+7i}=-YYa-7qvnKG}^KsW*hJQ1~J4dMG78_KK``11l}F0iKYnsVzj?k&T=N5$AsnKhX&Tqp!Au#OX*6ZztD411#- z0R3#dZ2<%{&$p)X`^CRm<<=a&wA||2BgXp{YJJDy%)F$`nkA&#g@LKuR|a&p+?vOe zg}~<*;NN}1qG@HIFh4CO!NxDohoYY^gjMg09;#`{V!)#dto6KL5j34%Xf5Q^7GcuO z3$1P*T4*g0RweRX6|fJqoOdt8UH2F8Pwm&Z2qRW}!CEOmq8!JkFS6dDA#|TDR3#Xr z?WTdCcFid>7FzG)or|n4?pXj;Z57Z0%@g<&LcOYaQw2_@c67%^uQlV*I`$bjY{tnt z4jK5287JsCVqp10lWC9ZIPXkM_jEJP*6{`d`_0&?<4ywy%{WEJQcq0yaWkHzW3Pb+ z%y^298w~91H(CBw9iKGt5;IQIaq`zAC{DK+h>3Fw+d(AjY$K3`_`HRW4 zvY75a#B>*%@hTm!Fz{M4epttQ4IDP(M|2!9@EJ26t7FF>W4h%lCez||>@)CmGoGvC zkb(VX?1||%aL|lz({bKAG2O?__&y!i7A9p`etz`3&ae&$~_oi%!!%Y$Yd zufN`F;Nxa|_G4}INdpg<@gW@#8`yc(qiDdI_UbtPTFkWRW?ZA=nFjWo@k|}p7&vIg@jBjX;Nxa|_Ai>wlLj6z<3l-G&;SV*ThYWnij8E$LtbyfEO{VSDar~z-)25qojgDs; z*l)%&bzEcMpc%*Oc&~wvoAKGpn$D939x&rWIvzH#^Sa6M4LZ)d9DfYfwe=pt8g!5o{>|LU!eV`Y-e!bwu1}@icV#g)pJzsmn znqK%DeOUJ;O?>ZYrNiZ+Bt39Sp9j$EzcWnc@F8%F>_Dq&oR9* zIsLbcoABP}^ps1BKmS4s-12^|@e<|6?I}Bw k#(#0imzF=atYCUUwY2(?M;|V#sb5u6qwKynCHa;A0ff55LjV8(