Fork of Lua 5.1 to encourage end-user programming
Go to file
Kartik K. Agaram c60863347a a larger test image 2021-11-13 23:19:07 -08:00
doc . 2021-11-07 15:24:48 -08:00
src cleaner layout for a function's code and data 2021-11-13 23:14:52 -08:00
.gitattributes . 2021-11-11 08:56:45 -08:00
.gitignore . 2021-11-05 17:06:49 -07:00 new fork of Lua 5.1 2021-10-22 19:24:44 -07:00
Makefile drop an obsolete build target 2021-11-10 08:35:08 -08:00 remove upstream Readmes 2021-11-10 15:50:13 -08:00
counter.teliva main function for other apps besides life.teliva 2021-11-10 16:48:42 -08:00
counter.tlv . 2021-11-10 22:40:36 -08:00
hanoi.lua learning about Lua's debug infrastructure 2021-11-11 22:05:15 -08:00
hanoi.teliva main function for other apps besides life.teliva 2021-11-10 16:48:42 -08:00
hanoi.tlv a larger test image 2021-11-13 23:19:07 -08:00
life.teliva main function for other apps besides life.teliva 2021-11-10 16:48:42 -08:00

Teliva - an environment for end-user programming

“Enable all people to modify the software they use in the course of using it.” —

“What if we, and all computer users, could reach in and modify our favorite apps?” —

“Software must be as easy to change as it is to use.” —

What's this, then?

An extremely naïve, brutalist attempt at packaging up simple Lua (5.1) apps with all the stuff needed to edit and build them.

git clone
cd teliva
make linux
src/teliva hanoi.teliva

Here's an example app (the Tower of Hanoi):

screenshot of Teliva running the Towers of Hanoi

No matter what app you run, you are always guaranteed access to a single obvious, consistent way (currently the hotkey ctrl-e) to edit its sources. And to run the updates after editing.

screenshot of Teliva editing the Towers of Hanoi

Toggle the same hotkey to restart the app with the new sources.

Over time I hope to improve the experience for error messages, failing tests, undoing changes and so on. The emphasis will be on maximizing hackability rather than functionality. In addition to Lua 1.5, this repository currently packages:

Send all praise to them, brickbats to me. I plan to be extremely parsimonious in taking on further dependencies.

Isn't this just an IDE?

There's one big difference: these apps are not intended to be runnable outside of the Teliva environment. Editing the sources will always be a core feature that's front and center in the UI.

At the moment this isn't much of a restriction given how trivial the differences with Lua are. You also don't get much benefit in exchange for taking on this restriction. Let's see if that changes.

A second, more subtle difference: it's primarily an environment for running apps, and only secondarily for editing them. Starting up the environment puts you in a running app by default. Creating an app from a clean slate is a low-priority use case, as is lots of specialized support for developing complex apps. The sweet spot for Teliva is simple apps that people will want to edit after using for a while.

Why Lua?

It's reputedly the fastest interpreted language per line of implementation code.

Will it run any Lua program?

Not quite. My priority is providing a good experience for newcomers to comprehend and modify the programs they use. If it's not clear how to provide that experience for some kinds of Lua programs, I'd rather disable support for them in Teliva and let people use regular Lua (or other languages and environments!) for them.

  • This approach doesn't make sense for batch programs, I think.

  • I don't know how to obtain a simple, shallow graphics stack, so there's no support for graphics at the moment.

  • Teliva initializes the ncurses library by default, so apps should assume they have access to a text-mode window for printing text to, and a keyboard for reading unbuffered keystrokes from. Compare hanoi.teliva with hanoi.lua to get a sense for what changes are needed.

  • I want to provide sandboxed access to system resources (file system, network, etc.) which will likely create incompatibilities with the standard library. I'm disinclined to try to improve on Lua syntax, however. It's not my favorite, but it's good enough.

Teliva is not tested much at all yet. This is my first time programming either in Lua or within Lua. So bug reports are most appreciated if Lua programs behave unexpectedly under Teliva.

Will it run any ncurses program?

Hopefully. ncurses is extremely portable; I don't test on all the configurations ncurses supports. In particular, I assume terminals with colors and UTF-8 support.

Will it run any Lua lcurses program?

There will likely be some exceptions that I'll record here as I encounter them:

  • lcurses has some strange “smarts” that result in window:getch() not behaving like the global curses.getch(). Teliva is consistent with the underlying ncurses.

What's with the name?

Teliva is the Tamil root for clear. Very much aspirational.