]> git.notmuchmail.org Git - sup/blobdiff - lib/sup/modes/buffer-list-mode.rb
Merge branch 'master' into next
[sup] / lib / sup / modes / buffer-list-mode.rb
index a830b8ecdb0327a5548bb3c58409d9d5b0dbf57b..1554caedfe77e2bfeb8a99efbfd65f63f479c074 100644 (file)
@@ -3,7 +3,7 @@ module Redwood
 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
@@ -11,8 +11,13 @@ class BufferListMode < LineCursorMode
     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
 
@@ -22,10 +27,13 @@ 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