diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2022-01-18 20:11:56 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2022-01-18 20:11:56 -0800 |
commit | 3f6861b4dbeb0f7954f6b5aeb4555048be925af2 (patch) | |
tree | d09c9db1f44e9d02b7a30fbc9b9bebc11c4ec288 | |
parent | 5258fbec7cbcf8acf8aa1d2bc07b35a1cea8d514 (diff) | |
download | teliva-3f6861b4dbeb0f7954f6b5aeb4555048be925af2.tar.gz |
gemini: demo of context-sensitive menu
Basic procedure: - save/restore `menu` around call of a function (directly or indirectly called by `update`) that encapsulates some state change - override `menu` inside the function to correspond to its update loop
-rw-r--r-- | gemini.tlv | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/gemini.tlv b/gemini.tlv index a01e00d..69621b3 100644 --- a/gemini.tlv +++ b/gemini.tlv @@ -246,6 +246,11 @@ > local result = '' > local cursor = 1 > local screen_rows, screen_cols = window:getmaxyx() + > menu = { + > {'enter', 'submit'}, + > {'ctrl-g', 'cancel'}, + > {'ctrl-u', 'clear'}, + > } > while true do > window:mvaddstr(screen_rows-1, 9, '') > window:clrtoeol() @@ -278,7 +283,7 @@ > cursor = 1 > elseif key == 10 then -- enter > return result - > elseif key == 24 then -- ctrl-x + > elseif key == 7 then -- ctrl-g > return nil > end > end @@ -336,7 +341,9 @@ > window:clrtoeol() > window:mvaddstr(screen_rows-1, 5, 'go: ') > curses.curs_set(2) + > local old_menu = menu > local new_url = edit_line(window) + > menu = old_menu > if new_url then > state.url = new_url > gemini_get(new_url) |