register_keymap do |k|
     k.add :select_label, "Select 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
     @text = []
     @done = false
     @value = nil
+    @unread_only = false
     super
     regen_text
   end
   def [] i; @text[i] end
 
 protected
+  def toggle_show_unread_only
+    @unread_only = !@unread_only
+    reload
+  end
 
   def reload
     regen_text
     buffer.mark_dirty if buffer
   end
-  
+
   def regen_text
     @text = []
     labels = LabelManager.listable_labels
 
     width = counts.max_of { |l, s, t, u| s.length }
 
+    if @unread_only
+      counts.delete_if { | l, s, t, u | u == 0 }
+    end
+
     @labels = []
     counts.map do |label, string, total, unread|
       if total == 0 && !LabelManager::RESERVED_LABELS.include?(label)