1" Mail file type extension to pick files for attachments via vifm 2" Maintainer: xaizek <xaizek@posteo.net> 3" Last Change: June 22, 2020 4 5" Insert attachment picked via vifm after 'Subject' header 6function! s:AddMailAttachments() 7 call vifm#globals#Init() 8 9 " XXX: similar code is in plugins/vifm.vim, but it's different in details 10 let l:listf = tempname() 11 12 if !has('nvim') 13 if has('gui_running') 14 execute 'silent !' g:vifm_term g:vifm_exec 15 \ '--choose-files' shellescape(l:listf, 1) 16 \ g:vifm_exec_args 17 else 18 execute 'silent !' g:vifm_exec 19 \ '--choose-files' shellescape(l:listf, 1) 20 \ g:vifm_exec_args 21 endif 22 23 redraw! 24 25 call s:HandleRunResults(v:shell_error, l:listf) 26 else 27 " Work around handicapped neovim... 28 let callback = { 'listf': l:listf } 29 function! callback.on_exit(id, code, event) 30 buffer # 31 silent! bdelete! # 32 call s:HandleRunResults(a:code, self.listf) 33 endfunction 34 enew 35 call termopen(g:vifm_exec . ' --choose-files ' . shellescape(l:listf, 1) 36 \. ' ' . g:vifm_exec_args, callback) 37 38 startinsert 39 endif 40endfunction 41 42function! s:HandleRunResults(exitcode, listf) 43 if a:exitcode != 0 44 echoerr 'Got non-zero code from vifm: ' . a:exitcode 45 call delete(a:listf) 46 return 47 endif 48 49 let l:insert_pos = search('^Subject:', 'nw') 50 51 if filereadable(a:listf) && l:insert_pos != 0 52 for line in readfile(a:listf) 53 call append(l:insert_pos, 'Attach: '.escape(line, " ")) 54 let l:insert_pos += 1 55 endfor 56 endif 57 call delete(a:listf) 58endfunction 59 60nnoremap <buffer> <silent> <localleader>a :call <sid>AddMailAttachments()<cr> 61 62" vim: set tabstop=2 softtabstop=2 shiftwidth=2 noexpandtab cinoptions-=(0 : 63