In-progress browser for a directory of text files
Go to file
Kartik K. Agaram 459b1df08a support browsing directories outside save dir 2023-10-20 00:00:38 -07:00
assets
0000-freewheeling-start Merge template-live-editor 2023-04-16 11:30:56 -07:00
0001-on update one bit of documentation 2023-04-22 22:07:37 -07:00
0002-vx backport a few more changes from driver.love 2023-04-22 22:29:22 -07:00
0003-scale make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0004-vy backport a few more changes from driver.love 2023-04-22 22:29:22 -07:00
0005-Cursor_node make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0006-on.mouse_press Merge driver.love 2023-10-17 12:11:35 -07:00
0007-on_text mock-up of reply buttons 2023-06-22 18:17:01 -07:00
0008-Viewport start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0009-on.code_change start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0010-initialize_editor mock-up of reply buttons 2023-06-22 18:17:01 -07:00
0011-box_height backport a few more changes from driver.love 2023-04-22 22:29:22 -07:00
0012-on.initialize support browsing directories outside save dir 2023-10-20 00:00:38 -07:00
0013-font make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0014-y_of_schema1 make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0015-line_height make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0016-schema1_of_y make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0017-on.mouse_release Merge driver.love 2023-09-09 21:58:09 -07:00
0018-on.update start saving changes 2023-06-22 18:18:02 -07:00
0019-B make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0021-compute_layout reply button adds a reply 2023-06-22 19:35:13 -07:00
0022-on.text_input bugfix: computing definition names 2023-10-17 11:51:49 -07:00
0023-on.keychord_press bugfix: computing definition names 2023-10-17 11:51:49 -07:00
0024-copy_shape make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0025-add_thick_line make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0026-on.draw no menu bar for file picker 2023-06-21 22:30:25 -07:00
0027-Surface remove some test data 2023-07-01 13:18:25 -07:00
0028-A bounds when panning by keyboard 2023-06-23 22:45:55 -07:00
0030-update_editor_box start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0031-cols some helpers 2023-06-20 17:34:03 -07:00
0032-rows some helpers 2023-06-20 17:34:03 -07:00
0035-mouse_cursor make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0036-Mouse_cursor make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0037-set_mouse_cursor make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0040-Menu_background_color make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0041-Menu_border_color make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0042-Menu_command_color make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0043-Menu_highlight_color make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0044-add_hotkey_to_menu make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0052-draw_cursor make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0061-on.key_release get rid of animation and editor movement 2023-06-18 13:04:18 -07:00
0062-on.save_settings Merge driver.love 2023-07-10 20:02:06 -07:00
0072-Spawn_point make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0081-draw_menu_bar load in-memory data for a thread 2023-06-18 20:10:20 -07:00
0096-iscale make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0097-sy make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0098-sx make order of files consistent with upstream 2023-04-22 18:50:18 -07:00
0106-on.load_settings Merge driver.love 2023-07-10 20:02:06 -07:00
0110-Border_color new fork: pothi 2023-06-18 11:16:58 -07:00
0110-on.mouse_wheel_move support mouse wheel 2023-06-18 22:18:53 -07:00
0111-Files load in-memory data for a thread 2023-06-18 20:10:20 -07:00
0112-Global_state start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0113-draw_surface start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0117-open_thread bounds when panning by keyboard 2023-06-23 22:45:55 -07:00
0118-load_subtree reply starting to work 2023-06-22 23:43:03 -07:00
0119-load_metadata use absolute path for metadata 2023-10-19 23:49:23 -07:00
0120-initialize_item more conflict-resistant comment storage 2023-07-16 13:45:30 -07:00
0121-full_path support browsing directories outside save dir 2023-10-20 00:00:38 -07:00
0122-metadata_file load in-memory data for a thread 2023-06-18 20:10:20 -07:00
0124-Indent start rendering the initialized thread 2023-06-20 20:10:10 -07:00
0125-Width start rendering the initialized thread 2023-06-20 20:10:10 -07:00
0127-Inter_comment_spacing add some vertical space between comments 2023-06-20 22:39:45 -07:00
0128-reset_viewport start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0129-initialize_file_picker support browsing directories outside save dir 2023-10-20 00:00:38 -07:00
0130-lay_out_file_picker start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0131-File_picker_margin start rendering file picker on the surface as well 2023-06-21 22:28:56 -07:00
0132-in_rect click on file picker to open thread 2023-06-21 22:48:47 -07:00
0133-Reply_button_border_color start drawing 'reply' buttons under items 2023-06-21 23:28:25 -07:00
0134-Reply_button_color start drawing 'reply' buttons under items 2023-06-21 23:28:25 -07:00
0135-on_button mock-up of reply buttons 2023-06-22 18:17:01 -07:00
0136-update_all_editors start saving changes 2023-06-22 18:18:02 -07:00
0137-quit_all_editors save to disk when leaving thread view 2023-06-22 18:23:04 -07:00
0138-on.quit save to disk when leaving thread view 2023-06-22 18:23:04 -07:00
0139-new_comment more conflict-resistant comment storage 2023-07-16 13:45:30 -07:00
0141-indent reply button adds a reply 2023-06-22 19:35:13 -07:00
0142-reply_button couple of renames 2023-06-22 23:49:49 -07:00
0143-find_node reply starting to work 2023-06-22 23:43:03 -07:00
0144-new_comment_id more conflict-resistant comment storage 2023-07-16 13:45:30 -07:00
0145-save_metadata use absolute path for metadata 2023-10-19 23:49:23 -07:00
0146-find_comment_index reply starting to work 2023-06-22 23:43:03 -07:00
0147-Viewport_bounds bounds when panning by keyboard 2023-06-23 22:45:55 -07:00
0148-compute_viewport_bounds bounds when panning by keyboard 2023-06-23 22:45:55 -07:00
0149-Random_string_chars more conflict-resistant comment storage 2023-07-16 13:45:30 -07:00
0150-random_string more conflict-resistant comment storage 2023-07-16 13:45:30 -07:00
0151-comment_path more conflict-resistant comment storage 2023-07-16 13:45:30 -07:00
0152-Data_dir support browsing directories outside save dir 2023-10-20 00:00:38 -07:00
LICENSE.txt
Manual_tests.md bugfix: delete definition 2023-06-10 12:49:06 -07:00
MemoryReferenceInfo.lua.0
MemoryReferenceInfo.lua.unused
README.md Merge lines.love 2023-09-10 21:56:43 -07:00
app.lua Merge luaML.love 2023-10-16 23:46:49 -07:00
button.lua use color alpha in button backgrounds 2023-10-16 22:59:04 -07:00
default_map use absolute path for metadata 2023-10-19 23:49:23 -07: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 Merge driver.love 2023-09-09 11:05:20 -07:00
main.lua Merge driver.love 2023-10-09 21:34:28 -07:00
nativefs.lua cleaner API for file-system access 2023-08-30 19:04:06 -07:00
reference.md Merge driver.love 2023-08-31 07:40:49 -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
text.lua Merge driver.love 2023-07-31 14:40:40 -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 luaML.love 2023-10-09 21:32:23 -07:00
undo.lua Merge lines.love 2023-04-02 09:22:32 -07:00

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:

making changes without restarting the 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 faster

    • pagedown and pageup are aliases for shift+down and shift+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:

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

Feedback

Most appreciated.