From: Nicolas Pouillard Date: Mon, 16 Mar 2009 18:35:43 +0000 (+0100) Subject: Allow multi_edit_labels to remove labels using -lab (the "; l" key binding) X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=9e1b41c326cbdbe8a60606fc6ca341a84a9dc871;p=sup Allow multi_edit_labels to remove labels using -lab (the "; l" key binding) --- diff --git a/lib/sup/modes/thread-index-mode.rb b/lib/sup/modes/thread-index-mode.rb index 73144db..2be6fd8 100644 --- a/lib/sup/modes/thread-index-mode.rb +++ b/lib/sup/modes/thread-index-mode.rb @@ -448,13 +448,22 @@ EOS 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? - threads.each { |t| user_labels.each { |l| t.apply_label l } } - user_labels.each { |l| LabelManager << l } + threads.each do |t| + user_labels.each do |(l, to_remove)| + if to_remove + t.remove_label l + else + t.apply_label l + end + end + end + user_labels.each { |(l,_)| LabelManager << l } else BufferManager.flash "'#{hl}' is a reserved label!" end