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 acertain protocol:* https://git.sr.ht/~akkartik/night.love -- sample app showing a slowlyrevolving 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 threadvisualizer* https://git.sr.ht/~akkartik/spell-cards.love -- flash cards for drillingspelling* https://git.sr.ht/~akkartik/bf.love -- BF programming environment* https://git.sr.ht/~akkartik/luaML.love -- simple web-browser-like boxmodel implementation* https://git.sr.ht/~akkartik/template-live-editor -- template for new appsthat need editor widgets* ...
My tentative goal is to be able to post comments on articles, send updatesaround using git, and browse comments from all commenters in line witharticles. It's unclear whether it will be economical to support editingarticles. My priority is a commenting experience rather than a CMS for theauthor(s) of articles.
Communication happens over temporary files in the file system that should livein an internal directory, but might end up in your home directory. Using thesefiles, driver.love can make changes to these apps without needing to restartthem.
Status: you can read articles. There's a 'comment' button, but it doesn't doanything yet.

_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), aneditor 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) clientapp 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 beforce-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 withoutrestarting the driver. Just always open the app and then the driver. If youclose 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, createa folder called `data/` under this path, put text files there. Restart.
Now try pressing `ctrl+l` in this driver app. Select `on` by some combinationof typing letters and moving the arrow keys. It provides a useful orientationof available hooks when programming live, and also mentions an importantgotcha.
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 syntaxwhere the name of the definition comes first: `foo = function(...) ... end`rather than `function foo(...) ... end`. The driver treats the first word in adefinition is its name.
```cd ~/.local/share/love/pothigit 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 scrollingor 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 availableto 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. Orif you close one app and open another without restarting the driver. Justalways open the app and then the driver. If you close the app, close thedriver.* You have to follow a specific Lua syntax where the name of the definitioncomes first: `foo = function(...) ... end` rather than `function foo(...)... end`. The driver treats the first word in a definition is its name. Forsimilar reasons, a definition can't start with a comment. Put commentswithin functions or after them.* Don't give up your other tools just yet. It's easy to make a mistake thatthe app doesn't recover from when you fix it. Try restarting the app, and ifit still doesn't work, perhaps you need to fix the initial load. This isn'tyet a tool you can keep open for months on end. (And I'm ambivalent aboutmaking 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 Itry to make things more robust. If you do you'll quite possibly crash againif you try to restart. In such a situation you'll have to bump down toediting 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 appbenefit from being launched in terminal windows rather than by being clickedon in a desktop OS.
* Both freewheeling apps and the driver for them currently benefit from beinglaunched in terminal windows rather than by being clicked on in a desktopOS. 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 followingmirrors:
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 downloadedfrom the following mirrors: