Kartik K. Agaram 03b0169bef | ||
---|---|---|
assets | ||
LICENSE.txt | ||
README.md | ||
array.lua | ||
code.lua | ||
edit.lua | ||
eval.lua | ||
font_height.lua | ||
freezer | ||
json.lua | ||
loc.lua | ||
main.lua | ||
move.lua | ||
my_string.lua | ||
my_table.lua | ||
my_utf8.lua | ||
parse.lua | ||
prose.lua | ||
rects.lua | ||
subtle_color.lua | ||
utils.lua |
README.md
Experimental notebook UI
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 specifyfg
(foreground color),bg
(background color) orborder
(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 filectrl+c
to copy,ctrl+x
to cut,ctrl+v
to pastectrl+z
to undo,ctrl+y
to redoctrl+=
to zoom in,ctrl+-
to zoom out,ctrl+0
to reset zoomalt+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.
- https://git.sr.ht/~akkartik/highlight.love -- A viewer for plain text with color markup.
Feedback
Most appreciated. Messages, PRs, patches, forks, it's all good.