Hi all,
attached you'll find two patches ment to be applied together (*)
The first one introduces From: auto completion in edit-message
mode (plus key shortcut "f"),
the second adds a From: question when composing messages
(config ask_for_from, again with auto completion) and improves
the auto completion to be "Name <address>" instead of just "address".
Motivation: I have to send mail from different accounts,
and am tired of typing in the full sender each time.
(*) Sorry, I can't quite get git to export them as one right now :(
Also, I'll bear any comments on my code - this is the first ruby
I've ever written.
So long,
Tyberius Prime
>From d20e3d2d66e671d18efec3d6210e8f22ef5409af Mon Sep 17 00:00:00 2001
From: Tyberius Prime [EMAIL PROTECTED] <[EMAIL PROTECTED]>
Date: Thu, 1 May 2008 20:37:20 +0200
Subject: [PATCH] add autocomplete editing for from in edit-message-mode and a
key shortcut(f) for it
---
lib/sup/buffer.rb | 2 +-
lib/sup/modes/edit-message-mode.rb | 11 ++++++++++
2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb
index ebc3587..e68c001 100644
--- a/lib/sup/buffer.rb
+++ b/lib/sup/buffer.rb
@@ -406,7 +406,7 @@ EOS
end
end
- def ask_with_completions domain, question, completions, default=nil
+ def ask_with_completions domain, question, completions, default=nil
#questions are a space seperated list, I believe.
ask domain, question, default do |s|
completions.select { |x| x =~ /^#{Regexp::escape s}/i }.map { |x| [x, x]
}
end
diff --git a/lib/sup/modes/edit-message-mode.rb
b/lib/sup/modes/edit-message-mode.rb
index 8bb7756..aa582d4 100644
--- a/lib/sup/modes/edit-message-mode.rb
+++ b/lib/sup/modes/edit-message-mode.rb
@@ -45,6 +45,7 @@ EOS
k.add :edit_message_or_field, "Edit selected field", 'e'
k.add :edit_to, "Edit To:", 't'
k.add :edit_cc, "Edit Cc:", 'c'
+ k.add :edit_from, "Edit From:", 'f'
k.add :edit_subject, "Edit Subject", 's'
k.add :edit_message, "Edit message", :enter
k.add :save_as_draft, "Save as draft", 'P'
@@ -117,6 +118,7 @@ EOS
def edit_to; edit_field "To" end
def edit_cc; edit_field "Cc" end
def edit_subject; edit_field "Subject" end
+ def edit_from; edit_field "From" end
def edit_message
@file = Tempfile.new "sup.#{self.class.name.gsub(/.*::/,
'').camel_to_hyphy}"
@@ -379,6 +381,14 @@ protected
update
field
end
+ when "From"
+ completions = AccountManager.user_emails
+ text = BufferManager.ask_with_completions :from, "From: ", completions,
@header[field]
+ if text
+ @header[field] = parse_header field, text
+ update
+ field
+ end
else
default =
case field
--
1.4.4.4
>From e293e2d66d4bfe4f342d03151baea9181a1d7b38 Mon Sep 17 00:00:00 2001
From: Tyberius Prime <[EMAIL PROTECTED]>
Date: Fri, 2 May 2008 19:29:28 +0200
Subject: [PATCH] add from query on compose, configuration option, autocomplete
---
lib/sup/account.rb | 6 ++++++
lib/sup/modes/compose-mode.rb | 6 ++++--
lib/sup/modes/edit-message-mode.rb | 2 +-
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/lib/sup/account.rb b/lib/sup/account.rb
index f8ac0fc..664debd 100644
--- a/lib/sup/account.rb
+++ b/lib/sup/account.rb
@@ -31,6 +31,12 @@ class AccountManager
def user_accounts; @accounts.keys; end
def user_emails; @email_map.keys.select { |e| String === e }; end
+ def user_accounts_autocompletion;
+ completion = []
+ completion.push ( @default_account.name + " <" + default_account.email +
">" ) #make sure default account is [0]
+ @accounts.each { |account, dummy| if account != @default_account then
completion.push (account.name + " <" + account.email + ">") end }
+ return completion
+ end
## must be called first with the default account. fills in missing
## values from the default account.
diff --git a/lib/sup/modes/compose-mode.rb b/lib/sup/modes/compose-mode.rb
index 7674d7b..ce8ea8e 100644
--- a/lib/sup/modes/compose-mode.rb
+++ b/lib/sup/modes/compose-mode.rb
@@ -3,7 +3,7 @@ module Redwood
class ComposeMode < EditMessageMode
def initialize opts={}
header = {}
- header["From"] = (opts[:from] ||
AccountManager.default_account).full_address
+ header["From"] = (opts[:from] ||
AccountManager.default_account.full_address)
header["To"] = opts[:to].map { |p| p.full_address }.join(", ") if opts[:to]
header["To"] = opts[:to].map { |p| p.full_address }.join(", ") if opts[:to]
header["Cc"] = opts[:cc].map { |p| p.full_address }.join(", ") if opts[:cc]
@@ -24,8 +24,10 @@ class ComposeMode < EditMessageMode
cc = opts[:cc] || (BufferManager.ask_for_contacts(:people, "Cc: ") or
return if $config[:ask_for_cc])
bcc = opts[:bcc] || (BufferManager.ask_for_contacts(:people, "Bcc: ") or
return if $config[:ask_for_bcc])
subj = opts[:subj] || (BufferManager.ask(:subject, "Subject: ") or return
if $config[:ask_for_subject])
+ completion = AccountManager.user_accounts_autocompletion;
+ from = opts[:from] || (BufferManager.ask_with_completions :from, "From: ",
completion, completion[0]) or return if $config[:ask_for_from]
- mode = ComposeMode.new :from => opts[:from], :to => to, :cc => cc, :bcc =>
bcc, :subj => subj
+ mode = ComposeMode.new :from => from, :to => to, :cc => cc, :bcc => bcc,
:subj => subj
BufferManager.spawn "New Message", mode
mode.edit_message
end
diff --git a/lib/sup/modes/edit-message-mode.rb
b/lib/sup/modes/edit-message-mode.rb
index aa582d4..d66d261 100644
--- a/lib/sup/modes/edit-message-mode.rb
+++ b/lib/sup/modes/edit-message-mode.rb
@@ -382,7 +382,7 @@ protected
field
end
when "From"
- completions = AccountManager.user_emails
+ completions = AccountManager.user_accounts_autocompletion;
text = BufferManager.ask_with_completions :from, "From: ", completions,
@header[field]
if text
@header[field] = parse_header field, text
--
1.4.4.4
_______________________________________________
sup-talk mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/sup-talk