[PATCH v2] VIM: Make patch saving in vim a little better.
authorIan Main <imain@stemwinder.org>
Mon, 20 Oct 2014 19:44:34 +0000 (12:44 +1700)
committerW. Trevor King <wking@tremily.us>
Fri, 7 Nov 2014 18:05:25 +0000 (10:05 -0800)
33/e8ac1918b64c613e4aae29acd461561cdff539 [new file with mode: 0644]

diff --git a/33/e8ac1918b64c613e4aae29acd461561cdff539 b/33/e8ac1918b64c613e4aae29acd461561cdff539
new file mode 100644 (file)
index 0000000..0039202
--- /dev/null
@@ -0,0 +1,118 @@
+Return-Path: <imain@stemwinder.org>\r
+X-Original-To: notmuch@notmuchmail.org\r
+Delivered-To: notmuch@notmuchmail.org\r
+Received: from localhost (localhost [127.0.0.1])\r
+       by olra.theworths.org (Postfix) with ESMTP id 1C908431FAF\r
+       for <notmuch@notmuchmail.org>; Mon, 20 Oct 2014 12:44:49 -0700 (PDT)\r
+X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
+X-Spam-Flag: NO\r
+X-Spam-Score: 0\r
+X-Spam-Level: \r
+X-Spam-Status: No, score=0 tagged_above=-999 required=5\r
+       tests=[RCVD_IN_DNSWL_NONE=-0.0001] autolearn=disabled\r
+Received: from olra.theworths.org ([127.0.0.1])\r
+       by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
+       with ESMTP id KyqRn0GJW4s3 for <notmuch@notmuchmail.org>;\r
+       Mon, 20 Oct 2014 12:44:45 -0700 (PDT)\r
+Received: from cmta12.telus.net (cmta12.telus.net [209.171.16.85])\r
+       by olra.theworths.org (Postfix) with ESMTP id 37805431FAE\r
+       for <notmuch@notmuchmail.org>; Mon, 20 Oct 2014 12:44:45 -0700 (PDT)\r
+Received: from ovo.mains.priv ([207.102.88.62]) by cmta12.telus.net with TELUS\r
+       id 5Xkk1p0031LiWEf01XkkLt; Mon, 20 Oct 2014 13:44:44 -0600\r
+X-Authority-Analysis: v=2.0 cv=f5eW8pOM c=1 sm=2\r
+       a=EcQDfIwDZEqJA1f7rVUV8Q==:17 a=S-IsBHyFrF4A:10 a=tsa3CZZnAAAA:8\r
+       a=Lslhd1wAqYGKFm1UiiAA:9 a=EcQDfIwDZEqJA1f7rVUV8Q==:117\r
+X-Telus-Outbound-IP: 207.102.88.62\r
+From: Ian Main <imain@stemwinder.org>\r
+To: notmuch@notmuchmail.org\r
+Subject: [PATCH v2] VIM: Make patch saving in vim a little better.\r
+Date: Mon, 20 Oct 2014 12:44:34 -0700\r
+Message-Id: <1413834274-5388-1-git-send-email-imain@stemwinder.org>\r
+X-Mailer: git-send-email 1.9.3\r
+In-Reply-To: <1412111331-18823-1-git-send-email-imain@stemwinder.org>\r
+References: <1412111331-18823-1-git-send-email-imain@stemwinder.org>\r
+X-BeenThere: notmuch@notmuchmail.org\r
+X-Mailman-Version: 2.1.13\r
+Precedence: list\r
+List-Id: "Use and development of the notmuch mail system."\r
+       <notmuch.notmuchmail.org>\r
+List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
+List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
+List-Post: <mailto:notmuch@notmuchmail.org>\r
+List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
+List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
+       <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
+X-List-Received-Date: Mon, 20 Oct 2014 19:44:49 -0000\r
+\r
+It seems like there was some bitrot on the previous version of this\r
+which made it not work correctly.  This fixes the bitrot and also\r
+updates how it works.\r
+\r
+- Sometimes [PATCH.*] isn't at the beginning of the message (often on\r
+  lists I'm on).\r
+- It now goes through all the messages in the thread.  for some reason\r
+  the toplevel messages didn't usually contain all the patches in my\r
+  testing.\r
+- Check for 'Re:' at the beginning and skip if it's there.\r
+- Save patches to filesystem-safe filename containing the subject\r
+  (unfortunately we use system()...)\r
+\r
+    Ian\r
+---\r
+\r
+We now prompt for directory name to save to.  Also save in the format\r
+closer to git with numbers first.\r
+\r
+ vim/notmuch.vim | 34 +++++++++++++++++++++++++---------\r
+ 1 file changed, 25 insertions(+), 9 deletions(-)\r
+\r
+diff --git a/vim/notmuch.vim b/vim/notmuch.vim\r
+index 331e930..8c46bb0 100644\r
+--- a/vim/notmuch.vim\r
++++ b/vim/notmuch.vim\r
+@@ -178,16 +178,32 @@ EOF\r
+ endfunction\r
\r
+ function! s:show_save_patches()\r
++      let dir = input('Save to directory: ', getcwd(), 'dir')\r
+ ruby << EOF\r
+-      q = $curbuf.query($cur_thread)\r
+-      t = q.search_threads.first\r
+-      n = 0\r
+-      t.toplevel_messages.first.replies.each do |m|\r
+-              next if not m['subject'] =~ /^\[PATCH.*\]/\r
+-              file = "%04d.patch" % [n += 1]\r
+-              system "notmuch show --format=mbox id:#{m.message_id} > #{file}"\r
+-      end\r
+-      vim_puts "Saved #{n} patches"\r
++      dir = VIM::evaluate('dir')\r
++      if File.exists?(dir)\r
++              q = $curbuf.query($cur_thread)\r
++              t = q.search_threads.first\r
++              n = 0\r
++              m = get_message\r
++              t.messages.each do |m|\r
++                      next if not m['subject'] =~ /\[PATCH.*\]/\r
++                      next if m['subject'] =~ /^Re:/\r
++                      subject = m['subject']\r
++                      # Sanitize for the filesystem\r
++                      subject.gsub!(/[^0-9A-Za-z.\-]/, '_')\r
++                      # Remove leading underscores.\r
++                      subject.gsub!(/^_+/, '')\r
++                      # git style numbered patchset format.\r
++                      file = "#{dir}/%04d-#{subject}.patch" % [n += 1]\r
++                      vim_puts "Saving patch to #{file}"\r
++                      system "notmuch show --format=mbox id:#{m.message_id} > #{file}"\r
++              end\r
++              vim_puts "Saved #{n} patch(es)"\r
++      else\r
++              VIM::command('redraw')\r
++              vim_puts "ERROR: Invalid directory: #{dir}"\r
++      end\r
+ EOF\r
+ endfunction\r
\r
+-- \r
+1.9.3\r
+\r