commit 7c4205e185f793c07544537365161989ed7673cd
parent 0afa641f20468ed1cde812f7504f41d1deaeac73
Author: Hamish Downer <dmishd@gmail.com>
Date: Sun, 20 Feb 2011 21:34:01 +0000
Proper killable? handling for async edit mode
Diffstat:
2 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/lib/sup/modes/edit-message-async-mode.rb b/lib/sup/modes/edit-message-async-mode.rb
@@ -7,7 +7,6 @@ class EditMessageAsyncMode < LineCursorMode
register_keymap do |k|
k.add :edit_finished, "Finished editing message", 'E'
# k.add :path_to_clipboard, "Copy file path to the clipboard", :enter
-# k.add :open_file, "Open file in default GUI editor", 'O'
end
def initialize parent_edit_mode, file_path, msg_subject
@@ -29,7 +28,13 @@ class EditMessageAsyncMode < LineCursorMode
end
def killable?
- !file_being_edited? && !file_has_been_edited?
+ if file_being_edited?
+ BufferManager.flash "Please check that #{@file_path} is not open in any editor and try again"
+ return false
+ end
+
+ @parent_edit_mode.edit_message_async_resume true
+ true
end
def unsaved?
@@ -44,14 +49,12 @@ protected
return false
end
- debug "Async mode exiting - file is not being edited"
@parent_edit_mode.edit_message_async_resume
BufferManager.kill_buffer buffer
true
end
def file_being_edited?
- debug "Checking if file is being edited"
# check for common editor lock files
vim_lock_file = File.join(File.dirname(@file_path), '.'+File.basename(@file_path)+'.swp')
emacs_lock_file = File.join(File.dirname(@file_path), '.#'+File.basename(@file_path))
diff --git a/lib/sup/modes/edit-message-mode.rb b/lib/sup/modes/edit-message-mode.rb
@@ -187,7 +187,7 @@ EOS
end
def edit_message_async
- @file = Tempfile.new "sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}"
+ @file = Tempfile.new ["sup.#{self.class.name.gsub(/.*::/, '').camel_to_hyphy}", ".eml"]
@file.puts format_headers(@header - NON_EDITABLE_HEADERS).first
@file.puts
@file.puts @body.join("\n")
@@ -203,14 +203,12 @@ EOS
# hide ourselves, and wait for signal to resume from async mode ...
buffer.hidden = true
- debug "Edit mode buffer is now hidden"
end
- def edit_message_async_resume
+ def edit_message_async_resume being_killed=false
buffer.hidden = false
- debug "Edit mode buffer is now unhidden"
@async_mode = nil
- BufferManager.raise_to_front buffer
+ BufferManager.raise_to_front buffer if !being_killed
@edited = true if File.mtime(@file.path) > @mtime
@@ -224,7 +222,14 @@ EOS
def killable?
if !@async_mode.nil?
- return false if @async_mode.killable?
+ return false if !@async_mode.killable?
+ if File.mtime(@file.path) > @mtime
+ @edited = true
+ header, @body = parse_file @file.path
+ @header = header - NON_EDITABLE_HEADERS
+ handle_new_text @header, @body
+ update
+ end
end
!edited? || BufferManager.ask_yes_or_no("Discard message?")
end