sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/

lib/sup/modes/buffer_list_mode.rb (1212B) - raw

      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     k.add :kill_selected_buffer, "Kill selected buffer", "X"
      8   end
      9 
     10   def initialize
     11     regen_text
     12     super
     13   end
     14 
     15   def lines; @text.length end
     16   def [] i; @text[i] end
     17 
     18   def focus
     19     reload # buffers may have been killed or created since last view
     20     set_cursor_pos 0
     21   end
     22 
     23 protected
     24 
     25   def reload
     26     regen_text
     27     buffer.mark_dirty
     28   end
     29 
     30   def regen_text
     31     @bufs = BufferManager.buffers.reject { |name, buf| buf.mode == self || buf.hidden? }.sort_by { |name, buf| buf.atime }.reverse
     32     width = @bufs.max_of { |name, buf| buf.mode.name.length }
     33     @text = @bufs.map do |name, buf|
     34       base_color = buf.system? ? :system_buf_color : :regular_buf_color
     35       [[base_color, sprintf("%#{width}s ", buf.mode.name)],
     36        [:modified_buffer_color, (buf.mode.unsaved? ? '*' : ' ')],
     37        [base_color, " " + name]]
     38     end
     39   end
     40 
     41   def jump_to_buffer
     42     BufferManager.raise_to_front @bufs[curpos][1]
     43   end
     44 
     45   def kill_selected_buffer
     46     reload if BufferManager.kill_buffer_safely @bufs[curpos][1]
     47   end
     48 end
     49 
     50 end