Kartik K. Agaram
373c3c477b
Scenario: open a (new) file in the editor type some text into a file (so cursor is not at the start) close the editor delete the file reopen the editor without specifying a file Before this commit, the cursor wouldn't be visible (it's off the end of the file), and typing any letters would crash the editor. |
||
---|---|---|
LICENSE.txt | ||
README.md | ||
edit.lua | ||
json.lua | ||
main.lua |
README.md
An editor for plain text.
Proportional font support, word-wrap, scrolling, clipboard integration, unlimited undo.
Reliable; tested with Moby Dick.
Easy to understand. 1200 lines of code excluding comments.
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/text2.love *.lua
By default, text2.love reads/writes the file lines.txt
in
a directory relative to this app.
To open a different file, drop it on the text2.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.
API
The editor is entirely within edit.lua, which should be easy to include in other LÖVE projects. It depends on one external (but included) library: json.lua.
Initialization and preflight check:
edit.load()
-- one-time initializationedit.is_this_love_version_supported()
edit.preferred_love_version()
Create empty editor within given borders:
editor = edit.new_from_defaults(top, left, right, bottom)
Load and (auto)save files:
edit.load_file(editor, filename)
edit.maybe_autosave(editor, dt)
edit.final_save(editor)
Remember editor settings across restart:
settings = edit.load_settings()
edit.new_from_settings(settings, top, left, right, bottom)
-- side-effect: resizes the windowedit.save_settings(editor)
Places to wire into your LÖVE app:
-
edit.draw(editor)
-
edit.on_key_pressed(editor, key, scancode, isrepeat)
-
edit.on_text_input(editor, t)
-
edit.on_key_released(editor, key, scancode)
-
edit.on_mouse_pressed(editor, x,y, mouse_button)
-
edit.on_mouse_released(editor, x,y, mouse_button)
-
edit.on_mouse_wheel_moved(editor, dx,dy)
-
edit.resize(editor, width, height, right, bottom)
-
edit.on_focus(editor, in_focus)
Optional helpers:
edit.update_font_settings(editor, font_height)
-- automatically called by keyboard shortcuts by defaultedit.absolutize(filename)
-- included for convenience
Mirrors and Forks
This repo is a fork of lines.love, aiming to be more elegant and have fewer bugs. Updates to it can be downloaded from:
Further forks are encouraged. If you show me your fork, I'll link to it here.
- https://git.sr.ht/~akkartik/view2.love -- a stripped down version without support for modifying files; useful starting point for some forks.
- https://git.sr.ht/~akkartik/fractions.love -- an example showing how to
enforce arbitrary policies about placing and decorating characters by
overriding the workhorse internal
I.get_rect
method.
Feedback
Most appreciated. Messages, PRs, patches, forks, it's all good.