about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2022-01-18 20:11:56 -0800
committerKartik K. Agaram <vc@akkartik.com>2022-01-18 20:11:56 -0800
commit3f6861b4dbeb0f7954f6b5aeb4555048be925af2 (patch)
treed09c9db1f44e9d02b7a30fbc9b9bebc11c4ec288
parent5258fbec7cbcf8acf8aa1d2bc07b35a1cea8d514 (diff)
downloadteliva-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.tlv9
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)