aboutsummaryrefslogtreecommitdiff
path: root/vim/plugin/mail_mutt.vim
blob: 5170fb5225f5bfe9201acbda79a7e2473f5ee2e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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') || &compatible
  finish
endif
if !has('user_commands')
  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>