]> git.cworth.org Git - sup/blob - lib/sup/modes/buffer-list-mode.rb
Merge branch 'preemptive-loading' into next
[sup] / lib / sup / modes / buffer-list-mode.rb
1 module Redwood
2
3 class BufferListMode < LineCursorMode
4   register_keymap do |k|
5     k.add :jump_to_buffer, "Jump to selected buffer", :enter
6     k.add :reload, "Reload buffer list", "@"
7   end
8
9   def initialize
10     regen_text
11     super
12   end
13
14   def lines; @text.length end
15   def [] i; @text[i] end
16
17   def focus
18     reload # buffers may have been killed or created since last view
19     set_cursor_pos 0
20   end
21
22 protected
23
24   def reload
25     regen_text
26     buffer.mark_dirty
27   end
28
29   def regen_text
30     @bufs = BufferManager.buffers.reject { |name, buf| buf.mode == self }.sort_by { |name, buf| buf.atime }.reverse
31     width = @bufs.max_of { |name, buf| buf.mode.name.length }
32     @text = @bufs.map do |name, buf|
33       base_color = buf.system? ? :system_buf_color : :regular_buf_color
34       [[base_color, sprintf("%#{width}s ", buf.mode.name)],
35        [:modified_buffer_color, (buf.mode.unsaved? ? '*' : ' ')],
36        [base_color, " " + name]]
37     end
38   end
39
40   def jump_to_buffer
41     BufferManager.raise_to_front @bufs[curpos][1]
42   end
43 end
44
45 end