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
30 def cancel_search!; end
31 def in_search?; false end
33 def resize rows, cols; end
38 ## turns an input keystroke into an action symbol
40 ## try all keymaps in order of age
44 ancestors.each do |klass|
45 action = @@keymaps.member?(klass) && @@keymaps[klass].action_for(c)
46 return action if action
53 action = resolve_input(c) or return false
60 ancestors.map do |klass|
61 km = @@keymaps[klass] or next
62 title = "Keybindings from #{Mode.make_name klass.name}"
67 #{km.help_text used_keys}
70 used_keys.merge! km.keysyms.to_boolean_h
72 raise km.keysyms.inspect
81 return unless BufferManager.ask_yes_or_no "File exists. Overwrite?"
84 File.open(fn, "w") { |f| yield f }
85 BufferManager.flash "Successfully wrote #{fn}."
86 rescue SystemCallError, IOError => e
87 BufferManager.flash "Error writing to file: #{e.message}"