[PATCH v2] VIM: Make patch saving in vim a little better.
Ian Main
imain at stemwinder.org
Mon Oct 20 12:44:34 PDT 2014
It seems like there was some bitrot on the previous version of this
which made it not work correctly. This fixes the bitrot and also
updates how it works.
- Sometimes [PATCH.*] isn't at the beginning of the message (often on
lists I'm on).
- It now goes through all the messages in the thread. for some reason
the toplevel messages didn't usually contain all the patches in my
testing.
- Check for 'Re:' at the beginning and skip if it's there.
- Save patches to filesystem-safe filename containing the subject
(unfortunately we use system()...)
Ian
---
We now prompt for directory name to save to. Also save in the format
closer to git with numbers first.
vim/notmuch.vim | 34 +++++++++++++++++++++++++---------
1 file changed, 25 insertions(+), 9 deletions(-)
diff --git a/vim/notmuch.vim b/vim/notmuch.vim
index 331e930..8c46bb0 100644
--- a/vim/notmuch.vim
+++ b/vim/notmuch.vim
@@ -178,16 +178,32 @@ EOF
endfunction
function! s:show_save_patches()
+ let dir = input('Save to directory: ', getcwd(), 'dir')
ruby << EOF
- q = $curbuf.query($cur_thread)
- t = q.search_threads.first
- n = 0
- t.toplevel_messages.first.replies.each do |m|
- next if not m['subject'] =~ /^\[PATCH.*\]/
- file = "%04d.patch" % [n += 1]
- system "notmuch show --format=mbox id:#{m.message_id} > #{file}"
- end
- vim_puts "Saved #{n} patches"
+ dir = VIM::evaluate('dir')
+ if File.exists?(dir)
+ q = $curbuf.query($cur_thread)
+ t = q.search_threads.first
+ n = 0
+ m = get_message
+ t.messages.each do |m|
+ next if not m['subject'] =~ /\[PATCH.*\]/
+ next if m['subject'] =~ /^Re:/
+ subject = m['subject']
+ # Sanitize for the filesystem
+ subject.gsub!(/[^0-9A-Za-z.\-]/, '_')
+ # Remove leading underscores.
+ subject.gsub!(/^_+/, '')
+ # git style numbered patchset format.
+ file = "#{dir}/%04d-#{subject}.patch" % [n += 1]
+ vim_puts "Saving patch to #{file}"
+ system "notmuch show --format=mbox id:#{m.message_id} > #{file}"
+ end
+ vim_puts "Saved #{n} patch(es)"
+ else
+ VIM::command('redraw')
+ vim_puts "ERROR: Invalid directory: #{dir}"
+ end
EOF
endfunction
--
1.9.3
More information about the notmuch
mailing list