## labels that have special semantics. user will be unable to
## add/remove these via normal label mechanisms.
- RESERVED_LABELS = [ :starred, :spam, :draft, :unread, :killed, :sent, :deleted ]
+ RESERVED_LABELS = [ :starred, :spam, :draft, :unread, :killed, :sent, :deleted, :inbox ]
## labels which it nonetheless makes sense to search for by
- LISTABLE_RESERVED_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted ]
+ LISTABLE_RESERVED_LABELS = [ :starred, :spam, :draft, :sent, :killed, :deleted, :inbox ]
- ## labels that will never be displayed to the user
+ ## labels that will typically be hidden from the user
HIDDEN_RESERVED_LABELS = [ :starred, :unread ]
def initialize fn
def edit_labels
m = @message_lines[curpos] or return
+
+ reserved_labels = m.labels.select { |l| LabelManager::RESERVED_LABELS.include? l }
new_labels = BufferManager.ask_for_labels :label, "Labels for message: ", m.labels
return unless new_labels
- m.labels = new_labels
+ m.labels = (reserved_labels + new_labels).uniq
new_labels.each { |l| LabelManager << l }
## TODO: don't recalculate EVERYTHING
update
rest += format_person_list " Bcc: ", m.bcc
end
+ show_labels = m.labels - LabelManager::HIDDEN_RESERVED_LABELS
rest += [
" Date: #{m.date.strftime DATE_FORMAT} (#{m.date.to_nice_distance_s})",
" Subject: #{m.subj}",
(parent ? " In reply to: #{parent.from.mediumname}'s message of #{parent.date.strftime DATE_FORMAT}" : nil),
- m.labels.empty? ? nil : " Labels: #{m.labels.join(', ')}",
+ show_labels.empty? ? nil : " Labels: #{show_labels.join(', ')}",
].compact
from + rest.map { |l| [[color, prefix + " " + l]] }