7 def self.register_keymap keymap=nil, &b
8 keymap = Keymap.new(&b) if keymap.nil?
9 @@keymaps[self] = keymap
16 def self.make_name s; s.gsub(/.*::/, "").camel_to_hyphy; end
17 def name; Mode.make_name self.class.name; end
19 def self.load_all_modes dir
20 Dir[File.join(dir, "*.rb")].each do |f|
21 $stderr.puts "## loading mode #{f}"
26 def killable?; true; end
31 def resize rows, cols; end
36 ## turns an input keystroke into an action symbol
38 ## try all keymaps in order of age
42 ancestors.each do |klass|
43 action = @@keymaps.member?(klass) && @@keymaps[klass].action_for(c)
44 return action if action
51 action = resolve_input(c) or return false
58 ancestors.map do |klass|
59 km = @@keymaps[klass] or next
60 title = "Keybindings from #{Mode.make_name klass.name}"
65 #{km.help_text used_keys}
68 used_keys.merge! km.keysyms.to_boolean_h
70 raise km.keysyms.inspect
79 return unless BufferManager.ask_yes_or_no "File exists. Overwrite?"
82 File.open(fn, "w") { |f| yield f }
83 BufferManager.flash "Successfully wrote #{fn}."
84 rescue SystemCallError, IOError => e
85 BufferManager.flash "Error writing to file: #{e.message}"