[RFC PATCH 1/2] vim: compose: support additional Notmuch- filters
Nick Howell
nlhowell at gmail.com
Thu Oct 13 12:58:36 PDT 2016
Add support for additional Notmuch-* headers: special headers read (and
then removed) by vnm upon send. The plan is to use these special headers
for all sorts of fancy features: attachments, PGP, whatever, so that the
inputs to these features are editable from vim.
For the moment, this just factors the code a bit: the Notmuch-Help lines
are expanded to list allowed headers, and the number of headers to
ignore is now decided at runtime, instead of being hardcoded.
The biggest change is the addition of dynamic highlighting for these: at
the end of the compose helper we add syntax highlighting for all the
special headers we interpret. Since these are now generated dynamically,
we remove the highlighting code from the static syntax files.
---
vim/notmuch.vim | 24 ++++++++++++++++++++----
vim/syntax/notmuch-compose.vim | 5 -----
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/vim/notmuch.vim b/vim/notmuch.vim
index ad8b7c8..bea30f8 100644
--- a/vim/notmuch.vim
+++ b/vim/notmuch.vim
@@ -87,13 +87,19 @@ endfunction
function! s:compose_send()
let b:compose_done = 1
let fname = expand('%')
- let lines = getline(5, '$')
ruby << EOF
# Generate proper mail to send
- text = VIM::evaluate('lines').join("\n")
+ text = []
+ eval_nm_headers = true
+ VIM::evaluate('getline(0, \'$\')').each do |line|
+ unless eval_nm_headers and NotmuchHeaders.any? { |h| line.start_with?("Notmuch-#{h}: ") }
+ text << line
+ eval_nm_headers = false
+ end
+ end
fname = VIM::evaluate('fname')
- transport = Mail.new(text)
+ transport = Mail.new(text.join("\n"))
transport.message_id = generate_message_id
transport.charset = 'utf-8'
File.write(fname, transport.to_s)
@@ -483,6 +489,8 @@ ruby << EOF
$messages = []
$mail_installed = defined?(Mail)
+ NotmuchHeaders = ["Help"]
+
def get_config_item(item)
result = ''
IO.popen(['notmuch', 'config', 'get', item]) { |out|
@@ -491,6 +499,7 @@ ruby << EOF
return result.rstrip
end
+
def get_config
$db_name = get_config_item('database.path')
$email_name = get_config_item('user.name')
@@ -547,8 +556,9 @@ ruby << EOF
def open_compose_helper(lines, cur)
help_lines = [
'Notmuch-Help: Type in your message here; to help you use these bindings:',
- 'Notmuch-Help: ,s - send the message (Notmuch-Help lines will be removed)',
+ 'Notmuch-Help: ,s - send the message',
'Notmuch-Help: ,q - abort the message',
+ "Notmuch-Help: Magic Notmuch- headers (removed on send): #{NotmuchHeaders.join(", ")}.",
]
dir = File.expand_path('~/.notmuch/compose')
@@ -571,6 +581,12 @@ ruby << EOF
VIM::command("let s:reply_from='%s'" % $email_address)
VIM::command("call s:new_file_buffer('compose', '#{f.path}')")
VIM::command("call cursor(#{cur}, 0)")
+ VIM::command(<<-'SEOF' % NotmuchHeaders.collect { |h| "Notmuch-#{h}" }.join('\|'))
+ syntax region nmComposeNotmuchHeaders contains=nmComposeNotmuchHeaderLine start='^\(%1$s\):' end='^\(\(%1$s\):\)\@!'
+ syntax match nmComposeNotmuchHeaderLine /\(%1$s\):/ contained
+ highlight link nmComposeNotmuchHeaders Include
+ highlight link nmComposeNotmuchHeaderLine Error
+ SEOF
end
end
diff --git a/vim/syntax/notmuch-compose.vim b/vim/syntax/notmuch-compose.vim
index 19adb75..8d45636 100644
--- a/vim/syntax/notmuch-compose.vim
+++ b/vim/syntax/notmuch-compose.vim
@@ -1,7 +1,2 @@
runtime! syntax/mail.vim
-syntax region nmComposeHelp contains=nmComposeHelpLine start='^Notmuch-Help:\%1l' end='^\(Notmuch-Help:\)\@!'
-syntax match nmComposeHelpLine /Notmuch-Help:/ contained
-
-highlight link nmComposeHelp Include
-highlight link nmComposeHelpLine Error
--
2.7.3
More information about the notmuch
mailing list