1" netrwFileHandlers: contains various extension-based file handlers for
2"                    netrw's browsers' x command ("eXecute launcher")
3" Author:	Charles E. Campbell, Jr.
4" Date:		May 30, 2006
5" Version:	9
6" 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
25let g:loaded_netrwFileHandlers= "v9"
26
27" ---------------------------------------------------------------------
28" netrwFileHandlers#Invoke: {{{1
29fun! netrwFileHandlers#Invoke(exten,fname)
30"  call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
31  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
51
52  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.'")'
60  endif
61
62"  call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
63  return 0
64endfun
65
66" ---------------------------------------------------------------------
67" s:NFH_html: handles html when the user hits "x" when the {{{1
68"                        cursor is atop a *.html file
69fun! s:NFH_html(pagefile)
70"  call Dfunc("s:NFH_html(".a:pagefile.")")
71
72  let page= substitute(a:pagefile,'^','file://','')
73
74  if executable("mozilla")
75"   call Decho("executing !mozilla ".page)
76   exe "!mozilla ".g:netrw_shq.page.g:netrw_shq
77  elseif executable("netscape")
78"   call Decho("executing !netscape ".page)
79   exe "!netscape ".g:netrw_shq..page.g:netrw_shq
80  else
81"   call Dret("s:NFH_html 0")
82   return 0
83  endif
84
85"  call Dret("s:NFH_html 1")
86  return 1
87endfun
88
89" ---------------------------------------------------------------------
90" s:NFH_htm: handles html when the user hits "x" when the {{{1
91"                        cursor is atop a *.htm file
92fun! s:NFH_htm(pagefile)
93"  call Dfunc("s:NFH_htm(".a:pagefile.")")
94
95  let page= substitute(a:pagefile,'^','file://','')
96
97  if executable("mozilla")
98"   call Decho("executing !mozilla ".page)
99   exe "!mozilla ".g:netrw_shq.page.g:netrw_shq
100  elseif executable("netscape")
101"   call Decho("executing !netscape ".page)
102   exe "!netscape ".g:netrw_shq.page.g:netrw_shq
103  else
104"   call Dret("s:NFH_htm 0")
105   return 0
106  endif
107
108"  call Dret("s:NFH_htm 1")
109  return 1
110endfun
111
112" ---------------------------------------------------------------------
113" s:NFH_jpg: {{{1
114fun! s:NFH_jpg(jpgfile)
115"  call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")
116
117  if executable("gimp")
118   exe "silent! !gimp -s ".g:netrw_shq.a:jpgfile.g:netrw_shq
119  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
120"   call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
121   exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:jpgfile.g:netrw_shq
122  else
123"   call Dret("s:NFH_jpg 0")
124   return 0
125  endif
126
127"  call Dret("s:NFH_jpg 1")
128  return 1
129endfun
130
131" ---------------------------------------------------------------------
132" s:NFH_gif: {{{1
133fun! s:NFH_gif(giffile)
134"  call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")
135
136  if executable("gimp")
137   exe "silent! !gimp -s ".g:netrw_shq.a:giffile.g:netrw_shq
138  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
139   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:giffile.g:netrw_shq
140  else
141"   call Dret("s:NFH_gif 0")
142   return 0
143  endif
144
145"  call Dret("s:NFH_gif 1")
146  return 1
147endfun
148
149" ---------------------------------------------------------------------
150" s:NFH_png: {{{1
151fun! s:NFH_png(pngfile)
152"  call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")
153
154  if executable("gimp")
155   exe "silent! !gimp -s ".g:netrw_shq.a:pngfile.g:netrw_shq
156  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
157   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:pngfile.g:netrw_shq
158  else
159"   call Dret("s:NFH_png 0")
160   return 0
161  endif
162
163"  call Dret("s:NFH_png 1")
164  return 1
165endfun
166
167" ---------------------------------------------------------------------
168" s:NFH_pnm: {{{1
169fun! s:NFH_pnm(pnmfile)
170"  call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")
171
172  if executable("gimp")
173   exe "silent! !gimp -s ".g:netrw_shq.a:pnmfile.g:netrw_shq
174  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
175   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:pnmfile.g:netrw_shq
176  else
177"   call Dret("s:NFH_pnm 0")
178   return 0
179  endif
180
181"  call Dret("s:NFH_pnm 1")
182  return 1
183endfun
184
185" ---------------------------------------------------------------------
186" s:NFH_bmp: visualize bmp files {{{1
187fun! s:NFH_bmp(bmpfile)
188"  call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)")
189
190  if executable("gimp")
191   exe "silent! !gimp -s ".a:bmpfile
192  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
193   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".g:netrw_shq.a:bmpfile.g:netrw_shq
194  else
195"   call Dret("s:NFH_bmp 0")
196   return 0
197  endif
198
199"  call Dret("s:NFH_bmp 1")
200  return 1
201endfun
202
203" ---------------------------------------------------------------------
204" s:NFH_pdf: visualize pdf files {{{1
205fun! s:NFH_pdf(pdf)
206"  call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
207  if executable("gs")
208   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
211  else
212"  call Dret("s:NFH_pdf 0")
213   return 0
214  endif
215
216"  call Dret("s:NFH_pdf 1")
217  return 1
218endfun
219
220" ---------------------------------------------------------------------
221" s:NFH_doc: visualize doc files {{{1
222fun! s:NFH_doc(doc)
223"  call Dfunc("s:NFH_doc(doc<".a:doc.">)")
224
225  if executable("oowriter")
226   exe 'silent! !oowriter '.g:netrw_shq.a:doc.g:netrw_shq
227   redraw!
228  else
229"  call Dret("s:NFH_doc 0")
230   return 0
231  endif
232
233"  call Dret("s:NFH_doc 1")
234  return 1
235endfun
236
237" ---------------------------------------------------------------------
238" s:NFH_sxw: visualize sxw files {{{1
239fun! s:NFH_sxw(sxw)
240"  call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")
241
242  if executable("oowriter")
243   exe 'silent! !oowriter '.g:netrw_shq.a:sxw.g:netrw_shq
244   redraw!
245  else
246"   call Dret("s:NFH_sxw 0")
247   return 0
248  endif
249
250"  call Dret("s:NFH_sxw 1")
251  return 1
252endfun
253
254" ---------------------------------------------------------------------
255" s:NFH_xls: visualize xls files {{{1
256fun! s:NFH_xls(xls)
257"  call Dfunc("s:NFH_xls(xls<".a:xls.">)")
258
259  if executable("oocalc")
260   exe 'silent! !oocalc '.g:netrw_shq.a:xls.g:netrw_shq
261   redraw!
262  else
263"  call Dret("s:NFH_xls 0")
264   return 0
265  endif
266
267"  call Dret("s:NFH_xls 1")
268  return 1
269endfun
270
271" ---------------------------------------------------------------------
272" s:NFH_ps: handles PostScript files {{{1
273fun! s:NFH_ps(ps)
274"  call Dfunc("s:NFH_ps(ps<".a:ps.">)")
275  if executable("gs")
276"   call Decho("exe silent! !gs ".a:ps)
277   exe "silent! !gs ".g:netrw_shq.a:ps.g:netrw_shq
278   redraw!
279  elseif executable("ghostscript")
280"   call Decho("exe silent! !ghostscript ".a:ps)
281   exe "silent! !ghostscript ".g:netrw_shq.a:ps.g:netrw_shq
282   redraw!
283  elseif executable("gswin32")
284"   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
286   redraw!
287  else
288"   call Dret("s:NFH_ps 0")
289   return 0
290  endif
291
292"  call Dret("s:NFH_ps 1")
293  return 1
294endfun
295
296" ---------------------------------------------------------------------
297" s:NFH_eps: handles encapsulated PostScript files {{{1
298fun! s:NFH_eps(eps)
299"  call Dfunc("s:NFH_eps()")
300  if executable("gs")
301   exe "silent! !gs ".g:netrw_shq.a:eps.g:netrw_shq
302   redraw!
303  elseif executable("ghostscript")
304   exe "silent! !ghostscript ".g:netrw_shq.a:eps.g:netrw_shq
305   redraw!
306  elseif executable("ghostscript")
307   exe "silent! !ghostscript ".g:netrw_shq.a:eps.g:netrw_shq
308   redraw!
309  elseif executable("gswin32")
310   exe "silent! !gswin32 ".g:netrw_shq.a:eps.g:netrw_shq
311   redraw!
312  else
313"   call Dret("s:NFH_eps 0")
314   return 0
315  endif
316"  call Dret("s:NFH_eps 0")
317  return 1
318endfun
319
320" ---------------------------------------------------------------------
321" 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()")
340  if has("unix") && executable("tgif")
341   exe "silent! !tgif ".a:obj
342   redraw!
343  else
344"   call Dret("s:NFH_obj 0")
345   return 0
346  endif
347
348"  call Dret("s:NFH_obj 1")
349  return 1
350endfun
351
352let &cpo= s:keepcpo
353" ---------------------------------------------------------------------
354"  Modelines: {{{1
355"  vim: fdm=marker
356