blob: 5fb05bad3ea47148d8b74dcc35c25bfb9bbf9062 [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")
3" Author: Charles E. Campbell, Jr.
Bram Moolenaarc81e5e72007-05-05 18:24:42 +00004" Date: May 30, 2006
5" Version: 9
Bram Moolenaara5fac542005-10-12 20:58:49 +00006" Copyright: Copyright (C) 1999-2005 Charles E. Campbell, Jr. {{{1
7" 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
23let s:keepcpo= &cpo
24set cpo&vim
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000025let g:loaded_netrwFileHandlers= "v9"
Bram Moolenaara5fac542005-10-12 20:58:49 +000026
27" ---------------------------------------------------------------------
Bram Moolenaard68071d2006-05-02 22:08:30 +000028" netrwFileHandlers#Invoke: {{{1
Bram Moolenaar1056d982006-03-09 22:37:52 +000029fun! netrwFileHandlers#Invoke(exten,fname)
30" call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000031 let fname= a:fname
32 " list of supported special characters. Consider rcs,v --- that can be
33 " supported with a NFH_rcsCOMMAv() handler
34 if a:fname =~ '[@:,$!=\-+%?;~]'
35 let specials= {
36\ '@' : 'AT',
37\ ':' : 'COLON',
38\ ',' : 'COMMA',
39\ '$' : 'DOLLAR',
40\ '!' : 'EXCLAMATION',
41\ '=' : 'EQUAL',
42\ '-' : 'MINUS',
43\ '+' : 'PLUS',
44\ '%' : 'PERCENT',
45\ '?' : 'QUESTION',
46\ ';' : 'SEMICOLON',
47\ '~' : 'TILDE'}
48 let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
49" call Decho('fname<'.fname.'> done with dictionary')
50 endif
Bram Moolenaar1056d982006-03-09 22:37:52 +000051
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000052 if a:exten != "" && exists("*NFH_".a:exten)
53 " support user NFH_*() functions
54" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
55 exe "let ret= NFH_".a:exten.'("'.fname.'")'
56 elseif a:exten != "" && exists("*s:NFH_".a:exten)
57 " use builtin-NFH_*() functions
58" call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
59 exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
Bram Moolenaar1056d982006-03-09 22:37:52 +000060 endif
61
62" call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
63 return 0
Bram Moolenaara5fac542005-10-12 20:58:49 +000064endfun
65
66" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +000067" s:NFH_html: handles html when the user hits "x" when the {{{1
Bram Moolenaara5fac542005-10-12 20:58:49 +000068" cursor is atop a *.html file
Bram Moolenaar1056d982006-03-09 22:37:52 +000069fun! s:NFH_html(pagefile)
70" call Dfunc("s:NFH_html(".a:pagefile.")")
Bram Moolenaara5fac542005-10-12 20:58:49 +000071
72 let page= substitute(a:pagefile,'^','file://','')
73
74 if executable("mozilla")
75" call Decho("executing !mozilla ".page)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000076 exe "!mozilla ".g:netrw_shq.page.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +000077 elseif executable("netscape")
78" call Decho("executing !netscape ".page)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000079 exe "!netscape ".g:netrw_shq..page.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +000080 else
Bram Moolenaar1056d982006-03-09 22:37:52 +000081" call Dret("s:NFH_html 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +000082 return 0
83 endif
84
Bram Moolenaar1056d982006-03-09 22:37:52 +000085" call Dret("s:NFH_html 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +000086 return 1
87endfun
88
89" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +000090" s:NFH_htm: handles html when the user hits "x" when the {{{1
Bram Moolenaara5fac542005-10-12 20:58:49 +000091" cursor is atop a *.htm file
Bram Moolenaar1056d982006-03-09 22:37:52 +000092fun! s:NFH_htm(pagefile)
93" call Dfunc("s:NFH_htm(".a:pagefile.")")
Bram Moolenaara5fac542005-10-12 20:58:49 +000094
95 let page= substitute(a:pagefile,'^','file://','')
96
97 if executable("mozilla")
98" call Decho("executing !mozilla ".page)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +000099 exe "!mozilla ".g:netrw_shq.page.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000100 elseif executable("netscape")
101" call Decho("executing !netscape ".page)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000102 exe "!netscape ".g:netrw_shq.page.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000103 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000104" call Dret("s:NFH_htm 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000105 return 0
106 endif
107
Bram Moolenaar1056d982006-03-09 22:37:52 +0000108" call Dret("s:NFH_htm 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000109 return 1
110endfun
111
112" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000113" s:NFH_jpg: {{{1
114fun! s:NFH_jpg(jpgfile)
115" call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000116
117 if executable("gimp")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000118 exe "silent! !gimp -s ".g:netrw_shq.a:jpgfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000119 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
120" call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000121 exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:jpgfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000122 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000123" call Dret("s:NFH_jpg 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000124 return 0
125 endif
126
Bram Moolenaar1056d982006-03-09 22:37:52 +0000127" call Dret("s:NFH_jpg 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000128 return 1
129endfun
130
131" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000132" s:NFH_gif: {{{1
133fun! s:NFH_gif(giffile)
134" call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000135
136 if executable("gimp")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000137 exe "silent! !gimp -s ".g:netrw_shq.a:giffile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000138 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000139 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:giffile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000140 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000141" call Dret("s:NFH_gif 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000142 return 0
143 endif
144
Bram Moolenaar1056d982006-03-09 22:37:52 +0000145" call Dret("s:NFH_gif 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000146 return 1
147endfun
148
149" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000150" s:NFH_png: {{{1
151fun! s:NFH_png(pngfile)
152" call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000153
154 if executable("gimp")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000155 exe "silent! !gimp -s ".g:netrw_shq.a:pngfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000156 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000157 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:pngfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000158 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000159" call Dret("s:NFH_png 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000160 return 0
161 endif
162
Bram Moolenaar1056d982006-03-09 22:37:52 +0000163" call Dret("s:NFH_png 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000164 return 1
165endfun
166
167" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000168" s:NFH_pnm: {{{1
169fun! s:NFH_pnm(pnmfile)
170" call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000171
172 if executable("gimp")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000173 exe "silent! !gimp -s ".g:netrw_shq.a:pnmfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000174 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000175 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:pnmfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000176 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000177" call Dret("s:NFH_pnm 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000178 return 0
179 endif
180
Bram Moolenaar1056d982006-03-09 22:37:52 +0000181" call Dret("s:NFH_pnm 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000182 return 1
183endfun
184
185" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000186" s:NFH_bmp: visualize bmp files {{{1
187fun! s:NFH_bmp(bmpfile)
188" call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000189
190 if executable("gimp")
191 exe "silent! !gimp -s ".a:bmpfile
192 elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000193 exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:bmpfile.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000194 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000195" call Dret("s:NFH_bmp 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000196 return 0
197 endif
198
Bram Moolenaar1056d982006-03-09 22:37:52 +0000199" call Dret("s:NFH_bmp 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000200 return 1
201endfun
202
203" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000204" s:NFH_pdf: visualize pdf files {{{1
205fun! s:NFH_pdf(pdf)
206" call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000207 if executable("gs")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000208 exe 'silent! !gs '.g:netrw_shq.a:pdf.g:netrw_shq
209 elseif executable("pdftotext")
210 exe 'silent! pdftotext -nopgbrk '.g:netrw_shq.a:pdf.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000211 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000212" call Dret("s:NFH_pdf 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000213 return 0
214 endif
215
Bram Moolenaar1056d982006-03-09 22:37:52 +0000216" call Dret("s:NFH_pdf 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000217 return 1
218endfun
219
220" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000221" s:NFH_doc: visualize doc files {{{1
222fun! s:NFH_doc(doc)
223" call Dfunc("s:NFH_doc(doc<".a:doc.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000224
225 if executable("oowriter")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000226 exe 'silent! !oowriter '.g:netrw_shq.a:doc.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000227 redraw!
228 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000229" call Dret("s:NFH_doc 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000230 return 0
231 endif
232
Bram Moolenaar1056d982006-03-09 22:37:52 +0000233" call Dret("s:NFH_doc 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000234 return 1
235endfun
236
237" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000238" s:NFH_sxw: visualize sxw files {{{1
239fun! s:NFH_sxw(sxw)
240" call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000241
242 if executable("oowriter")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000243 exe 'silent! !oowriter '.g:netrw_shq.a:sxw.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000244 redraw!
245 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000246" call Dret("s:NFH_sxw 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000247 return 0
248 endif
249
Bram Moolenaar1056d982006-03-09 22:37:52 +0000250" call Dret("s:NFH_sxw 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000251 return 1
252endfun
253
254" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000255" s:NFH_xls: visualize xls files {{{1
256fun! s:NFH_xls(xls)
257" call Dfunc("s:NFH_xls(xls<".a:xls.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000258
259 if executable("oocalc")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000260 exe 'silent! !oocalc '.g:netrw_shq.a:xls.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000261 redraw!
262 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000263" call Dret("s:NFH_xls 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000264 return 0
265 endif
266
Bram Moolenaar1056d982006-03-09 22:37:52 +0000267" call Dret("s:NFH_xls 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000268 return 1
269endfun
270
271" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000272" s:NFH_ps: handles PostScript files {{{1
273fun! s:NFH_ps(ps)
274" call Dfunc("s:NFH_ps(ps<".a:ps.">)")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000275 if executable("gs")
Bram Moolenaar1056d982006-03-09 22:37:52 +0000276" call Decho("exe silent! !gs ".a:ps)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000277 exe "silent! !gs ".g:netrw_shq.a:ps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000278 redraw!
279 elseif executable("ghostscript")
Bram Moolenaar1056d982006-03-09 22:37:52 +0000280" call Decho("exe silent! !ghostscript ".a:ps)
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000281 exe "silent! !ghostscript ".g:netrw_shq.a:ps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000282 redraw!
283 elseif executable("gswin32")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000284" call Decho("exe silent! !gswin32 ".g:netrw_shq.a:ps.g:netrw_shq)
285 exe "silent! !gswin32 ".g:netrw_shq.a:ps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000286 redraw!
287 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000288" call Dret("s:NFH_ps 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000289 return 0
290 endif
291
Bram Moolenaar1056d982006-03-09 22:37:52 +0000292" call Dret("s:NFH_ps 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000293 return 1
294endfun
295
296" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000297" s:NFH_eps: handles encapsulated PostScript files {{{1
298fun! s:NFH_eps(eps)
299" call Dfunc("s:NFH_eps()")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000300 if executable("gs")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000301 exe "silent! !gs ".g:netrw_shq.a:eps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000302 redraw!
303 elseif executable("ghostscript")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000304 exe "silent! !ghostscript ".g:netrw_shq.a:eps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000305 redraw!
306 elseif executable("ghostscript")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000307 exe "silent! !ghostscript ".g:netrw_shq.a:eps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000308 redraw!
309 elseif executable("gswin32")
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000310 exe "silent! !gswin32 ".g:netrw_shq.a:eps.g:netrw_shq
Bram Moolenaara5fac542005-10-12 20:58:49 +0000311 redraw!
312 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000313" call Dret("s:NFH_eps 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000314 return 0
315 endif
Bram Moolenaar1056d982006-03-09 22:37:52 +0000316" call Dret("s:NFH_eps 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000317 return 1
318endfun
319
320" ---------------------------------------------------------------------
Bram Moolenaar1056d982006-03-09 22:37:52 +0000321" s:NFH_fig: handles xfig files {{{1
322fun! s:NFH_fig(fig)
323" call Dfunc("s:NFH_fig()")
324 if executable("xfig")
325 exe "silent! !xfig ".a:fig
326 redraw!
327 else
328" call Dret("s:NFH_fig 0")
329 return 0
330 endif
331
332" call Dret("s:NFH_fig 1")
333 return 1
334endfun
335
336" ---------------------------------------------------------------------
337" s:NFH_obj: handles tgif's obj files {{{1
338fun! s:NFH_obj(obj)
339" call Dfunc("s:NFH_obj()")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000340 if has("unix") && executable("tgif")
341 exe "silent! !tgif ".a:obj
342 redraw!
343 else
Bram Moolenaar1056d982006-03-09 22:37:52 +0000344" call Dret("s:NFH_obj 0")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000345 return 0
346 endif
347
Bram Moolenaar1056d982006-03-09 22:37:52 +0000348" call Dret("s:NFH_obj 1")
Bram Moolenaara5fac542005-10-12 20:58:49 +0000349 return 1
350endfun
351
352let &cpo= s:keepcpo
353" ---------------------------------------------------------------------
354" Modelines: {{{1
Bram Moolenaarc81e5e72007-05-05 18:24:42 +0000355" vim: fdm=marker