From ddf99d71f69fe899f448c954409beed65d914a78 Mon Sep 17 00:00:00 2001 From: spy Date: Mon, 14 Mar 2022 07:21:55 +0000 Subject: [PATCH] first commit --- .gitignore | 1 + .idea/.gitignore | 8 ++ .idea/inspectionProfiles/Project_Default.xml | 12 +++ .idea/lambda.iml | 11 +++ .idea/misc.xml | 4 + .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ .vscode/settings.json | 5 ++ README.md | 1 + __pycache__/colour.cpython-310.pyc | Bin 0 -> 372 bytes core/__pycache__/colors.cpython-310.pyc | Bin 0 -> 739 bytes core/__pycache__/cursor.cpython-310.pyc | Bin 0 -> 311 bytes core/__pycache__/statusbar.cpython-310.pyc | Bin 0 -> 822 bytes core/__pycache__/utils.cpython-310.pyc | Bin 0 -> 732 bytes core/colors.py | 20 +++++ core/cursor.py | 5 ++ core/statusbar.py | 35 ++++++++ core/utils.py | 28 ++++++ lambda | 85 ++++++++++++++++++ modes/__pycache__/command.cpython-310.pyc | Bin 0 -> 1130 bytes .../__pycache__/command_mode.cpython-310.pyc | Bin 0 -> 1023 bytes modes/__pycache__/insert.cpython-310.pyc | Bin 0 -> 520 bytes modes/__pycache__/normal.cpython-310.pyc | Bin 0 -> 861 bytes modes/command.py | 71 +++++++++++++++ modes/insert.py | 17 ++++ modes/normal.py | 43 +++++++++ 26 files changed, 360 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/lambda.iml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 __pycache__/colour.cpython-310.pyc create mode 100644 core/__pycache__/colors.cpython-310.pyc create mode 100644 core/__pycache__/cursor.cpython-310.pyc create mode 100644 core/__pycache__/statusbar.cpython-310.pyc create mode 100644 core/__pycache__/utils.cpython-310.pyc create mode 100644 core/colors.py create mode 100644 core/cursor.py create mode 100644 core/statusbar.py create mode 100644 core/utils.py create mode 100755 lambda create mode 100644 modes/__pycache__/command.cpython-310.pyc create mode 100644 modes/__pycache__/command_mode.cpython-310.pyc create mode 100644 modes/__pycache__/insert.cpython-310.pyc create mode 100644 modes/__pycache__/normal.cpython-310.pyc create mode 100644 modes/command.py create mode 100644 modes/insert.py create mode 100644 modes/normal.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..28bfdec --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/.idea/lambda.iml b/.idea/lambda.iml new file mode 100644 index 0000000..bd25c05 --- /dev/null +++ b/.idea/lambda.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..dc9ea49 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..ea736d6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..c53b90f --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "python.analysis.extraPaths": [ + "./modes" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d69472b --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# lambda diff --git a/__pycache__/colour.cpython-310.pyc b/__pycache__/colour.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db72e4bfedc34a07d6e0cf261a0e2a56350d3b90 GIT binary patch literal 372 zcmZXQJxjzu5QaC&=Hqe~YeBF-5aUNwghTuVHg;nnNoKeU?q-jCc*K9?U%JM^&eGD# zxvYigEc-tD!n^~sCP`w!_3?I8d@|p6=65-4Zuzzu3kneEfP*f$=z)h4B>LcE00D*& zVgwORV1hBkIE5+B?!`QL@edxZPxXj1i_GHO;?m;6;%Y?p0}e=zkIL=*KGApc8F&pL z_{)Z<23e?{AQ(s~vjJHSc@3e?msEE-_?uPL5$v_3sO$(I|9U$kXuGC*;we>^tE$|3 zRO72?T;6(=ufud@G^Oo&NRggXmFoiYv^2`}&GCBJMhk7QS9G)cv38$D3hDemk@F2b C&0QS; literal 0 HcmV?d00001 diff --git a/core/__pycache__/colors.cpython-310.pyc b/core/__pycache__/colors.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e005b8e3aa1892aa563445740cd37fa5bee466a GIT binary patch literal 739 zcmZ{h%}&BV6ov1!{Iry+F~*HQ8yAKRUAQ$yzy^)AB#0rfA;2^dQ!MEe6ZSrcEPbWf zy6P*q^4=B-EF5wVbH01%OfP|HmH^k~RduA~0Dj19F9pplmN-J;z?lzy;0jkiq0cyb zhDt8R4!C2|?UhHJZbg;sQyLL?h8j=--JAk}`=&vWHSJWMMoHg(svTqG1>f#(^J%QlGp}qQPu9 z38m3!Ij#1fd;id}*QV~&8jn&>J8k=J&6{o8c4ax`J=<|wU0F(9qgQj+`?~XDOEcw9 zwWjTMYTpo^;C&MLy|7+`sb`7V!s6bCpI?KfwpyHjLRyPgJo?t3>hVL^}9psfA@lGmT6 literal 0 HcmV?d00001 diff --git a/core/__pycache__/cursor.cpython-310.pyc b/core/__pycache__/cursor.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..634fb05f756b5cf9d0c1cfde489707dbbdbbfbd9 GIT binary patch literal 311 zcmd1j<>g`kg3SebN!395F^Gc(44TZzj6fk60I@-8 zoq@Pm2T0Ta)n+plag_j7H#0H<^#+5)n1Ny9gmX&*Sk{8ygYe7<}3uzhD4A-Qwz?xOj?F z-$W1~NDdm zoV99Jhdy*buqQxa0PpW#`kZ-d7i5hGvY>`@QWN2Cf#5Ya-Z{m3cn2k6S{1UdC#QWOPx^UWj78i}DusI{Hd8&0)%N7n21*_&sZ;!4LEl3N z34UJNYm-fKja?@ZjYvcu&`0z!-Jxv~{#JL~E!l9@1m&)*Tz1b>u0N~js)j3Y8v`~R R;7z8v+;OeaE+vFb`UeSyy3GIp literal 0 HcmV?d00001 diff --git a/core/__pycache__/utils.cpython-310.pyc b/core/__pycache__/utils.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5950a7f7636455211f423e2d409fd4b4d077c94f GIT binary patch literal 732 zcmZvZ&uiN-6vy?;PMRfyZYzu)is@n0ht>Bny202rgY=fmaQsAUYEPb|baQcF(Eb-= z&>Z(K>AF+?fgN_*lRZiT6X>h2-jko7K2np(h~T)qJ74@}g#7ZG-GMRk7N=r(jCDA_&H@-7oRWcY@xMJud;@RnXN{n7@vWdEE0R|Vp`o!*?x zWLlO@^m$d-s7$K`q;I0LCQ>^36u*kL6#LX({?KUq2v&AR0k>P<@03F>%wF4q0E+U!zOyl< to open a file and edit", + "Type :q or to quit lambda" + ] + + # Centering calculations + start_x_title = int((width // 2) - (len(title) // 2) - len(title) % 2) + start_y = int((height // 2) - 2) + + # Rendering title + stdscr.addstr(start_y, start_x_title, title, curses.color_pair(7) | curses.A_BOLD) + + # Print the subtext + for text in subtext: + start_y += 1 + start_x = int((width // 2) - (len(text) // 2) - len(text) % 2) + stdscr.addstr(start_y, start_x, text) + + +def start(stdscr): + # Initialise data before starting + data = {"cursor_y": 0, "cursor_x": 0, "commands": []} + + # Clear and refresh the screen for a blank canvas + stdscr.clear() + stdscr.refresh() + + # Initialise colors + colors.init_colors() + + # Load the start screen + start_screen(stdscr) + + # Change the cursor shape + cursor.cursor_mode("block") + + # Main loop + while True: + # Get the height and width of the screen + height, width = stdscr.getmaxyx() + + # Activate normal mode + data = normal.activate(stdscr, height, width, data) + + # Calculate a valid cursor position from data + cursor_x = max(2, data["cursor_x"]) + cursor_x = min(width - 1, cursor_x) + cursor_y = max(0, data["cursor_y"]) + cursor_y = min(height - 3, cursor_y) + + # Move the cursor + stdscr.move(cursor_y, cursor_x) + + # Refresh and clear the screen + stdscr.refresh() + stdscr.clear() + + +def main(): + # Change the escape delay to 25ms + # Fixes an issue where esc takes too long to press + os.environ.setdefault("ESCDELAY", "25") + + # Initialise the screen + curses.wrapper(start) + + +if __name__ == "__main__": + main() diff --git a/modes/__pycache__/command.cpython-310.pyc b/modes/__pycache__/command.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0fb2c77effb0c94f114a77452b84e84160877df1 GIT binary patch literal 1130 zcmZ8g-ER{)5ck)9ByDn4L89uN5Fqie(y5Vn-~qT3B@K5+Y4~X2jz|b?)^3t!H=Ec_ zN{}O+l>0-P$NP(r{K`}Rg*-9dM5176#xvuYvFGQRyizG6Sa;@o?S6>R7pGiZ1eC`> z>Q`VKah#$Iw{S*U1UsFiv_(1P>_60E+~Yp%9w)~r3N9f6MZ}hrj`dizV`;sy?xm`k zFn6?G9_&6)9Z1~=W~gEu9m9Tr-fz#CVI22~tc-k+2uM2`U0{O@He^9D8u`vUqD_m> zEgnTgQpnN@I(g39QxSRASDLFtTE8oLovyatd5`O^4U;^};sIASSWEvSxdE}uyR~kf ziJBTtYg|lfX`HorT+4DURBi3LH=No)d=$x83s-{L2F5TWAqg=7suJ=qTgnQUzpEEe zMgdS!?;ZwJ@r-rQ%==aqCkuv=K^MeePIthAGgm2C=-NUTfPcwZ*aA6>w0GtMHosko zqTJVk@#gqCDxy94(0CW&0s&^mP(YaR0AlJZ88Vb~nTK->yfnwBbb_SN8!MzC&yR2N z4RNnqXNP>eJoELYVRLMJh&8L*!E0j&^+AW*E35MbhVI$Cs2Xp9XTjAso8bFOS2;Mn zfn3F-n^C1H0W|pE`irBZ{pP`?)0X(b$r9hX{2646%S&AObU$t-MGVc#EQ+WFZ7noJyg( z){i+?T3VLn6JfoM&!{e9x^@gRX7+5;YhqmMn8qJf&YfE#< zi*B$q=|V5Y!=V^(%g*xNAPS`$0qOcex(2a~$2zvOFQ&2tddr){X^*$IPGt|G(&>kF z8y5Y#Vw)~5j1%3P#9CYfP2B^=2*X=+8*gDkLsF)@gpo2~ATzQC9#`Ln`Bda(~@c;V70&Gpyndi zkkd*D<~yUx737eh4!4P*7ep0T_8$3AnDT@RhB5bIGKYjDkkADKa$d4A0dFY4WC0im z4V(wmIODk2*G;b*MWQ{Cfn!`93*Ax14P~zz#>Tnqi8wTVCmIY|LxHht?F&&EOtySj z4Wogq>d~Ys4>_){JB zWeJO&Qx|*nY~vIYZtNv|1~*B1nyV)XpZg1fJ$$$ByN73LD;+ar;;iszfHE_K6NdA6 zlW?35pXcIy!e)@-Av-T5d;wEuvsU8#f5TN}!EO^Amx($QVp z`7Pn`(Gqs9@1kxXyM%%vLD6J%+=|D#-BQL=@QWsJ9B%k8XN14z42C&TKqyPW_ literal 0 HcmV?d00001 diff --git a/modes/__pycache__/insert.cpython-310.pyc b/modes/__pycache__/insert.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a607828477a0503e92f64efb47c3ad23ca1ece08 GIT binary patch literal 520 zcmY*WJx{|h5Iuk7qo`%z7cel8r4c(qNQi-@17+%##-@o#NM*Z)O6k_Wz}~X)m%K9d zFEDWzkSHhJv)}3L_s(txgCoGW*bJv{4B(TRaE`xsB``vk`Xq%sNb zM&sN2heQ~nJ~H~zXj}MTrd?hnp&>&iARu)wRpv4u=1tWYYsk#ssD=c5oaL@uW=<2c x^jR@KVVuWYa&v+dt$3L?Mt73klwJMcqVDy6Zo9;nT2%Uqe!-H3KE$FgzX5TJWy1gf literal 0 HcmV?d00001 diff --git a/modes/__pycache__/normal.cpython-310.pyc b/modes/__pycache__/normal.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9cae3d912d66121c52a33975121653773e9706d3 GIT binary patch literal 861 zcmZuwO>Yx15cSu7By7=AN+}WtgnC&Cb-7VNg^IXBK=hUi+N|Af$Zoc>ozO^|Q}`jt zk$=K(@Rd^~4oGl75eLQ&q%APgynXhY8QWuTy|K|oVBcnYy&ZaZCMjYaV&)@jCUe*UbqDlPu>7c zZd$l$;g*Fh3--h-xNTVsa35TS05J(^Oc{2wog^@xYl3U&s>v*`rEm+og