]> git.cworth.org Git - sup/commitdiff
Merge branch 'multi-remove-labels' into next
authorWilliam Morgan <wmorgan-sup@masanjin.net>
Mon, 23 Mar 2009 14:46:00 +0000 (10:46 -0400)
committerWilliam Morgan <wmorgan-sup@masanjin.net>
Mon, 23 Mar 2009 14:46:00 +0000 (10:46 -0400)
Conflicts:

lib/sup/modes/thread-index-mode.rb

1  2 
lib/sup/modes/thread-index-mode.rb

index 7a15f3b4f03c86d988acd3d478997fb1aaf45668,2be6fd852f1b18016e4c00e46bda94451f90a036..189df9fb21620661d3f2ce6f4470e225695dc0d7
@@@ -535,23 -448,22 +535,31 @@@ EO
    end
  
    def multi_edit_labels threads
-     user_labels = BufferManager.ask_for_labels :add_labels, "Add labels: ", [], @hidden_labels
+     user_labels = BufferManager.ask_for_labels :labels, "Add/remove labels (use -label to remove): ", [], @hidden_labels
      return unless user_labels
-     
-     hl = user_labels.select { |l| @hidden_labels.member? l }
+     user_labels.map! { |l| (l.to_s =~ /^-/)? [l.to_s.gsub(/^-?/, '').to_sym, true] : [l, false] }
+     hl = user_labels.select { |(l,_)| @hidden_labels.member? l }
      if hl.empty?
-       undo = threads.map { |t| old_labels = t.labels
-         user_labels.each { |l| t.apply_label l }
 -      threads.each do |t|
++      undo = threads.map do |t|
++        old_labels = t.labels
+         user_labels.each do |(l, to_remove)|
+           if to_remove
+             t.remove_label l
+           else
+             t.apply_label l
+           end
+         end
 +        ## UpdateManager or some other regresh mechanism?
 +        UpdateManager.relay self, :labeled, t.first
-         lambda {
++        lambda do
 +          t.labels = old_labels
 +          UpdateManager.relay self, :labeled, t.first
-         }
-       }
-     user_labels.each { |l| LabelManager << l }
-     UndoManager.register("labeling #{threads.size} #{threads.size.pluralize 'thread'}",
-                          undo << lambda { regen_text})
++        end
+       end
+       user_labels.each { |(l,_)| LabelManager << l }
++      UndoManager.register("labeling #{threads.size} #{threads.size.pluralize 'thread'}",
++                          undo << lambda { regen_text})
      else
        BufferManager.flash "'#{hl}' is a reserved label!"
      end