blob: 84f70c4f808acd97380b6b6114e06325e25952bd [file] [log] [blame]
Bram Moolenaara5fac542005-10-12 20:58:49 +00001" netrwFileHandlers: contains various extension-based file handlers for
2" netrw's browsers' x command ("eXecute launcher")
Bram Moolenaarff034192013-04-24 18:51:19 +02003" Author: Charles E. Campbell
Bram Moolenaar5b435d62012-04-05 17:33:26 +02004" Date: Mar 14, 2012
5" Version: 11a
Bram Moolenaarff034192013-04-24 18:51:19 +02006" Copyright: Copyright (C) 1999-2012 Charles E. Campbell {{{1
Bram Moolenaara5fac542005-10-12 20:58:49 +00007" Permission is hereby granted to use and distribute this code,
8" with or without modifications, provided that this copyright
9" notice is copied with it. Like anything else that's free,
10" netrwFileHandlers.vim is provided *as is* and comes with no
11" warranty of any kind, either expressed or implied. In no
12" event will the copyright holder be liable for any damages
13" resulting from the use of this software.
14"
15" Rom 6:23 (WEB) For the wages of sin is death, but the free gift of God {{{1
16" is eternal life in Christ Jesus our Lord.
17
18" ---------------------------------------------------------------------
19" Load Once: {{{1
20if exists("g:loaded_netrwFileHandlers") || &cp
21 finish
22endif
Bram Moolenaar5b435d62012-04-05 17:33:26 +020023let g:loaded_netrwFileHandlers= "v11a"
Bram Moolenaar5c736222010-01-06 20:54:52 +010024if v:version < 702
25 echohl WarningMsg
26 echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
27 echohl Normal
28 finish
29endif
Bram Moolenaara5fac542005-10-12 20:58:49 +000030let s:keepcpo= &cpo
31set cpo&vim
Bram Moolenaara5fac542005-10-12 20:58:49 +000032
33" ---------------------------------------------------------------------
Bram Moolenaard68071d2006-05-02 22:08:30 +000034" netrwFileHandlers#Invoke: {{{1
Bram Moolenaar1056d982006-03-09 22:37:52 +000035fun! netrwFileHandlers#Invoke(exten,fname)
36" call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000037 let fname= a:fname
38 " list of supported special characters. Consider rcs,v --- that can be
39 " supported with a NFH_rcsCOMMAv() handler
40 if a:fname =~ '[@:,$!=\-+%?;~]'
41 let specials= {
42\ '@' : 'AT',
43\ ':' : 'COLON',
44\ ',' : 'COMMA',
45\ '$' : 'DOLLAR',
46\ '!' : 'EXCLAMATION',
47\ '=' : 'EQUAL',
48\ '-' : 'MINUS',
49\ '+' : 'PLUS',
50\ '%' : 'PERCENT',
51\ '?' : 'QUESTION',
52\ ';' : 'SEMICOLON',
53\ '~' : 'TILDE'}
54 let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
55" call Decho('fname<'.fname.'> done with dictionary')
56 endif
Bram Moolenaar1056d982006-03-09 22:37:52 +000057
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000058 if a:exten != "" && exists("*NFH_".a:exten)
59 " support user NFH_*() functions
60" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
61 exe "let ret= NFH_".a:exten.'("'.fname.'")'
62 elseif a:exten != "" && exists("*s:NFH_".a:exten)
63 " use builtin-NFH_*() functions
64" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
65 exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
Bram Moolenaar1056d982006-03-09 22:37:52 +000066 endif
Bram Moolenaar5b435d62012-04-05 17:33:26 +020067
Bram Moolenaar1056d982006-03-09 22:37:52 +000068" call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
69 return 0
Bram Moolenaara5fac542005-10-12 20:58:49 +000070endfun
71
72" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +000073" s:NFH_html: handles html when the user hits "x" when the {{{1
Bram Moolenaara5fac542005-10-12 20:58:49 +000074" cursor is atop a *.html file
Bram Moolenaar1056d982006-03-09 22:37:52 +000075fun! s:NFH_html(pagefile)
76" call Dfunc("s:NFH_html(".a:pagefile.")")
Bram Moolenaara5fac542005-10-12 20:58:49 +000077
78 let page= substitute(a:pagefile,'^','file://','')
79
80 if executable("mozilla")
81" call Decho("executing !mozilla ".page)
Bram Moolenaar5c736222010-01-06 20:54:52 +010082 exe "!mozilla ".shellescape(page,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +000083 elseif executable("netscape")
84" call Decho("executing !netscape ".page)
Bram Moolenaar5c736222010-01-06 20:54:52 +010085 exe "!netscape ".shellescape(page,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +000086 else
Bram Moolenaar1056d982006-03-09 22:37:52 +000087" call Dret("s:NFH_html 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +000088 return 0
89 endif
90
Bram Moolenaar1056d982006-03-09 22:37:52 +000091" call Dret("s:NFH_html 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +000092 return 1
93endfun
94
95" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +000096" s:NFH_htm: handles html when the user hits "x" when the {{{1
Bram Moolenaara5fac542005-10-12 20:58:49 +000097" cursor is atop a *.htm file
Bram Moolenaar1056d982006-03-09 22:37:52 +000098fun! s:NFH_htm(pagefile)
99" call Dfunc("s:NFH_htm(".a:pagefile.")")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000100
101 let page= substitute(a:pagefile,'^','file://','')
102
103 if executable("mozilla")
104" call Decho("executing !mozilla ".page)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100105 exe "!mozilla ".shellescape(page,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000106 elseif executable("netscape")
107" call Decho("executing !netscape ".page)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100108 exe "!netscape ".shellescape(page,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000109 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000110" call Dret("s:NFH_htm 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000111 return 0
112 endif
113
Bram Moolenaar1056d982006-03-09 22:37:52 +0000114" call Dret("s:NFH_htm 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000115 return 1
116endfun
117
118" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000119" s:NFH_jpg: {{{1
120fun! s:NFH_jpg(jpgfile)
121" call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000122
123 if executable("gimp")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100124 exe "silent! !gimp -s ".shellescape(a:jpgfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000125 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
126" call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
Bram Moolenaar5c736222010-01-06 20:54:52 +0100127 exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:jpgfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000128 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000129" call Dret("s:NFH_jpg 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000130 return 0
131 endif
132
Bram Moolenaar1056d982006-03-09 22:37:52 +0000133" call Dret("s:NFH_jpg 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000134 return 1
135endfun
136
137" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000138" s:NFH_gif: {{{1
139fun! s:NFH_gif(giffile)
140" call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000141
142 if executable("gimp")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100143 exe "silent! !gimp -s ".shellescape(a:giffile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000144 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100145 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:giffile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000146 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000147" call Dret("s:NFH_gif 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000148 return 0
149 endif
150
Bram Moolenaar1056d982006-03-09 22:37:52 +0000151" call Dret("s:NFH_gif 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000152 return 1
153endfun
154
155" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000156" s:NFH_png: {{{1
157fun! s:NFH_png(pngfile)
158" call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000159
160 if executable("gimp")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100161 exe "silent! !gimp -s ".shellescape(a:pngfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000162 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100163 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pngfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000164 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000165" call Dret("s:NFH_png 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000166 return 0
167 endif
168
Bram Moolenaar1056d982006-03-09 22:37:52 +0000169" call Dret("s:NFH_png 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000170 return 1
171endfun
172
173" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000174" s:NFH_pnm: {{{1
175fun! s:NFH_pnm(pnmfile)
176" call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000177
178 if executable("gimp")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100179 exe "silent! !gimp -s ".shellescape(a:pnmfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000180 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100181 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pnmfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000182 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000183" call Dret("s:NFH_pnm 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000184 return 0
185 endif
186
Bram Moolenaar1056d982006-03-09 22:37:52 +0000187" call Dret("s:NFH_pnm 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000188 return 1
189endfun
190
191" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000192" s:NFH_bmp: visualize bmp files {{{1
193fun! s:NFH_bmp(bmpfile)
194" call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000195
196 if executable("gimp")
197 exe "silent! !gimp -s ".a:bmpfile
198 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100199 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:bmpfile,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000200 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000201" call Dret("s:NFH_bmp 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000202 return 0
203 endif
204
Bram Moolenaar1056d982006-03-09 22:37:52 +0000205" call Dret("s:NFH_bmp 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000206 return 1
207endfun
208
209" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000210" s:NFH_pdf: visualize pdf files {{{1
211fun! s:NFH_pdf(pdf)
212" call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000213 if executable("gs")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100214 exe 'silent! !gs '.shellescape(a:pdf,1)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000215 elseif executable("pdftotext")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100216 exe 'silent! pdftotext -nopgbrk '.shellescape(a:pdf,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000217 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000218" call Dret("s:NFH_pdf 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000219 return 0
220 endif
221
Bram Moolenaar1056d982006-03-09 22:37:52 +0000222" call Dret("s:NFH_pdf 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000223 return 1
224endfun
225
226" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000227" s:NFH_doc: visualize doc files {{{1
228fun! s:NFH_doc(doc)
229" call Dfunc("s:NFH_doc(doc<".a:doc.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000230
231 if executable("oowriter")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100232 exe 'silent! !oowriter '.shellescape(a:doc,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000233 redraw!
234 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000235" call Dret("s:NFH_doc 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000236 return 0
237 endif
238
Bram Moolenaar1056d982006-03-09 22:37:52 +0000239" call Dret("s:NFH_doc 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000240 return 1
241endfun
242
243" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000244" s:NFH_sxw: visualize sxw files {{{1
245fun! s:NFH_sxw(sxw)
246" call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000247
248 if executable("oowriter")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100249 exe 'silent! !oowriter '.shellescape(a:sxw,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000250 redraw!
251 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000252" call Dret("s:NFH_sxw 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000253 return 0
254 endif
255
Bram Moolenaar1056d982006-03-09 22:37:52 +0000256" call Dret("s:NFH_sxw 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000257 return 1
258endfun
259
260" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000261" s:NFH_xls: visualize xls files {{{1
262fun! s:NFH_xls(xls)
263" call Dfunc("s:NFH_xls(xls<".a:xls.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000264
265 if executable("oocalc")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100266 exe 'silent! !oocalc '.shellescape(a:xls,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000267 redraw!
268 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000269" call Dret("s:NFH_xls 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000270 return 0
271 endif
272
Bram Moolenaar1056d982006-03-09 22:37:52 +0000273" call Dret("s:NFH_xls 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000274 return 1
275endfun
276
277" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000278" s:NFH_ps: handles PostScript files {{{1
279fun! s:NFH_ps(ps)
280" call Dfunc("s:NFH_ps(ps<".a:ps.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000281 if executable("gs")
Bram Moolenaar1056d982006-03-09 22:37:52 +0000282" call Decho("exe silent! !gs ".a:ps)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100283 exe "silent! !gs ".shellescape(a:ps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000284 redraw!
285 elseif executable("ghostscript")
Bram Moolenaar1056d982006-03-09 22:37:52 +0000286" call Decho("exe silent! !ghostscript ".a:ps)
Bram Moolenaar5c736222010-01-06 20:54:52 +0100287 exe "silent! !ghostscript ".shellescape(a:ps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000288 redraw!
289 elseif executable("gswin32")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100290" call Decho("exe silent! !gswin32 ".shellescape(a:ps,1))
291 exe "silent! !gswin32 ".shellescape(a:ps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000292 redraw!
293 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000294" call Dret("s:NFH_ps 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000295 return 0
296 endif
297
Bram Moolenaar1056d982006-03-09 22:37:52 +0000298" call Dret("s:NFH_ps 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000299 return 1
300endfun
301
302" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000303" s:NFH_eps: handles encapsulated PostScript files {{{1
304fun! s:NFH_eps(eps)
305" call Dfunc("s:NFH_eps()")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000306 if executable("gs")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100307 exe "silent! !gs ".shellescape(a:eps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000308 redraw!
309 elseif executable("ghostscript")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100310 exe "silent! !ghostscript ".shellescape(a:eps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000311 redraw!
312 elseif executable("ghostscript")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100313 exe "silent! !ghostscript ".shellescape(a:eps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000314 redraw!
315 elseif executable("gswin32")
Bram Moolenaar5c736222010-01-06 20:54:52 +0100316 exe "silent! !gswin32 ".shellescape(a:eps,1)
Bram Moolenaara5fac542005-10-12 20:58:49 +0000317 redraw!
318 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000319" call Dret("s:NFH_eps 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000320 return 0
321 endif
Bram Moolenaar1056d982006-03-09 22:37:52 +0000322" call Dret("s:NFH_eps 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000323 return 1
324endfun
325
326" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000327" s:NFH_fig: handles xfig files {{{1
328fun! s:NFH_fig(fig)
329" call Dfunc("s:NFH_fig()")
330 if executable("xfig")
331 exe "silent! !xfig ".a:fig
332 redraw!
333 else
334" call Dret("s:NFH_fig 0")
335 return 0
336 endif
337
338" call Dret("s:NFH_fig 1")
339 return 1
340endfun
341
342" ---------------------------------------------------------------------
343" s:NFH_obj: handles tgif's obj files {{{1
344fun! s:NFH_obj(obj)
345" call Dfunc("s:NFH_obj()")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000346 if has("unix") && executable("tgif")
347 exe "silent! !tgif ".a:obj
348 redraw!
349 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000350" call Dret("s:NFH_obj 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000351 return 0
352 endif
353
Bram Moolenaar1056d982006-03-09 22:37:52 +0000354" call Dret("s:NFH_obj 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000355 return 1
356endfun
357
358let &cpo= s:keepcpo
Bram Moolenaar5b435d62012-04-05 17:33:26 +0200359unlet s:keepcpo
Bram Moolenaara5fac542005-10-12 20:58:49 +0000360" ---------------------------------------------------------------------
361" Modelines: {{{1
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000362" vim: fdm=marker