Client for playing 300 publicly available Sokoban puzzles on a computer or phone.
Go to file
Kartik K. Agaram a428068d3e fix initialization errors using driver.love
Changes inside on.initialize are minefields. Until now, if you made a
mistake when modifying on.initialize, you could end up in a situation
where the app would fail irrecoverably on the next startup. You'd have
to go dig up a text editor to fix it.

After this commit, errors in on.initialize wait for commands from
driver.love just like any other error.

Recovering from errors during initialization is a little different than
normal. I don't know how much of initialization completed successfully,
so I redo all of it.

I think this should be safe; the sorts of things we want to do on
startup tend to be idempotent just like the sorts of things we do within
an event loop with our existing error handling.

Things are still not ideal. Initialization by definition happens only
when the app starts up. When you make changes to it, you won't find out
about errors until you restart the app[1], which can be much later and a
big context switch. But at least you'll be able to fix it in the usual
way. Slightly more seamless[2].

One glitch to note: at least on Linux, an app with an initialization
error feels "sticky". I can't seem to switch focus away from it using
Alt-tab. Hitting F4 on the driver also jarringly brings the client app
back in focus when there was an initialization error. But the mouse does
work consistently. This feels similar to the issues I find when an app
goes unresponsive sometimes. The window manager really wants me to
respond to the dialog that it's unresponsive.

Still, feels like an improvement.

[1] I really need to provide that driver command to restart the app! But
there's no room in the menus! I really need a first-class command
palette like pensieve.love has!

[2] https://lobste.rs/s/idi1wt/open_source_vs_ux
2023-11-17 11:55:57 -08:00
assets flesh out Readme 2023-01-08 08:11:15 -08:00
0000-freewheeling-start new file-system format for freewheeling apps 2023-04-16 11:16:47 -07:00
0001-on better comment 2023-04-20 23:39:36 -07:00
0002-Debug_animations_in_progress debug animations 2023-11-11 10:00:54 -08:00
0003-refresh_debug_animations debug animations 2023-11-11 10:00:54 -08:00
0004-on.update debug animations 2023-11-11 10:00:54 -08:00
0005-animate debug animations 2023-11-11 10:00:54 -08:00
0006-loiter debug animations 2023-11-11 10:00:54 -08:00
0007-save_callstack debug animations 2023-11-11 10:00:54 -08:00
0008-Debug_animation_period debug animations 2023-11-11 10:00:54 -08:00
LICENSE.txt
Manual_tests.md fix initialization errors using driver.love 2023-11-17 11:55:57 -08:00
MemoryReferenceInfo.lua.0
MemoryReferenceInfo.lua.unused
README.md add a fork 2023-10-20 22:34:07 -07:00
app.lua fix initialization errors using driver.love 2023-11-17 11:55:57 -08:00
button.lua use color alpha in button backgrounds 2023-10-16 22:59:04 -07:00
default_map suggest a default layout for freewheeling apps 2023-11-11 10:31:25 -08:00
edit.lua clearer API for drawing a button 2023-10-16 22:57:46 -07:00
file.lua Merge lines.love 2023-08-31 00:13:43 -07:00
json.lua
keychord.lua support for num pad 2023-07-07 18:40:12 -07:00
live.lua fix initialization errors using driver.love 2023-11-17 11:55:57 -08:00
main.lua fix initialization errors using driver.love 2023-11-17 11:55:57 -08:00
nativefs.lua cleaner API for file-system access 2023-08-30 19:04:06 -07:00
reference.md fix a bad merge 2023-08-31 07:23:45 -07:00
search.lua Merge text0 2023-10-15 14:46:50 -07:00
select.lua Merge lines.love 2023-06-04 15:11:24 -07:00
test.lua show another detail on test failure 2023-01-20 21:48:49 -08:00
text.lua delete an unused arg 2023-07-31 14:20:53 -07:00
text_tests bugfix: clear selection when clicking above or below lines 2023-09-20 13:39:29 -07:00
text_tests.lua Merge text0 2023-10-09 21:15:21 -07:00
undo.lua Merge lines.love 2023-04-02 09:22:32 -07:00

README.md

Example "freewheeling" app that can be modified without being restarted

Running this repo in isolation won't be very helpful. If you haven't yet, first check out the driver app. This repo is a template you can copy to create your own live apps that juggle text editor widgets. The editors support copy/paste, search, infinite undo, etc. You can't modify editor functionality live (yet?).

Some reference documentation on how to create your own apps.

This repo is an example of a Freewheeling App, designed above all to be easy to run, easy to modify and easy to share.

Getting started

Install LÖVE. It's just a 5MB download, open-source and extremely well-behaved. I'll assume below that you can invoke it using the love command, but that might vary depending on your OS.

Run this app from the terminal, passing its directory to LÖVE

Hacking

To modify it live without restarting the app each time, download the driver app. Here's an example session using a fork of this repo:

making changes without restarting the app

If you run a .love file, your changes will go into the save directory. If you unzip the .love file into a new directory and run the directory instead, your changes will go straight into the same directory.

Keyboard shortcuts

Up to you! But within the included editor widget if you use it:

  • 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+= to zoom in, ctrl+- to zoom out, ctrl+0 to reset zoom
  • alt+right/alt+left to jump to the next/previous word, respectively
  • mouse drag or shift + movement to select text, ctrl+a to select all

Exclusively tested so far with a US keyboard layout. If you use a different layout, please let me know if things worked, or if you found anything amiss: http://akkartik.name/contact

Known issues

  • 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 for details.

  • No support yet for Unicode graphemes spanning multiple codepoints.

  • No support yet for right-to-left languages.

  • Undo/redo may be sluggish in editor windows containing large files. Large files may grow sluggish in other ways.

  • If you kill the process, say by force-quitting because things things get sluggish, you can lose data.

  • Can't scroll while selecting text with mouse.

  • No scrollbars yet. That stuff is hard.

Mirrors and Forks

This repo is a fork of lines.love, an editor for plain text where you can also seamlessly insert line drawings. Its immediate upstream is text.love, a version without support for line drawings. Updates to it can be downloaded from the following mirrors:

Further forks are encouraged. If you show me your fork, I'll link to it here.

Feedback

Most appreciated.