Experimental notebook UI
Go to file
Kartik K. Agaram 03b0169bef bugfix: don't occlude the horizontal line of blanks 2024-10-06 20:46:34 -07:00
assets refresh Readme 2024-10-06 16:44:24 -07:00
LICENSE.txt add a license 2022-05-16 18:51:28 -07:00
README.md . 2024-10-06 16:53:39 -07:00
array.lua turn move.lua back into its own center without any globals 2024-09-17 16:00:36 -07:00
code.lua debug UI has gone stale, drop it 2024-10-02 15:21:05 -07:00
edit.lua new attribute: border 2024-10-06 14:45:32 -07:00
eval.lua don't attach results to overridden code lines 2024-10-06 13:54:42 -07:00
font_height.lua split up edit.lua without introducing globals 2024-09-17 15:22:56 -07:00
freezer add some styling to the example program 2024-09-30 21:58:19 -07:00
json.lua forgot to add json.lua 2022-05-15 14:36:25 -07:00
loc.lua turn move.lua back into its own center without any globals 2024-09-17 16:00:36 -07:00
main.lua start showing keypresses for demo purposes 2024-09-30 19:48:37 -07:00
move.lua Merge fractions.love 2024-09-26 15:59:03 -07:00
my_string.lua start printing out result of eval 2024-09-20 23:44:33 -07:00
my_table.lua topologically sort and eval all code lines every time file changes 2024-09-21 23:59:40 -07:00
my_utf8.lua Merge fractions.love 2024-09-17 18:10:36 -07:00
parse.lua bugfix: support negative numbers 2024-09-24 13:43:03 -07:00
prose.lua bugfix: don't occlude the horizontal line of blanks 2024-10-06 20:46:34 -07:00
rects.lua provide access to each module's internals 2024-09-22 12:35:51 -07:00
subtle_color.lua experiment: separate colors for LHS and RHS 2024-09-24 14:54:17 -07:00
utils.lua basic arithmetic seems done 2024-09-20 23:44:33 -07:00

README.md

Experimental notebook UI

0 dependencies!

30-second video (no audio)

I'm aiming roughly in the direction of Jonathan Edwards's Subtext 1 and Kragen Sitaker's Bicicleta (1 2).

Design principles:

  • Everything is always editable.
  • Markup for controlling behavior is never hidden.

Current syntax:

  • Unindented lines are prose, indented lines are code.
  • Prose lines support named blanks using [...|...] syntax which gets rendered as 2 lines with the lower line (the name or definition of the blank) in a more subtle color.
  • Prose lines support inline styling using <...|...> syntax, where you can currently specify fg (foreground color), bg (background color) or border (color). For example, <heat|fg=1,0,0>. Colors are triples of 3 numbers between 0 and 1, separated by commas. Use spaces only to separate fg and bg, thus: <heat|fg=1,0,0 bg=0,0,1>.
  • Prose lines support styling --- sections that partition a document. Section styling directives are the same as in inline styles.
  • Code lines can be expressions, and they'll live-update (showing results in cyan).
  • Code lines can assign expressions to names, and they'll live update.
  • Names can only be assigned to once per file. If there's a conflict, no conflicting name will live update.
  • Names not explicitly set in blanks may be filled based on code (with a cyan background).

  • Names can be set in blanks in prose lines, which will override any bindings in code lines.

The following little videos show how cursor movement works. Left/right arrows may sometimes move the cursor up and down between two lines on screen.

Mouse clicks should be fairly intuitive.

Getting started

Install LÖVE. It's just a 5MB download, open-source and extremely well-behaved.

To run from the terminal, pass this directory to LÖVE, optionally with a file path to edit.

Alternatively, turn it into a .love file you can double-click on:

$ zip -r /tmp/notebook.love *.lua

By default, notebook.love reads/writes the file lines.txt in a directory relative to this app.

To open a different file, drop it on the notebook.love window.

Keyboard shortcuts

While editing text:

  • 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

  • No support yet for Unicode graphemes spanning multiple codepoints.

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

  • If you ever see a crash when clicking on the mouse, it might be because a mouse press and release need to happen in separate frames. Try pressing and releasing more slowly and let me know if that helps or not. This is klunky, sorry.

  • 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. Its immediate upstream is text2.love, an embeddable text editor widget which provides features like word-wrap, unlimited undo in 1200 lines of code. 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. Messages, PRs, patches, forks, it's all good.