X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=lib%2Fsup%2Fmodes%2Fedit-message-mode.rb;h=a48930aea521fd73d7c83f2bf9846d8be6a29025;hb=375f91a24236057eab531bada2cfb2d70cac542a;hp=31aa8972766c34d17ae8f9cda5379b5363af559f;hpb=000c6ea6fd44bc2080fd8f766fac77c02fb69e2e;p=sup diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb index 31aa897..a48930a 100644 --- a/lib/sup/modes/edit-message-mode.rb +++ b/lib/sup/modes/edit-message-mode.rb @@ -3,6 +3,10 @@ require 'socket' # just for gethostname! require 'pathname' require 'rmail' +# from jcode.rb, not included in ruby 1.9 +PATTERN_UTF8 = '[\xc0-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf][\x80-\xbf]' +RE_UTF8 = Regexp.new(PATTERN_UTF8, 0, 'n') + module Redwood class SendmailCommandFailed < StandardError; end @@ -12,7 +16,7 @@ class EditMessageMode < LineCursorMode FORCE_HEADERS = %w(From To Cc Bcc Subject) MULTI_HEADERS = %w(To Cc Bcc) - NON_EDITABLE_HEADERS = %w(Message-Id Date) + NON_EDITABLE_HEADERS = %w(Message-id Date) HookManager.register "signature", <)/ + + # Encode "bælammet mitt " into + # "=?utf-8?q?b=C3=A6lammet_mitt?= + def mime_encode_address string + return string unless string.match(RE_UTF8) + string.sub(RE_ADDRESS) { |match| mime_encode($1) + $2 } + end + def move_cursor_left if curpos < @selectors.length @selectors[curpos].roll_left @@ -212,7 +248,7 @@ protected def parse_file fn File.open(fn) do |f| - header = MBox::read_header f + header = Source.parse_raw_email_header(f).inject({}) { |h, (k, v)| h[k.capitalize] = v; h } # lousy HACK body = f.readlines.map { |l| l.chomp } header.delete_if { |k, v| NON_EDITABLE_HEADERS.member? k } @@ -257,7 +293,7 @@ protected if i == 0 header + " " + name else - (" " * (header.length + 1)) + name + (" " * (header.display_length + 1)) + name end + (i == things.length - 1 ? "" : ",") end end @@ -333,14 +369,16 @@ protected m.header[k] = case v when String - v + k.match(/subject/i) ? mime_encode_subject(v) : mime_encode_address(v) when Array - v.join ", " + v.map { |v| mime_encode_address v }.join ", " end end + m.header["Date"] = date.rfc2822 m.header["Message-Id"] = @message_id m.header["User-Agent"] = "Sup/#{Redwood::VERSION}" + m.header["Content-Transfer-Encoding"] = '8bit' m end @@ -390,7 +428,7 @@ protected contacts = BufferManager.ask_for_contacts :people, "#{field}: ", default if contacts - text = contacts.map { |s| s.longname }.join(", ") + text = contacts.map { |s| s.full_address }.join(", ") @header[field] = parse_header field, text update end