sup

A curses threads-with-tags style email client

sup.git

git clone https://supmua.dev/git/sup/
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:
M lib/sup/modes/edit-message-async-mode.rb | 11 +++++++----
M lib/sup/modes/edit-message-mode.rb | 17 +++++++++++------
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