bm.spawn_unless_exists("Buffer List") { BufferListMode.new }
when :list_contacts
b = bm.spawn_unless_exists("Contact List") { ContactListMode.new }
- b.mode.load_in_background
+ b.mode.load_in_background if b
when :search
query = BufferManager.ask :search, "search all messages: "
next unless query && query !~ /^\s*$/
BufferManager.spawn "Edit message", r
r.edit_message
else
- b = BufferManager.spawn_unless_exists("All drafts") do
- mode = LabelSearchResultsMode.new [:draft]
- end
- b.mode.load_threads :num => b.content_height
+ b = BufferManager.spawn_unless_exists("All drafts") { LabelSearchResultsMode.new [:draft] }
+ b.mode.load_threads :num => b.content_height if b
end
when :nothing
when :redraw
def spawn_unless_exists title, opts={}
if @name_map.member? title
raise_to_front @name_map[title] unless opts[:hidden]
+ nil
else
mode = yield
spawn title, mode, opts
+ @name_map[title]
end
- @name_map[title]
end
def spawn title, mode, opts={}
class LabelListMode < LineCursorMode
register_keymap do |k|
- k.add :select_label, "Select label", :enter
+ k.add :select_label, "Search by label", :enter
k.add :reload, "Discard label list and reload", '@'
k.add :toggle_show_unread_only, "Toggle between all labels and those with unread mail", :tab
end
- bool_reader :done
attr_reader :value
def initialize
@labels = []
@text = []
- @done = false
@value = nil
@unread_only = false
super
def select_label
@value, string = @labels[curpos]
- @done = true if @value
+ return unless @value
+ LabelSearchResultsMode.spawn_nicely @value
end
end
when :inbox
BufferManager.raise_to_front InboxMode.instance.buffer
else
- BufferManager.spawn_unless_exists("All threads with label '#{label}'") do
- mode = LabelSearchResultsMode.new([label])
- mode.load_threads :num => b.content_height
- end
+ b = BufferManager.spawn_unless_exists("All threads with label '#{label}'") { LabelSearchResultsMode.new [label] }
+ b.mode.load_threads :num => b.content_height if b
end
end
end