Commit Graph

483 Commits

Author SHA1 Message Date
Kartik K. Agaram 3dae8ffc3b toot-toot: cursor_down now handles wrapping lines 2021-12-23 12:58:31 -08:00
Kartik K. Agaram 996519c204 clean up debug prints 2021-12-23 12:34:50 -08:00
Kartik K. Agaram a5533d7940 toot-toot: plug width into cursor movement 2021-12-23 12:33:41 -08:00
Kartik K. Agaram 916857dae0 cleaner test message
Was printing over passing tests for some reason.
2021-12-23 12:30:28 -08:00
Kartik K. Agaram 984d345089 toot-toot: reorg definitions 2021-12-23 11:24:44 -08:00
Kartik K. Agaram 34e1595922 toot-toot: clean up history 2021-12-23 11:09:01 -08:00
Kartik K. Agaram a2cb3da0c9 toot-toot: cursor_up now handles wrapping lines 2021-12-23 11:08:56 -08:00
Kartik K. Agaram c1bcd566e9 snapshot: more tests for cursor_up
I think this may be all the tests. Now to make them pass..
2021-12-23 10:42:57 -08:00
Kartik K. Agaram 7a7a334a5d toot-toot: more elaborate cursor_up 2021-12-22 20:28:58 -08:00
Kartik K. Agaram 2c76aa9ff0 toot-toot: more verbose but clearer cursor_down
I actually got all tests to pass on the first try.
2021-12-22 18:44:03 -08:00
Kartik K. Agaram 77b464fbf0 clean up my debug conlang
This isn't the ideal implementation either. Pure spaghetti. But I need
to clean up the debug prints to see that.
2021-12-22 17:48:18 -08:00
Kartik K. Agaram 940b885be7 toot-toot: redo cursor_down as an experiment
I want to support cursor movement across wrapped lines, and the old
implementation doesn't seem on the right track for that.

Interesting that this required me to add the new symmetric test.
2021-12-22 17:45:51 -08:00
Kartik K. Agaram c393528cd2 . 2021-12-22 17:39:31 -08:00
Kartik K. Agaram 348945321d errors during tests are now handled
I should have documented that I'd never actually seen that code path
trigger before. Here's a minimal test that did it just now:

  function test_foo()
    return a+1
  end

  E2: [string "test_foo"]:2: attempt to perform arithmetic on global 'a' (a nil value)

A simple missing variable doesn't do it since it just evaluates to nil.

Without this commit, the above test was silently continuing to the main
app after failing tests.
2021-12-22 15:09:57 -08:00
Kartik K. Agaram e7a73626e8 toot-toot: a few more tests
..before a change in approach.
2021-12-22 11:54:54 -08:00
Kartik K. Agaram 0a1d5d61cb . 2021-12-22 11:41:45 -08:00
Kartik K. Agaram 343316dcfa more precise control over menu order
I can't believe I didn't notice this until now.
2021-12-22 00:27:50 -08:00
Kartik K. Agaram c537e7bc2d gemini: back button 2021-12-22 00:07:16 -08:00
Kartik K. Agaram e20f464484 . 2021-12-22 00:06:26 -08:00
Kartik K. Agaram a5ce055762 . 2021-12-22 00:05:08 -08:00
Kartik K. Agaram 3dda99014c fix arrow keys in big picture view on Mac
Turns out arrow keys are considered `isprint()` on Mac.
2021-12-21 23:50:56 -08:00
Kartik K. Agaram a9e400bbb4 gemini: links 2021-12-21 23:38:04 -08:00
Kartik K. Agaram 712d80e48a bugfix: ensure definition to edit has some name 2021-12-21 21:18:16 -08:00
Kartik K. Agaram 7cf65a3bea less confusing name 2021-12-21 19:59:15 -08:00
Kartik K. Agaram 577d47a6a7 arrow keys in big picture view 2021-12-21 19:53:32 -08:00
Kartik K. Agaram 3a20c0e227 gemini: echo urls while typing in
Let's see how much we need to tweak this solution.
2021-12-21 17:52:31 -08:00
Kartik K. Agaram f689fb7bed gemini: slightly cleaner rendering of owner input
This still only works if I remove the call to `refresh()` inside
`Wgetch()`. With that call no keystrokes are displayed. Looks like
ncurses doesn't include user input when refreshing the window. Unclear
if there's an easy way to support that while keeping the menu visible.
2021-12-21 16:15:40 -08:00
Kartik K. Agaram 41bf615f43 nail down trusted Teliva channels a little more
In each session, Teliva has to bootstrap a trusted channel with the
computer owner while running arbitrarily untrusted code. So let's get
really, really precise about what the trusted channel consists of:
  - the bottom-most row of screen containing the menu
  - the keystrokes the owner types in
  - ncurses COLOR_PAIR slots 254 (menu) and 255 (error)

One reason the menu colors are important: we don't want people to get
used to apps that hide the menu colors by setting default
foreground/background to invisible and then drawing their own menu one
row up.

The error COLOR_PAIR I don't see any reason to carve out right now, but
it seems like a good idea for Teliva the framework to not get into the
habit of apps doing some things for it.

