diff options
author | Tom Ryder <tom@sanctum.geek.nz> | 2017-11-11 01:05:43 +1300 |
---|---|---|
committer | Tom Ryder <tom@sanctum.geek.nz> | 2017-11-11 01:05:43 +1300 |
commit | 1fa87f5febbd521bc239abe60b33c57a5932beba (patch) | |
tree | 62e969e08443ba0b90c6209dd03c2ff961fa72f8 | |
parent | Merge branch 'feature/vimrc-reunify' into develop (diff) | |
parent | Move mutt_mail.vim line select logic into plugin (diff) | |
download | dotfiles-1fa87f5febbd521bc239abe60b33c57a5932beba.tar.gz dotfiles-1fa87f5febbd521bc239abe60b33c57a5932beba.zip |
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.vim | 7 | ||||
-rw-r--r-- | vim/doc/mail_mutt.txt | 13 | ||||
-rw-r--r-- | vim/plugin/mail_mutt.vim | 56 |
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> |