From: William Morgan Date: Mon, 23 Mar 2009 14:46:00 +0000 (-0400) Subject: Merge branch 'multi-remove-labels' into next X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=53c03a357836dcdeafad0908702a151cbc2ec362;p=sup Merge branch 'multi-remove-labels' into next Conflicts: lib/sup/modes/thread-index-mode.rb --- 53c03a357836dcdeafad0908702a151cbc2ec362 diff --cc lib/sup/modes/thread-index-mode.rb index 7a15f3b,2be6fd8..189df9f --- a/lib/sup/modes/thread-index-mode.rb +++ b/lib/sup/modes/thread-index-mode.rb @@@ -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