class Redwood::Mode
Attributes
buffer[RW]
Public Class Methods
keymap()
click to toggle source
# File lib/sup/mode.rb, line 13 def self.keymap @@keymaps[self] || register_keymap end
keymaps()
click to toggle source
# File lib/sup/mode.rb, line 17 def self.keymaps @@keymaps end
load_all_modes(dir)
click to toggle source
# File lib/sup/mode.rb, line 28 def self.load_all_modes dir Dir[File.join(dir, "*.rb")].each do |f| $stderr.puts "## loading mode #{f}" require f end end
make_name(s;)
click to toggle source
# File lib/sup/mode.rb, line 25 def self.make_name s; s.gsub(/.*::/, "").camel_to_hyphy; end
new()
click to toggle source
# File lib/sup/mode.rb, line 21 def initialize @buffer = nil end
register_keymap(keymap=nil, &b)
click to toggle source
# File lib/sup/mode.rb, line 8 def self.register_keymap keymap=nil, &b keymap = Keymap.new(&b) if keymap.nil? @@keymaps[self] = keymap end
Public Instance Methods
blur()
click to toggle source
# File lib/sup/mode.rb, line 39 def blur; end
cancel_search!()
click to toggle source
# File lib/sup/mode.rb, line 40 def cancel_search!; end
cleanup()
click to toggle source
# File lib/sup/mode.rb, line 44 def cleanup @buffer = nil end
draw()
click to toggle source
# File lib/sup/mode.rb, line 37 def draw; end
focus()
click to toggle source
# File lib/sup/mode.rb, line 38 def focus; end
handle_input(c)
click to toggle source
# File lib/sup/mode.rb, line 57 def handle_input c action = resolve_input(c) or return false send action true end
help_text()
click to toggle source
# File lib/sup/mode.rb, line 63 def help_text used_keys = {} self.class.ancestors.map do |klass| km = @@keymaps[klass] or next title = "Keybindings from #{Mode.make_name klass.name}" s = <<EOS #{title} #{'-' * title.display_length} #{km.help_text used_keys} EOS begin used_keys.merge! km.keysyms.to_boolean_h rescue ArgumentError raise km.keysyms.inspect end s end.compact.join "\n" end
in_search?()
click to toggle source
# File lib/sup/mode.rb, line 41 def in_search?; false end
killable?()
click to toggle source
# File lib/sup/mode.rb, line 35 def killable?; true; end
name()
click to toggle source
# File lib/sup/mode.rb, line 26 def name; Mode.make_name self.class.name; end
pipe_to_process(command) { |data| ... }
click to toggle source
# File lib/sup/mode.rb, line 104 def pipe_to_process command begin Open3.popen3(command) do |input, output, error| err, data, * = IO.select [error], [input], nil unless err.empty? message = err.first.read if message =~ /^\s*$/ warn "error running #{command} (but no error message)" BufferManager.flash "Error running #{command}!" else warn "error running #{command}: #{message}" BufferManager.flash "Error: #{message}" end return nil, false end data = data.first data.sync = false # buffer input yield data data.close # output will block unless input is closed ## BUG?: shows errors or output but not both.... data, * = IO.select [output, error], nil, nil data = data.first if data.eof BufferManager.flash "'#{command}' done!" return nil, true else return data.read, true end end rescue Errno::ENOENT # If the command is invalid return nil, false end end
resize(rows, cols;)
click to toggle source
# File lib/sup/mode.rb, line 43 def resize rows, cols; end
resolve_input(c)
click to toggle source
# File lib/sup/mode.rb, line 48 def resolve_input c self.class.ancestors.each do |klass| # try all keymaps in order of ancestry next unless @@keymaps.member?(klass) action = BufferManager.resolve_input_with_keymap c, @@keymaps[klass] return action if action end nil end
save_to_file(fn, talk=true) { |f| ... }
click to toggle source
helper functions
# File lib/sup/mode.rb, line 85 def save_to_file fn, talk=true if File.exist? fn unless BufferManager.ask_yes_or_no "File \"#{fn}\" exists. Overwrite?" info "Not overwriting #{fn}" return end end begin File.open(fn, "w") { |f| yield f } BufferManager.flash "Successfully wrote #{fn}." if talk true rescue SystemCallError, IOError => e m = "Error writing file: #{e.message}" info m BufferManager.flash m false end end
status()
click to toggle source
# File lib/sup/mode.rb, line 42 def status; ""; end
unsaved?()
click to toggle source
# File lib/sup/mode.rb, line 36 def unsaved?; false end