9 yield self if block_given?
12 def keysym_to_keycode k
14 when :down: Curses::KEY_DOWN
15 when :up: Curses::KEY_UP
16 when :left: Curses::KEY_LEFT
17 when :right: Curses::KEY_RIGHT
18 when :page_down: Curses::KEY_NPAGE
19 when :page_up: Curses::KEY_PPAGE
20 when :backspace: Curses::KEY_BACKSPACE
21 when :home: Curses::KEY_HOME
22 when :end: Curses::KEY_END
26 when :enter, :return: 10 #Curses::KEY_ENTER
28 if k.is_a?(String) && k.length == 1
31 raise ArgumentError, "unknown key name '#{k}'"
36 def keysym_to_string k
38 when :down: "<down arrow>"
39 when :up: "<up arrow>"
40 when :left: "<left arrow>"
41 when :right: "<right arrow>"
42 when :page_down: "<page down>"
43 when :page_up: "<page up>"
44 when :backspace: "<backspace>"
47 when :enter, :return: "<enter>"
48 when :ctrl_l: "ctrl-l"
49 when :ctrl_l: "ctrl-g"
53 if k.is_a?(String) && k.length == 1
56 raise ArgumentError, "unknown key name \"#{k}\""
61 def add action, help, *keys
62 entry = [action, help, keys]
65 raise ArgumentError, "key #{k} already defined (action #{action})" if @map.include? k
66 kc = keysym_to_keycode k
72 action, help, keys = @map[kc]
76 def keysyms; @map.values.map { |action, help, keys| keys }.flatten; end
78 def help_text except_for={}
79 lines = @order.map do |action, help, keys|
80 valid_keys = keys.select { |k| !except_for[k] }
81 next if valid_keys.empty?
82 [valid_keys.map { |k| keysym_to_string k }.join(", "), help]
84 llen = lines.map { |a, b| a.length }.max
85 lines.map { |a, b| sprintf " %#{llen}s : %s", a, b }.join("\n")