Class: Redwood::Mode

Inherits:
Object show all
Defined in:
lib/sup/mode.rb

Direct Known Subclasses

ScrollMode

Constant Summary collapse

@@keymaps =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMode

Returns a new instance of Mode.



12
13
14
# File 'lib/sup/mode.rb', line 12

def initialize
  @buffer = nil
end

Instance Attribute Details

#bufferObject

Returns the value of attribute buffer.



4
5
6
# File 'lib/sup/mode.rb', line 4

def buffer
  @buffer
end

Class Method Details

.load_all_modes(dir) ⇒ Object



19
20
21
22
23
24
# File 'lib/sup/mode.rb', line 19

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) ⇒ Object



16
# File 'lib/sup/mode.rb', line 16

def self.make_name s; s.gsub(/.*::/, "").camel_to_hyphy; end

.register_keymap(keymap = nil, &b) ⇒ Object



7
8
9
10
# File 'lib/sup/mode.rb', line 7

def self.register_keymap keymap=nil, &b
  keymap = Keymap.new(&b) if keymap.nil?
  @@keymaps[self] = keymap
end

Instance Method Details

#blurObject



29
# File 'lib/sup/mode.rb', line 29

def blur; end

#cancel_search!Object



30
# File 'lib/sup/mode.rb', line 30

def cancel_search!; end

#cleanupObject



34
35
36
# File 'lib/sup/mode.rb', line 34

def cleanup
  @buffer = nil
end

#drawObject



27
# File 'lib/sup/mode.rb', line 27

def draw; end

#focusObject



28
# File 'lib/sup/mode.rb', line 28

def focus; end

#handle_input(c) ⇒ Object



52
53
54
55
56
# File 'lib/sup/mode.rb', line 52

def handle_input c
  action = resolve_input(c) or return false
  send action
  true
end

#help_textObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/sup/mode.rb', line 58

def help_text
  used_keys = {}
  ancestors.map do |klass|
    km = @@keymaps[klass] or next
    title = "Keybindings from #{Mode.make_name klass.name}"
    s = <<EOS
#{title}
#{'-' * title.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?Boolean

Returns:

  • (Boolean)


31
# File 'lib/sup/mode.rb', line 31

def in_search?; false end

#killable?Boolean

Returns:

  • (Boolean)


26
# File 'lib/sup/mode.rb', line 26

def killable?; true; end

#nameObject



17
# File 'lib/sup/mode.rb', line 17

def name; Mode.make_name self.class.name; end

#resize(rows, cols) ⇒ Object



33
# File 'lib/sup/mode.rb', line 33

def resize rows, cols; end

#resolve_input(c) ⇒ Object

turns an input keystroke into an action symbol



39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/sup/mode.rb', line 39

def resolve_input c
  ## try all keymaps in order of age
  action = nil
  klass = self.class

  ancestors.each do |klass|
    action = @@keymaps.member?(klass) && @@keymaps[klass].action_for(c)
    return action if action
  end

  nil
end

#save_to_file(fn) ⇒ Object

helper function



79
80
81
82
83
84
85
86
87
88
89
# File 'lib/sup/mode.rb', line 79

def save_to_file fn
  if File.exists? fn
    return unless BufferManager.ask_yes_or_no "File exists. Overwrite?"
  end
  begin
    File.open(fn, "w") { |f| yield f }
    BufferManager.flash "Successfully wrote #{fn}."
  rescue SystemCallError, IOError => e
    BufferManager.flash "Error writing to file: #{e.message}"
  end
end

#statusObject



32
# File 'lib/sup/mode.rb', line 32

def status; ""; end