~akkartik/text2.love

a text editor supporting proportional fonts and word wrap
4f68cfdf — Kartik K. Agaram 11 days ago
bugfix: cursor _can_ get go out of viewport
76dd4f26 — Kartik K. Agaram 23 days ago
bugfix: avoid drawing text below edit.bottom
6cd1fcc4 — Kartik K. Agaram 23 days ago
extract a variable

refs

main
browse  log 

clone

read-only
https://git.sr.ht/~akkartik/text2.love
read/write
git@git.sr.ht:~akkartik/text2.love

You can also use your local clone with git send-email.

#An editor for plain text.

0 dependencies!

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 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.

#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 initialization
  • edit.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:

  • edit.new_from_settings(settings, top, left, right, bottom) -- caller first loads settings first from some file
  • settings = edit.settings(editor) -- caller writes settings to some file

Places to wire into your LÖVE app:

  • edit.draw(editor)

  • edit.key_press(editor, key, scancode, isrepeat)

  • edit.text_input(editor, t)

  • edit.key_release(editor, key, scancode)

  • edit.mouse_press(editor, x,y, mouse_button)

  • edit.mouse_release(editor, x,y, mouse_button)

  • edit.mouse_wheel_move(editor, dx,dy)

  • edit.resize(editor, width, height, right, bottom)

  • edit.focus(editor, in_focus)

Optional helpers:

  • edit.update_font_settings(editor, font_height) -- automatically called by keyboard shortcuts by default
  • edit.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.

#Feedback

Most appreciated. Messages, PRs, patches, forks, it's all good.

Do not follow this link