aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2017-11-11 01:05:43 +1300
committerTom Ryder <tom@sanctum.geek.nz>2017-11-11 01:05:43 +1300
commit1fa87f5febbd521bc239abe60b33c57a5932beba (patch)
tree62e969e08443ba0b90c6209dd03c2ff961fa72f8
parent687559d5400e5c34967cb84040c32a52720078d0 (diff)
parentf9600abb2182b467dfd24ce16e3eebed26723338 (diff)
downloaddotfiles-1fa87f5febbd521bc239abe60b33c57a5932beba.tar.gz
Merge branch 'feature/vim-mutt-plug' into develop
* feature/vim-mutt-plug: Move mutt_mail.vim line select logic into plugin Add new mail_mutt.vim plugin, apply mappings Beginnings of a buffer-to-Mutt mailer plugin
-rw-r--r--vim/config/command.vim7
-rw-r--r--vim/doc/mail_mutt.txt13
-rw-r--r--vim/plugin/mail_mutt.vim56
3 files changed, 76 insertions, 0 deletions
diff --git a/vim/config/command.vim b/vim/config/command.vim
index 031772e9..e6679b84 100644
--- a/vim/config/command.vim
+++ b/vim/config/command.vim
@@ -29,3 +29,10 @@ nnoremap <silent>
nnoremap <silent>
\ <Leader>D
\ :<C-U>read !date -u<CR>
+
+" \m in visual/select mode starts a mail message with the selected lines
+vmap <Leader>m <Plug>MailMuttSelected
+" \m in normal mode starts a mail message with the current line
+nmap <Leader>m <Plug>MailMuttLine
+" \M in normal mode starts a mail message with the whole buffer
+nmap <Leader>M <Plug>MailMuttBuffer
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..9bb4abd4
--- /dev/null
+++ b/vim/plugin/mail_mutt.vim
@@ -0,0 +1,56 @@
+"
+" 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>)
+
+" Mapping to mail current line in normal mode
+nnoremap <silent> <unique>
+ \ <Plug>MailMuttLine
+ \ :<C-U>.MailMutt<CR>
+
+" Mapping to mail whole buffer in normal mode
+nnoremap <silent> <unique>
+ \ <Plug>MailMuttBuffer
+ \ :<C-U>%MailMutt<CR>
+
+" Mapping to mail selected lines in visual/select mode
+vnoremap <silent> <unique>
+ \ <Plug>MailMuttSelected
+ \ :MailMutt<CR>