A viewer for plain text files
Go to file
Kartik K. Agaram dafc92c010 Merge text2.love
The previous bugfix has a different scenario in this fork, since we
mostly don't see the cursor:

  edit a temporary file using a different editor, add some text to it
  open the file using view2.love
  search for some text that is not at the start of the file
    (search still uses the cursor)
  close the editor
  delete the file
  reopen the editor without specifying a file
  try searching for some string

Before this commit, this would yield a crash (because we're trying to
search from a position off the end of the file) the file).
2024-10-02 10:10:25 -07:00
LICENSE.txt add a license 2022-05-16 18:51:28 -07:00
README.md Merge text2.love 2024-09-30 00:51:17 -07:00
edit.lua Merge text2.love 2024-10-02 10:10:25 -07:00
json.lua forgot to add json.lua 2022-05-15 14:36:25 -07:00
main.lua new fork: view2, a readonly text file viewer 2024-09-27 21:54:37 -07:00

README.md

A viewer for plain text.

0 dependencies!

Proportional font support, word-wrap, scrolling, clipboard integration.

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/view2.love *.lua

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

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

Keyboard shortcuts

While editing text:

  • ctrl+f to find patterns within a file
  • ctrl+c to copy
  • ctrl+= to zoom in, ctrl+- to zoom out, ctrl+0 to reset zoom
  • mouse drag 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 files:

  • edit.load_file(editor, filename)

Remember editor settings across restart:

  • settings = edit.load_settings()
  • edit.new_from_settings(settings, top, left, right, bottom) -- side-effect: resizes the window
  • edit.save_settings(editor)

Places to wire into your LÖVE app:

  • edit.draw(editor)

  • edit.update(editor, dt)

  • 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 default
  • edit.absolutize(filename) -- included for convenience

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.