sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
commit 90dfc3ae853b4f164ba3d18267aafdb25bc885c7
parent 44336aa8ce39ea0769ad03ec3fac483ddc0e855b
Author: Cameron Matheson <cam+sup@cammunism.org>
Date:   Thu, 19 Nov 2009 23:23:15 -0500

Make sup's textfield behave more like readline

Diffstat:
M lib/sup/textfield.rb | 24 +++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git a/lib/sup/textfield.rb b/lib/sup/textfield.rb
@@ -102,12 +102,18 @@ class TextField
         Ncurses::Form::REQ_DEL_CHAR
       when Ncurses::KEY_BACKSPACE, 127 # 127 is also a backspace keysym
         Ncurses::Form::REQ_DEL_PREV
-      when 1 #ctrl-a
+      when ?\C-a
+        nop
         Ncurses::Form::REQ_BEG_FIELD
-      when 5 #ctrl-e
+      when ?\C-e
         Ncurses::Form::REQ_END_FIELD
-      when 11 # ctrl-k
+      when ?\C-k
         Ncurses::Form::REQ_CLR_EOF
+      when ?\C-u
+        set_cursed_value cursed_value_after_point
+        Ncurses::Form.form_driver @form, Ncurses::Form::REQ_END_FIELD
+        nop
+        Ncurses::Form::REQ_BEG_FIELD
       when Ncurses::KEY_UP, Ncurses::KEY_DOWN
         unless @history.empty?
           value = get_cursed_value
@@ -156,5 +162,17 @@ private
   def set_cursed_value v
     @field.set_field_buffer 0, v
   end
+
+  def cursed_value_after_point
+    point = Ncurses.curx - @question.length
+    get_cursed_value[point..-1]
+  end
+
+  ## this is almost certainly unnecessary, but it's the only way
+  ## i could get ncurses to remember my form's value
+  def nop
+    Ncurses::Form.form_driver @form, " "[0]
+    Ncurses::Form.form_driver @form, Ncurses::Form::REQ_DEL_PREV
+  end
 end
 end