aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-11-11 00:59:12 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-11 00:59:12 +1300
commitfe8e94bea39895f2544ae83916da83a4f2affa21 (patch)
tree9c1134155cb4ed8fcd390a228315cc22fa0202de
parentBeginnings of a buffer-to-Mutt mailer plugin (diff)
downloaddotfiles-fe8e94bea39895f2544ae83916da83a4f2affa21.tar.gz
dotfiles-fe8e94bea39895f2544ae83916da83a4f2affa21.zip
Add new mail_mutt.vim plugin, apply mappings
This plugin provides a shortcut for staring email messages in Mutt with a range of lines.
-rw-r--r--vim/config/command.vim19
-rw-r--r--vim/doc/mail_mutt.txt13
-rw-r--r--vim/plugin/mail_mutt.vim41
3 files changed, 65 insertions, 8 deletions
diff --git a/vim/config/command.vim b/vim/config/command.vim
index a8861583..705f29b0 100644
--- a/vim/config/command.vim
+++ b/vim/config/command.vim
@@ -35,12 +35,15 @@ nnoremap <silent>
\ <Leader>D
\ :<C-U>read !date -u<CR>
-" \m fires up mutt with either the whole buffer or the text
-function s:Mutt()
- let l:tf = tempname()
- execute 'write '.fnameescape(l:tf)
- execute '!mutt -i '.shellescape(l:tf)
-endfunction
-nnoremap <silent>
+" \m in normal mode starts a mail message with the current line
+nmap <silent>
+ \ <Leader>m
+ \ :<C-U>.MailMutt<CR>
+" \M in normal mode starts a mail message with the whole buffer
+nmap <silent>
+ \ <Leader>M
+ \ :<C-U>%MailMutt<CR>
+" \m in visual mode starts a mail message with the selected lines
+vmap <silent>
\ <Leader>m
- \ :<C-U>call <SID>Mutt()<CR>
+ \ :MailMutt<CR>
diff --git a/vim/doc/mail_mutt.txt b/vim/doc/mail_mutt.txt
new file mode 100644
index 00000000..dbaf72ac
--- /dev/null
+++ b/vim/doc/mail_mutt.txt
@@ -0,0 +1,13 @@
+*mail_mutt.txt* Start a mutt(1) email message with a range of lines
+
+Author: Tom Ryder <tom@sanctum.geek.nz>
+License: Same terms as Vim itself (see |license|)
+
+This plugin provides a :MailMutt command which accepts a range of lines
+defaulting to the entire buffer, writing these lines to a temporary file that
+is then provided to the -i option of the mutt(1) MUA as the initial content of
+a new message.
+
+This plugin lives in Tom Ryder's "dotfiles" suite, and will eventually be spun
+off into a separate distribution as it solidifies and this documentation
+improves.
diff --git a/vim/plugin/mail_mutt.vim b/vim/plugin/mail_mutt.vim
new file mode 100644
index 00000000..67444e4d
--- /dev/null
+++ b/vim/plugin/mail_mutt.vim
@@ -0,0 +1,41 @@
+"
+" mail_mutt.vim: Start a mutt(1) message with the lines in the given range,
+" defaulting to the entire buffer.
+"
+" Author: Tom Ryder <tom@sanctum.geek.nz>
+" License: Same as Vim itself
+"
+if exists('g:loaded_mail_mutt')
+ \ || !has('user_commands')
+ \ || &compatible
+ finish
+endif
+let g:loaded_mail_mutt = 1
+
+" Declare function
+function! s:MailMutt(start, end)
+
+ " Check we'll have mutt(1) to execute
+ if !executable('mutt')
+ echoerr 'mutt not found in $PATH'
+ finish
+ endif
+
+ " Create a temporary file
+ let l:tf = tempname()
+
+ " Write the contents of the buffer to it
+ let l:range = a:start . ',' . a:end
+ let l:command = 'write ' . fnameescape(l:tf)
+ execute l:range . l:command
+
+
+ " Run mutt(1) with that file as its input
+ execute '!mutt -i ' . shellescape(l:tf)
+
+endfunction
+
+" Create a command to wrap around that function
+command -nargs=0 -range=%
+ \ MailMutt
+ \ call <SID>MailMutt(<line1>, <line2>)