commit 15a2c54fc7e7c46ecef2103f303a02f7df6be13a
parent c4d08f0a6cdbb30c1e375a0d3aa69771dd2809ab
Author: wmorgan <wmorgan@5c8cc53c-5e98-4d25-b20a-d8db53a31250>
Date: Sun, 10 Dec 2006 19:11:40 +0000
improved handling of killing buffers. buffers now check with the mode
(via #killable?) before killing. inbox-mode always returns false.
also improved ask_yes_or_no. three outputs: yes, no, and nil (cancel).
git-svn-id: svn://rubyforge.org/var/svn/sup/trunk@68 5c8cc53c-5e98-4d25-b20a-d8db53a31250
Diffstat:
6 files changed, 41 insertions(+), 18 deletions(-)
diff --git a/bin/sup b/bin/sup
@@ -132,7 +132,7 @@ begin
when :roll_buffers_backwards
bm.roll_buffers_backwards
when :kill_buffer
- bm.kill_buffer bm.focus_buf unless bm.focus_buf.mode.is_a? InboxMode
+ bm.kill_buffer bm.focus_buf if bm.focus_buf.mode.killable?
when :list_buffers
bm.spawn_unless_exists("Buffer List") { BufferListMode.new }
when :list_contacts
@@ -187,10 +187,12 @@ if $exception
case $exception
when IndexError
$stderr.puts <<EOS
-An error occurred while parsing a message from source "#{$exception.source}".
+An error occurred while parsing a message from source:
+ #{$exception.source}.
Typically, this means that the source has been modified in some
-way which has rendered the messages invalid. For example, if it's an mbox
-file, you may have read or deleted messages using another client.
+way which has rendered the messages invalid. For example, if it's
+an mbox file, you may have read or deleted messages using another
+mail client.
You must rebuild the index for this source. Please run:
sup-import --rebuild #{$exception.source}
diff --git a/lib/sup/buffer.rb b/lib/sup/buffer.rb
@@ -337,7 +337,15 @@ class BufferManager
end
def ask_yes_or_no question
- [?y, ?Y].member? ask_getch(question, "ynYN")
+ r = ask_getch(question, "ynYN")
+ case r
+ when ?y, ?Y
+ true
+ when nil
+ nil
+ else
+ false
+ end
end
def draw_minibuf
diff --git a/lib/sup/mode.rb b/lib/sup/mode.rb
@@ -23,6 +23,7 @@ class Mode
end
end
+ def killable?; true; end
def draw; end
def focus; end
def blur; end
diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb
@@ -101,7 +101,7 @@ protected
end
def send_message
- return false unless @edited || BufferManager.ask_yes_or_no("message unedited---really send?")
+ return false unless @edited || BufferManager.ask_yes_or_no("Message unedited. Really send?")
raise "no message id!" unless header["Message-Id"]
date = Time.now
@@ -127,6 +127,7 @@ protected
DraftManager.write_draft { |f| write_message f, false }
BufferManager.kill_buffer buffer
BufferManager.flash "Saved for later editing."
+ true
end
def sig_lines
diff --git a/lib/sup/modes/inbox-mode.rb b/lib/sup/modes/inbox-mode.rb
@@ -14,6 +14,8 @@ class InboxMode < ThreadIndexMode
super [:inbox], [:inbox]
end
+ def killable?; false; end
+
def archive
remove_label_and_hide_thread cursor_thread, :inbox
regen_text
diff --git a/lib/sup/modes/resume-mode.rb b/lib/sup/modes/resume-mode.rb
@@ -8,26 +8,35 @@ class ResumeMode < ComposeMode
@header.delete "Date"
@header["Message-Id"] = gen_message_id # generate a new'n
regen_text
- @sent = false
+ @safe = false
+ end
+
+ def killable?
+ unless @safe
+ case BufferManager.ask_yes_or_no "Discard draft?"
+ when true
+ DraftManager.discard @id
+ BufferManager.flash "Draft discarded."
+ true
+ when false
+ BufferManager.flash "Draft saved."
+ true
+ else
+ false
+ end
+ end
end
def send_message
if super
DraftManager.discard @id
- @sent = true
+ @safe = true
end
end
- def cleanup
- unless @sent
- if BufferManager.ask_yes_or_no "discard draft?"
- DraftManager.discard @id
- BufferManager.flash "Draft discarded."
- else
- BufferManager.flash "Draft saved."
- end
- super
- end
+ def save_as_draft
+ @safe = true
+ DraftManager.discard @id if super
end
end