class BufferListMode < LineCursorMode
register_keymap do |k|
k.add :jump_to_buffer, "Jump to selected buffer", :enter
- k.add :reload, "Reload buffer list", "R"
+ k.add :reload, "Reload buffer list", "@"
end
def initialize
super
end
- def lines; @text.length; end
- def [] i; @text[i]; end
+ def lines; @text.length end
+ def [] i; @text[i] end
+
+ def focus
+ reload # buffers may have been killed or created since last view
+ set_cursor_pos 0
+ end
protected
end
def regen_text
- @bufs = BufferManager.buffers.sort_by { |name, buf| name }
- width = @bufs.map { |name, buf| buf.mode.name.length }.max
+ @bufs = BufferManager.buffers.reject { |name, buf| buf.mode == self }.sort_by { |name, buf| buf.atime }.reverse
+ width = @bufs.max_of { |name, buf| buf.mode.name.length }
@text = @bufs.map do |name, buf|
- sprintf "%#{width}s %s", buf.mode.name, name
+ base_color = buf.system? ? :system_buf_color : :regular_buf_color
+ [[base_color, sprintf("%#{width}s ", buf.mode.name)],
+ [:modified_buffer_color, (buf.mode.unsaved? ? '*' : ' ')],
+ [base_color, " " + name]]
end
end