I'm not sure how realistic all this is (I feel quite ill-equipped to
think about security), but it seems worthwhile to err on the side of
paranoia. Teliva will be paranoid so people don't have to be.
2021-12-21 15:47:55 -08:00
Kartik K. Agaram 609730071e keep Teliva apps from pretending to be Teliva
Kind of a subtle idea. Teliva the framework is intended to be
trustworthy software that people install on their computers. The apps
people run using Teliva may be less trustworthy. The whole point of
Teliva is to provide a sandbox for running code before you trust it.

One way (of many) apps can be malicious is by subtly getting between
what people see and reality. Imagine, for example, an app that draws a
fake menu bar and offers a different hotkey to edit source code. When
someone presses that hotkey they think they're using the standard Teliva
editor but they're really using an editor within the app, which the app
uses to hide its most malicious bits from view.

Down the road Teliva will have more bits of UI, such as for asking for
permission to read sensitive data. It's important that people understand
what they're granting permission to, that apps can't tamper with the
communications channel between them and Teliva.

This is likely just one of many ways for an app to break out of its
sandbox. Teliva isn't sandboxed yet. I'm just taking my first steps on
this journey. In particular, there are other mechanisms for asking for
user input besides `getch()`. I don't yet have a big-picture view of the
Teliva sandbox.

It seems clear that I need to educate people on the difference between
different parts of screen. Depending on the app you install, most of the
screen may be a dark forest. It'll be important to know where the safe
path is, where you can speak to trusted advisors while in the forest.
2021-12-21 15:27:34 -08:00
Kartik K. Agaram 53f235fd26 minor tweaks 2021-12-21 15:06:43 -08:00
Kartik K. Agaram 7eaca58762 gemini: ctrl-g to open a new page 2021-12-21 14:12:17 -08:00
Kartik K. Agaram 5c46538d2d start of a gemini browser 2021-12-20 12:19:05 -08:00
Kartik K. Agaram c4984c2ae5 fix stale readme 2021-12-20 07:05:50 -08:00
Kartik K. Agaram dcef2347dd document dbg 2021-12-18 19:33:54 -08:00
Kartik K. Agaram 59f223e7cb toot-toot: save prose somewhere
This is still quite klunky. Don't expect toot-toot to be a complete text
editor. In particular, it'll happily lose toot data if you try to edit
the app while editing a toot. Teliva is paranoid about avoiding data
loss, but toot-toot.tlv is not.

Mostly I just want toot-toot to interact with the clipboard. The only
reason save exists is that copying directly from within the app inserts
spurious line breaks. So now I'm saving to file, then `cat`ing file,
then copying each toot out.

I initially tried to use ctrl-s for the save hotkey, but that conflicts
with terminal flow-control, and it's not obvious how ncurses manages
IXON. And I don't want to go around ncurses and do something that's very
likely to be unportable.

Even ctrl-w, I worry that there are terminals out there that will close
tab or something stupid like that.

Feature wish list:
  - a hook to execute after exit. Just calling os.exit() doesn't work
    because the screen still clears any final prints when Teliva exits.
    Not sure how to handle this. Ncurses doesn't seem to have anything
    beyond endwin() for cleaning up after itself.
  - a hook to execute before exit, for things like asking for confirmation/save
  - a place for 'flash' notification messages, like that the file was saved
2021-12-18 09:45:13 -08:00
Kartik K. Agaram d818efb7c8 pay more attention to where we display the cursor
It's still just in app control; I'm resisting the urge to introduce
"smarts".
2021-12-18 09:32:37 -08:00
Kartik K. Agaram 9fe884c03a streamline an app; pull useful stuff into template 2021-12-18 08:41:19 -08:00
Kartik K. Agaram 191538baf7 drop ASan from Makefile
Accidentally added at some point. It's a useful debugging aide, but I
don't want to require the additional dependencies on a first run.
2021-12-18 07:58:18 -08:00
Kartik K. Agaram c55c5a7b0c mention programming framework in Readme 2021-12-18 07:55:55 -08:00
Kartik K. Agaram 1d9a4fa1d5 ctrl-u: clear prose 2021-12-17 23:19:59 -08:00
Kartik K. Agaram 235e103824 bug: handle digits in prose
Lua has some Javascript-esque gotchas here. Too quick to coerce between
types.
2021-12-17 23:10:13 -08:00
Kartik K. Agaram 67264c86f8 clean up cursor_up 2021-12-17 23:03:23 -08:00
Kartik K. Agaram 04a9a63fc0 two implementations of cursor_up 2021-12-17 23:00:52 -08:00
Kartik K. Agaram caccafbc2c better copy on test failures 2021-12-17 22:38:00 -08:00
Kartik K. Agaram d6129cd571 correct count of test failures 2021-12-17 22:35:21 -08:00
Kartik K. Agaram 42b1bd842c keep tests from messing up big picture 2021-12-17 22:23:18 -08:00
Kartik K. Agaram c12ba48a63 one more protection against Lua stack leak 2021-12-17 22:23:18 -08:00
Kartik K. Agaram 92fe487349 experimental support for test errors 2021-12-17 22:23:17 -08:00
Kartik K. Agaram 580501b342 start of a test framework
Follows https://github.com/akkartik/wart, https://github.com/akkartik/mu0,
https://github.com/akkartik/mu1 and https://github.com/akkartik/mu.
2021-12-17 22:23:17 -08:00
Kartik K. Agaram 3921337b3f yet another stab at reorganizing stack assertions 2021-12-17 21:32:32 -08:00