Kartik K. Agaram b2785ac191 | ||
---|---|---|
assets | ||
0000-freewheeling-start | ||
0001-on | ||
0002-vx | ||
0003-scale | ||
0004-vy | ||
0005-Cursor_node | ||
0006-on.mouse_press | ||
0007-on_text | ||
0008-Viewport | ||
0009-on.code_change | ||
0010-initialize_editor | ||
0011-box_height | ||
0012-on.initialize | ||
0013-font | ||
0014-y_of_schema1 | ||
0015-line_height | ||
0016-schema1_of_y | ||
0017-on.mouse_release | ||
0018-on.update | ||
0019-B | ||
0021-compute_layout | ||
0022-on.text_input | ||
0023-on.keychord_press | ||
0024-copy_shape | ||
0025-add_thick_line | ||
0026-on.draw | ||
0027-Surface | ||
0028-A | ||
0030-update_editor_box | ||
0031-cols | ||
0032-rows | ||
0035-mouse_cursor | ||
0036-Mouse_cursor | ||
0037-set_mouse_cursor | ||
0040-Menu_background_color | ||
0041-Menu_border_color | ||
0042-Menu_command_color | ||
0043-Menu_highlight_color | ||
0044-add_hotkey_to_menu | ||
0052-draw_cursor | ||
0061-on.key_release | ||
0062-on.save_settings | ||
0072-Spawn_point | ||
0081-draw_menu_bar | ||
0096-iscale | ||
0097-sy | ||
0098-sx | ||
0106-on.load_settings | ||
0110-Border_color | ||
0110-on.mouse_wheel_move | ||
0111-Files | ||
0112-Global_state | ||
0113-draw_surface | ||
0117-open_thread | ||
0118-load_subtree | ||
0119-load_metadata | ||
0120-initialize_item | ||
0121-full_path | ||
0122-metadata_file | ||
0124-Indent | ||
0125-Width | ||
0127-Inter_comment_spacing | ||
0128-reset_viewport | ||
0129-initialize_file_picker | ||
0130-lay_out_file_picker | ||
0131-File_picker_margin | ||
0132-in_rect | ||
0133-Reply_button_border_color | ||
0134-Reply_button_color | ||
0135-on_button | ||
0136-update_all_editors | ||
0137-quit_all_editors | ||
0138-on.quit | ||
0139-new_comment | ||
0141-indent | ||
0142-reply_button | ||
0143-find_node | ||
0144-new_comment_id | ||
0145-save_metadata | ||
0146-find_comment_index | ||
0147-Viewport_bounds | ||
0148-compute_viewport_bounds | ||
0149-Random_string_chars | ||
0150-random_string | ||
0151-comment_path | ||
0152-Data_dir | ||
LICENSE.txt | ||
Manual_tests.md | ||
MemoryReferenceInfo.lua.0 | ||
MemoryReferenceInfo.lua.unused | ||
README.md | ||
app.lua | ||
button.lua | ||
default_map | ||
edit.lua | ||
file.lua | ||
json.lua | ||
keychord.lua | ||
live.lua | ||
main.lua | ||
nativefs.lua | ||
reference.md | ||
search.lua | ||
select.lua | ||
test.lua | ||
text.lua | ||
text_tests | ||
text_tests.lua | ||
undo.lua |
README.md
In progress. Browse a directory of articles like Kragen Sitaker's dercuano.
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.
Status: you can edit articles and reply to them. There isn't any metadata for author or timestamp yet, so it's up to you to add them in the comment body. You're also on your own to commit the changes to git and publish them somewhere others can get to them.
The name: 'pothi' is Sanskrit for 'book', often a loose-bound collection of palm leaf manuscripts.
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.
Open the app. Initially you'll see a series of two errors. The first error looks like this:
Error: no directory /home/akkartik/.local/share/love/pothi/data found. Please store articles to browse there before opening this app.
Put any articles you'd like to browse at this location. (You can copy it from
the error to the clipboard by pressing ctrl+c
.) Quit and restart.
Now you'll see the second error:
Sorry, I am not permitted to create directories (folders). Please create directory /home/akkartik/.local/share/love/pothi/data/comments for storing comments in.
Create the sub-directory mentioned here. (Again, you can copy the error
message to the clipboard by pressing ctrl+c
.) Quit and restart.
Now the app will open to a list of files. Click on any filename to read it and leave comments on it. The comments will live on your computer. Share them with others by any means of your choice.
It's not the cleanest onboarding in the world. As a concrete example, on my machine I ran the following commands in a terminal window to get past both errors:
cd /home/akkartik/.local/share/love/pothi
git clone http://canonical.org/~kragen/sw/pavnotes2.git data
mkdir data/comments
Terminal invocation
You can run this app from the terminal just like any other LÖVE app. This ability is particularly useful if you would like to maintain multiple directories of articles and switch between them.
To load any other directories besides data/
, run the app from a terminal and
provide the name of the directory in the command.
As a concrete example, suppose you've set things up so you can run the app from the terminal by running:
love pothi.love
Further suppose you loaded some articles as follows:
cd ~/.local/share/love/pothi
git clone http://canonical.org/~kragen/sw/pavnotes2.git # no directory name provided
# articles now saved to a directory called pavnotes2
mkdir pavnotes2/comments
To now browse these articles, you'd run:
love pothi.love pavnotes2
Hacking
To modify it live without restarting the app each time, download the driver app. Here's an example session using a different app:
Some reference documentation on how to create your own apps.
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
While reading a single file:
-
ctrl+o
to switch to a different file -
ctrl+f
to search for strings -
ctrl+=
to zoom in,ctrl+-
to zoom out,ctrl+0
to reset zoom -
mouse drag or
shift
+ movement to select text,ctrl+a
to select all -
mouse drag and arrow keys pan the surface
-
shift
+arrow keys pan fasterpagedown
andpageup
are aliases forshift+down
andshift+up
respectively
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:
- https://git.sr.ht/~akkartik/pothi.love
- https://nest.pijul.com/akkartik/pothi.love (using the Pijul version control system)
Further forks are encouraged. If you show me your fork, I'll link to it here.