A4OAUGCI4B4DW4CQKAUDWIJX2556XN4DSDZYUWBYW3UDSW5YFFYQC
N6XPI5V3UHZL3JDNNIRATDNWJ3NMD2EOE5AD336WCXH44ER2CSSQC
BMYUWUJWDRDBZ2JLIN4NJ2YDM4FVZXWRNZE77GPUCDVBU7U6BAVQC
HH5A6KCA2QZFGIZTC525YRLTRBFZYDKSMWPCC3MSC76FVJUUHRDQC
FFLY7L6MU4JSLFWDQZ7Q4BHFZ6QYZV4MWQBFDCNMXOFBYUWSQXRAC
MRFCN57PUIYI4LXGVZ3JP7SJHFHMGCSM56KHMLH2TJPMTBQ7VN3QC
44XJ7M5LRCOL46CUUTN2ZIOAYQOHPLRNA37S67CH665RAOVI4SJQC
FS2ITYYHBLFT66YUC3ENPFYI2HOYHOVEPQIN7NQR6KF5MEK4NKZAC
DMCRN3CEDMPBFFQA37BSGYQCUVLFDETXSS3NFJ3U4K6XSFPPDC2AC
L2HMMGZPLQTMRPSHKIZZA77KOKKNVREUOWNSUKTIMS2GPMLJL4BAC
FGE7IZMPW2RTN52BVC67P2DCTIEHFMAB4DJZODUMDNFHZI4HLVCAC
BVGBPQLIS4PO55HHOGW4AKEFZRYLLFBHM73ADZ7IDPSZU5AJFL4QC
Z5J2BXUGHDTB5FAGUIFSU2Z75QGHHPIBHVC7BM4BDSO4CRZB5VOQC
GDBDGLRHJSMN527PHXGZVSGF55EYT4X3GFNF4LF6363JE2FGBQXQC
AYUZF67YZY2GQBYJJLHU6LI7KJUTBRPYY46WOD4MBVE3DIGSLM2QC
SGZ44T7WGWSQ27MZ6CSCHTGBOLQTIECJIP6KBSTP7A55DZCUBLHAC
BPYWIU627AGHPXJ7KAZEYFJMUEVTCHQ624UHTLZ4VMAVOLZM255AC
D4FEFHQCSILZFQ5VLWNXAIRZNUMCDNGJSM4UJ6T6FDMMIWYRYILQC
ZSDFOBNDDFXU3FG2I7KHBVQSXQND57D4VQTKBNADOOR5JEV5DJEAC
XQZO4DUY3GDV2W6JNWDKCVIDGX7YBIONJC2V3BQEQY7XCIXREBEAC
EK3RUYFD4VARBJKHOBHDJTZJ3SPANEUWVOMM6FLUIXLHADK4XDBQC
DF7NOKANJJKARX3MPW45JYVSCLHN5JS35NHEJGNWUXZ5J2ISYF2QC
F3NPUCCMFNMXVD2XJ5FMJ5M5FP3XICQHJRD6WFNB6OUK6LBL2TXQC
2DVVKKVA6PJ7VKYLGPQ22AXUB6ZWFMPWB445PRDZJDNLURUFDNDQC
P3PCGTC4ZITFU44PE5G6ITA5KRJPDENP66Y7YLQY3RQIFPUNOWYAC
CZ75J5XVD2PTAPK67BUL4QY2RDBGRLITYX3SOLXUJ2UFD5CCVRCQC
WVKFFN6FAJVKUL6NGAOWSS33WFD63GPOPSLDQ7JT4WM27KV7H65QC
VY24DRY6CZGUUURGPIYSL63HYTE22D573G5UX4MN55JORJ5GNW6AC
NVOQWGKABCBXTLJZ5DJIDBLXZ4FCKEQRFTEXXEAIISCY3VAPHERAC
SLWFPKOOFZBENBKNSSPRWZ674ZTKSL6XO6BVJXFJYDOAQFJYY65QC
7TQAF4BYIK75EEYCCK7VEUSZHNCWMWIA3HZGQKIILYESUZ5ZZRVQC
MISEW25VIMXQ6ID37VQ365KAMPQ5O4COYWEIK6M4JXKIG7L5DVSQC
7CJKZDU3YJPOKJB4J4GAH7IVDSJXURQKS36YCHJIARRPVDXZOOOAC
ZTMRQZSWUL6FJRI4C4H37MR2IMV22DB6KRGEOUNYRWW5CTAVQFKAC
IDGP4BJZTKAD6ZO4RLAWYVN6IFCMIM76G6HJGPTE27K4D6CDBUHQC
S243PA6FD5VTQ4LKSMHV2E3YZXD3F3AQWD6DWD7KFJZE3KO2KMYQC
PHN2H24FBVZGS3EARPE7FCU65CUIC3GRVZA4AV6EIQJW4Q4DYSCQC
HZ7IBNU5HILK4NSXH664LSKALUPJ6DVDFZEN6G4ITHNCLUGUJ52QC
Use this app to communicate over a back-channel with LÖVE apps that follow a
certain protocol:
* https://git.sr.ht/~akkartik/night.love -- sample app showing a slowly
revolving night sky
* https://git.sr.ht/~akkartik/template-live -- template for new apps
* https://git.sr.ht/~akkartik/broadsheet.love -- multi-column text reader
* https://git.sr.ht/~akkartik/mastodon-unfurl.love -- mastodon thread
visualizer
* https://git.sr.ht/~akkartik/spell-cards.love -- flash cards for drilling
spelling
* https://git.sr.ht/~akkartik/bf.love -- BF programming environment
* https://git.sr.ht/~akkartik/luaML.love -- simple web-browser-like box
model implementation
* https://git.sr.ht/~akkartik/template-live-editor -- template for new apps
that need editor widgets
* ...
My tentative goal is to be able to post comments on articles, send updates
around using git, and browse comments from all commenters in line with
articles. It's unclear whether it will be economical to support editing
articles. My priority is a commenting experience rather than a CMS for the
author(s) of articles.
Communication happens over temporary files in the file system that should live
in an internal directory, but might end up in your home directory. Using these
files, driver.love can make changes to these apps without needing to restart
them.
Status: you can read articles. There's a 'comment' button, but it doesn't do
anything yet.
![demo](assets/20221228-luaML-driver.gif)
_The name_: 'pothi' is [Sanskrit for 'book'](https://en.wiktionary.org/wiki/%E0%A4%AA%E0%A5%8B%E0%A4%A5%E0%A5%80),
often [a loose-bound collection of palm leaf manuscripts](https://en.wikipedia.org/wiki/Palm-leaf_manuscript).
driver.love is a fork of [lines.love](http://akkartik.name/lines.html), an
editor for plain text where you can also seamlessly insert line drawings.
pothi.love is a ["freewheeling" app](https://git.sr.ht/~akkartik/driver.love)
that you can read and modify the source code for as it runs.
Run this app from the terminal, [passing its directory to LÖVE](https://love2d.org/wiki/Getting_Started#Running_Games)
You must have a ["freewheeling"](http://akkartik.name/post/roundup22) client
app running that can be communicated with and that you're trying to modify;
otherwise driver.love will hang until it finds one, and might need to be
force-quit. (Also, bad things will happen if you have _more than a single_
client app running. Or if you close one app and open another without
restarting the driver. Just always open the app and then the driver. If you
close the app, close the driver.)
So download and run say [broadsheet.love](https://git.sr.ht/~akkartik/broadsheet.love)
in a separate terminal.
Run this app from the terminal, [passing its directory to LÖVE](https://love2d.org/wiki/Getting_Started#Running_Games).
pothi.love will print the path where it expects to find articles. Quit, create
a folder called `data/` under this path, put text files there. Restart.
Now try pressing `ctrl+l` in this driver app. Select `on` by some combination
of typing letters and moving the arrow keys. It provides a useful orientation
of available hooks when programming live, and also mentions an important
gotcha.
For example, I created the `data/` dir using these commands on my machine:
Each definition lives in a blue box. You have to follow a specific Lua syntax
where the name of the definition comes first: `foo = function(...) ... end`
rather than `function foo(...) ... end`. The driver treats the first word in a
definition is its name.
```
cd ~/.local/share/love/pothi
git clone http://canonical.org/~kragen/sw/pavnotes2.git data
```
Functions that start with `test_` are tests, and run any time you hit `f4`.
The driver will highlight them in green or red when they fail.
The app will open to a directory view by default (though there's no scrolling
or filtering yet, sorry..). Click on any filename to read it.
At any time:
* `f4` to send current buffer to the client app. (Run only one such
"freewheeling" app at a time.)
* `ctrl+l` to browse a list of definitions within the app that are available
to edit. (Not everything will be.)
* `ctrl+d` to delete a definition.
* `ctrl+g` to zoom out to see everything, or zoom back in to where you were.
While reading a single file:
When some definition has focus (a cursor):
* `ctrl+f` to find patterns within a file
* `ctrl+c` to copy, `ctrl+x` to cut, `ctrl+v` to paste
* `ctrl+z` to undo, `ctrl+y` to redo
* `ctrl+o` to switch to a different file
* `ctrl+f` to search for strings
* Bad things will happen if you have more than a single client app running. Or
if you close one app and open another without restarting the driver. Just
always open the app and then the driver. If you close the app, close the
driver.
* You have to follow a specific Lua syntax where the name of the definition
comes first: `foo = function(...) ... end` rather than `function foo(...)
... end`. The driver treats the first word in a definition is its name. For
similar reasons, a definition can't start with a comment. Put comments
within functions or after them.
* Don't give up your other tools just yet. It's easy to make a mistake that
the app doesn't recover from when you fix it. Try restarting the app, and if
it still doesn't work, perhaps you need to fix the initial load. This isn't
yet a tool you can keep open for months on end. (And I'm ambivalent about
making it such a tool since your programs might stop working for others.)
* I still see driver and the app being driven occasionally crash. When I do I
try to make things more robust. If you do you'll quite possibly crash again
if you try to restart. In such a situation you'll have to bump down to
editing the underlying version files by other means. See [representation.md](representation.md)
for details of the underlying representation on disk.
* Given the above issues, both this driver and its client freewheeling app
benefit from being launched in terminal windows rather than by being clicked
on in a desktop OS.
* Both freewheeling apps and the driver for them currently benefit from being
launched in terminal windows rather than by being clicked on in a desktop
OS. See [the driver app](https://git.sr.ht/~akkartik/driver.love/src/branch/main/README.md)
for details.
Its immediate upstream is [luaML.love](https://git.sr.ht/~akkartik/luaML.love),
a box model for a Lua-based markup language that models an infinite pannable,
zoomable 2D surface. Updates to it can be downloaded from the following
mirrors:
Its immediate upstream is [text.love](https://git.sr.ht/~akkartik/text.love),
a version without support for line drawings. Updates to it can be downloaded
from the following mirrors: