Add or remove headers from the detailed header display of a message.
Variables:
message: The message whose headers are to be formatted.
- headers: A hash of header name, value pairs for the default display.
+ headers: A hash of header (name, value) pairs, initialized to the default
+ headers.
Return value:
- A hash of the same form of 'headers'.
+ None. The variable 'headers' should be modified in place.
EOS
register_keymap do |k|
addressee_lines += format_person_list " Bcc: ", m.bcc
end
- headers = {
- "Date" => "#{m.date.strftime DATE_FORMAT} (#{m.date.to_nice_distance_s})",
- "Subject" => m.subj,
- }
+ headers = OrderedHash.new
+ headers["Date"] = "#{m.date.strftime DATE_FORMAT} (#{m.date.to_nice_distance_s})"
+ headers["Subject"] = m.subj
show_labels = @thread.labels - LabelManager::HIDDEN_RESERVED_LABELS
unless show_labels.empty?
headers["In reply to"] = "#{parent.from.mediumname}'s message of #{parent.date.strftime DATE_FORMAT}"
end
- headers = (HookManager.run("detailed-headers", :message => m, :headers => headers)) || headers
+ HookManager.run "detailed-headers", :message => m, :headers => headers
from_line + (addressee_lines + headers.map { |k, v| " #{k}: #{v}" }).map { |l| [[color, prefix + " " + l]] }
end
defer_all_other_method_calls_to :hash
end
+
+class OrderedHash < Hash
+ alias_method :store, :[]=
+ alias_method :each_pair, :each
+
+ def initialize
+ @keys = []
+ end
+
+ def []=(key, val)
+ @keys << key unless member?(key)
+ super
+ end
+
+ def delete(key)
+ @keys.delete(key)
+ super
+ end
+
+ def each
+ @keys.each { |k| yield k, self[k] }
+ end
+end
+