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:
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