1a5fac54aSBram Moolenaar" netrwFileHandlers: contains various extension-based file handlers for
2a5fac54aSBram Moolenaar"                    netrw's browsers' x command ("eXecute launcher")
3ff034194SBram Moolenaar" Author:	Charles E. Campbell
4*1d59aa1fSBram Moolenaar" Date:		Sep 18, 2020
5*1d59aa1fSBram Moolenaar" Version:	11
6ff034194SBram Moolenaar" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
7a5fac54aSBram Moolenaar"               Permission is hereby granted to use and distribute this code,
8a5fac54aSBram Moolenaar"               with or without modifications, provided that this copyright
9a5fac54aSBram Moolenaar"               notice is copied with it. Like anything else that's free,
10a5fac54aSBram Moolenaar"               netrwFileHandlers.vim is provided *as is* and comes with no
11a5fac54aSBram Moolenaar"               warranty of any kind, either expressed or implied. In no
12a5fac54aSBram Moolenaar"               event will the copyright holder be liable for any damages
13a5fac54aSBram Moolenaar"               resulting from the use of this software.
14a5fac54aSBram Moolenaar"
15a5fac54aSBram Moolenaar" Rom 6:23 (WEB) For the wages of sin is death, but the free gift of God {{{1
16a5fac54aSBram Moolenaar"                is eternal life in Christ Jesus our Lord.
17a5fac54aSBram Moolenaar
18a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
19a5fac54aSBram Moolenaar" Load Once: {{{1
20a5fac54aSBram Moolenaarif exists("g:loaded_netrwFileHandlers") || &cp
21a5fac54aSBram Moolenaar finish
22a5fac54aSBram Moolenaarendif
23*1d59aa1fSBram Moolenaarlet g:loaded_netrwFileHandlers= "v11"
245c73622aSBram Moolenaarif v:version < 702
255c73622aSBram Moolenaar echohl WarningMsg
265c73622aSBram Moolenaar echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
275c73622aSBram Moolenaar echohl Normal
285c73622aSBram Moolenaar finish
295c73622aSBram Moolenaarendif
30a5fac54aSBram Moolenaarlet s:keepcpo= &cpo
31a5fac54aSBram Moolenaarset cpo&vim
32a5fac54aSBram Moolenaar
33a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
34d68071d8SBram Moolenaar" netrwFileHandlers#Invoke: {{{1
351056d988SBram Moolenaarfun! netrwFileHandlers#Invoke(exten,fname)
361056d988SBram Moolenaar"  call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
37e6ae6225SBram Moolenaar  let exten= a:exten
38c81e5e79SBram Moolenaar  " list of supported special characters.  Consider rcs,v --- that can be
39c81e5e79SBram Moolenaar  " supported with a NFH_rcsCOMMAv() handler
40e6ae6225SBram Moolenaar  if exten =~ '[@:,$!=\-+%?;~]'
41c81e5e79SBram Moolenaar   let specials= {
42c81e5e79SBram Moolenaar\   '@' : 'AT',
43c81e5e79SBram Moolenaar\   ':' : 'COLON',
44c81e5e79SBram Moolenaar\   ',' : 'COMMA',
45c81e5e79SBram Moolenaar\   '$' : 'DOLLAR',
46c81e5e79SBram Moolenaar\   '!' : 'EXCLAMATION',
47c81e5e79SBram Moolenaar\   '=' : 'EQUAL',
48c81e5e79SBram Moolenaar\   '-' : 'MINUS',
49c81e5e79SBram Moolenaar\   '+' : 'PLUS',
50c81e5e79SBram Moolenaar\   '%' : 'PERCENT',
51c81e5e79SBram Moolenaar\   '?' : 'QUESTION',
52c81e5e79SBram Moolenaar\   ';' : 'SEMICOLON',
53c81e5e79SBram Moolenaar\   '~' : 'TILDE'}
54e6ae6225SBram Moolenaar   let exten= substitute(a:exten,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
55c81e5e79SBram Moolenaar"   call Decho('fname<'.fname.'> done with dictionary')
56c81e5e79SBram Moolenaar  endif
571056d988SBram Moolenaar
58e6ae6225SBram Moolenaar  if a:exten != "" && exists("*NFH_".exten)
59c81e5e79SBram Moolenaar   " support user NFH_*() functions
60c81e5e79SBram Moolenaar"   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
61e6ae6225SBram Moolenaar   exe "let ret= NFH_".exten.'("'.a:fname.'")'
62e6ae6225SBram Moolenaar  elseif a:exten != "" && exists("*s:NFH_".exten)
63c81e5e79SBram Moolenaar   " use builtin-NFH_*() functions
64c81e5e79SBram Moolenaar"   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
65e6ae6225SBram Moolenaar   exe "let ret= s:NFH_".a:exten.'("'.a:fname.'")'
661056d988SBram Moolenaar  endif
671056d988SBram Moolenaar
681056d988SBram Moolenaar"  call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
691056d988SBram Moolenaar  return 0
70a5fac54aSBram Moolenaarendfun
71a5fac54aSBram Moolenaar
72a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
731056d988SBram Moolenaar" s:NFH_html: handles html when the user hits "x" when the {{{1
74a5fac54aSBram Moolenaar"                        cursor is atop a *.html file
751056d988SBram Moolenaarfun! s:NFH_html(pagefile)
761056d988SBram Moolenaar"  call Dfunc("s:NFH_html(".a:pagefile.")")
77a5fac54aSBram Moolenaar
78a5fac54aSBram Moolenaar  let page= substitute(a:pagefile,'^','file://','')
79a5fac54aSBram Moolenaar
80a5fac54aSBram Moolenaar  if executable("mozilla")
81a5fac54aSBram Moolenaar"   call Decho("executing !mozilla ".page)
825c73622aSBram Moolenaar   exe "!mozilla ".shellescape(page,1)
83a5fac54aSBram Moolenaar  elseif executable("netscape")
84a5fac54aSBram Moolenaar"   call Decho("executing !netscape ".page)
855c73622aSBram Moolenaar   exe "!netscape ".shellescape(page,1)
86a5fac54aSBram Moolenaar  else
871056d988SBram Moolenaar"   call Dret("s:NFH_html 0")
88a5fac54aSBram Moolenaar   return 0
89a5fac54aSBram Moolenaar  endif
90a5fac54aSBram Moolenaar
911056d988SBram Moolenaar"  call Dret("s:NFH_html 1")
92a5fac54aSBram Moolenaar  return 1
93a5fac54aSBram Moolenaarendfun
94a5fac54aSBram Moolenaar
95a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
961056d988SBram Moolenaar" s:NFH_htm: handles html when the user hits "x" when the {{{1
97a5fac54aSBram Moolenaar"                        cursor is atop a *.htm file
981056d988SBram Moolenaarfun! s:NFH_htm(pagefile)
991056d988SBram Moolenaar"  call Dfunc("s:NFH_htm(".a:pagefile.")")
100a5fac54aSBram Moolenaar
101a5fac54aSBram Moolenaar  let page= substitute(a:pagefile,'^','file://','')
102a5fac54aSBram Moolenaar
103a5fac54aSBram Moolenaar  if executable("mozilla")
104a5fac54aSBram Moolenaar"   call Decho("executing !mozilla ".page)
1055c73622aSBram Moolenaar   exe "!mozilla ".shellescape(page,1)
106a5fac54aSBram Moolenaar  elseif executable("netscape")
107a5fac54aSBram Moolenaar"   call Decho("executing !netscape ".page)
1085c73622aSBram Moolenaar   exe "!netscape ".shellescape(page,1)
109a5fac54aSBram Moolenaar  else
1101056d988SBram Moolenaar"   call Dret("s:NFH_htm 0")
111a5fac54aSBram Moolenaar   return 0
112a5fac54aSBram Moolenaar  endif
113a5fac54aSBram Moolenaar
1141056d988SBram Moolenaar"  call Dret("s:NFH_htm 1")
115a5fac54aSBram Moolenaar  return 1
116a5fac54aSBram Moolenaarendfun
117a5fac54aSBram Moolenaar
118a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
1191056d988SBram Moolenaar" s:NFH_jpg: {{{1
1201056d988SBram Moolenaarfun! s:NFH_jpg(jpgfile)
1211056d988SBram Moolenaar"  call Dfunc("s:NFH_jpg(jpgfile<".a:jpgfile.">)")
122a5fac54aSBram Moolenaar
123a5fac54aSBram Moolenaar  if executable("gimp")
1245c73622aSBram Moolenaar   exe "silent! !gimp -s ".shellescape(a:jpgfile,1)
125a5fac54aSBram Moolenaar  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
126a5fac54aSBram Moolenaar"   call Decho("silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".escape(a:jpgfile," []|'"))
1275c73622aSBram Moolenaar   exe "!".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:jpgfile,1)
128a5fac54aSBram Moolenaar  else
1291056d988SBram Moolenaar"   call Dret("s:NFH_jpg 0")
130a5fac54aSBram Moolenaar   return 0
131a5fac54aSBram Moolenaar  endif
132a5fac54aSBram Moolenaar
1331056d988SBram Moolenaar"  call Dret("s:NFH_jpg 1")
134a5fac54aSBram Moolenaar  return 1
135a5fac54aSBram Moolenaarendfun
136a5fac54aSBram Moolenaar
137a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
1381056d988SBram Moolenaar" s:NFH_gif: {{{1
1391056d988SBram Moolenaarfun! s:NFH_gif(giffile)
1401056d988SBram Moolenaar"  call Dfunc("s:NFH_gif(giffile<".a:giffile.">)")
141a5fac54aSBram Moolenaar
142a5fac54aSBram Moolenaar  if executable("gimp")
1435c73622aSBram Moolenaar   exe "silent! !gimp -s ".shellescape(a:giffile,1)
144a5fac54aSBram Moolenaar  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
1455c73622aSBram Moolenaar   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:giffile,1)
146a5fac54aSBram Moolenaar  else
1471056d988SBram Moolenaar"   call Dret("s:NFH_gif 0")
148a5fac54aSBram Moolenaar   return 0
149a5fac54aSBram Moolenaar  endif
150a5fac54aSBram Moolenaar
1511056d988SBram Moolenaar"  call Dret("s:NFH_gif 1")
152a5fac54aSBram Moolenaar  return 1
153a5fac54aSBram Moolenaarendfun
154a5fac54aSBram Moolenaar
155a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
1561056d988SBram Moolenaar" s:NFH_png: {{{1
1571056d988SBram Moolenaarfun! s:NFH_png(pngfile)
1581056d988SBram Moolenaar"  call Dfunc("s:NFH_png(pngfile<".a:pngfile.">)")
159a5fac54aSBram Moolenaar
160a5fac54aSBram Moolenaar  if executable("gimp")
1615c73622aSBram Moolenaar   exe "silent! !gimp -s ".shellescape(a:pngfile,1)
162a5fac54aSBram Moolenaar  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
1635c73622aSBram Moolenaar   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pngfile,1)
164a5fac54aSBram Moolenaar  else
1651056d988SBram Moolenaar"   call Dret("s:NFH_png 0")
166a5fac54aSBram Moolenaar   return 0
167a5fac54aSBram Moolenaar  endif
168a5fac54aSBram Moolenaar
1691056d988SBram Moolenaar"  call Dret("s:NFH_png 1")
170a5fac54aSBram Moolenaar  return 1
171a5fac54aSBram Moolenaarendfun
172a5fac54aSBram Moolenaar
173a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
1741056d988SBram Moolenaar" s:NFH_pnm: {{{1
1751056d988SBram Moolenaarfun! s:NFH_pnm(pnmfile)
1761056d988SBram Moolenaar"  call Dfunc("s:NFH_pnm(pnmfile<".a:pnmfile.">)")
177a5fac54aSBram Moolenaar
178a5fac54aSBram Moolenaar  if executable("gimp")
1795c73622aSBram Moolenaar   exe "silent! !gimp -s ".shellescape(a:pnmfile,1)
180a5fac54aSBram Moolenaar  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
1815c73622aSBram Moolenaar   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:pnmfile,1)
182a5fac54aSBram Moolenaar  else
1831056d988SBram Moolenaar"   call Dret("s:NFH_pnm 0")
184a5fac54aSBram Moolenaar   return 0
185a5fac54aSBram Moolenaar  endif
186a5fac54aSBram Moolenaar
1871056d988SBram Moolenaar"  call Dret("s:NFH_pnm 1")
188a5fac54aSBram Moolenaar  return 1
189a5fac54aSBram Moolenaarendfun
190a5fac54aSBram Moolenaar
191a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
1921056d988SBram Moolenaar" s:NFH_bmp: visualize bmp files {{{1
1931056d988SBram Moolenaarfun! s:NFH_bmp(bmpfile)
1941056d988SBram Moolenaar"  call Dfunc("s:NFH_bmp(bmpfile<".a:bmpfile.">)")
195a5fac54aSBram Moolenaar
196a5fac54aSBram Moolenaar  if executable("gimp")
197a5fac54aSBram Moolenaar   exe "silent! !gimp -s ".a:bmpfile
198a5fac54aSBram Moolenaar  elseif executable(expand("$SystemRoot")."/SYSTEM32/MSPAINT.EXE")
1995c73622aSBram Moolenaar   exe "silent! !".expand("$SystemRoot")."/SYSTEM32/MSPAINT ".shellescape(a:bmpfile,1)
200a5fac54aSBram Moolenaar  else
2011056d988SBram Moolenaar"   call Dret("s:NFH_bmp 0")
202a5fac54aSBram Moolenaar   return 0
203a5fac54aSBram Moolenaar  endif
204a5fac54aSBram Moolenaar
2051056d988SBram Moolenaar"  call Dret("s:NFH_bmp 1")
206a5fac54aSBram Moolenaar  return 1
207a5fac54aSBram Moolenaarendfun
208a5fac54aSBram Moolenaar
209a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
2101056d988SBram Moolenaar" s:NFH_pdf: visualize pdf files {{{1
2111056d988SBram Moolenaarfun! s:NFH_pdf(pdf)
2121056d988SBram Moolenaar"  call Dfunc("s:NFH_pdf(pdf<".a:pdf.">)")
213a5fac54aSBram Moolenaar  if executable("gs")
2145c73622aSBram Moolenaar   exe 'silent! !gs '.shellescape(a:pdf,1)
215c81e5e79SBram Moolenaar  elseif executable("pdftotext")
2165c73622aSBram Moolenaar   exe 'silent! pdftotext -nopgbrk '.shellescape(a:pdf,1)
217a5fac54aSBram Moolenaar  else
2181056d988SBram Moolenaar"  call Dret("s:NFH_pdf 0")
219a5fac54aSBram Moolenaar   return 0
220a5fac54aSBram Moolenaar  endif
221a5fac54aSBram Moolenaar
2221056d988SBram Moolenaar"  call Dret("s:NFH_pdf 1")
223a5fac54aSBram Moolenaar  return 1
224a5fac54aSBram Moolenaarendfun
225a5fac54aSBram Moolenaar
226a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
2271056d988SBram Moolenaar" s:NFH_doc: visualize doc files {{{1
2281056d988SBram Moolenaarfun! s:NFH_doc(doc)
2291056d988SBram Moolenaar"  call Dfunc("s:NFH_doc(doc<".a:doc.">)")
230a5fac54aSBram Moolenaar
231a5fac54aSBram Moolenaar  if executable("oowriter")
2325c73622aSBram Moolenaar   exe 'silent! !oowriter '.shellescape(a:doc,1)
233a5fac54aSBram Moolenaar   redraw!
234a5fac54aSBram Moolenaar  else
2351056d988SBram Moolenaar"  call Dret("s:NFH_doc 0")
236a5fac54aSBram Moolenaar   return 0
237a5fac54aSBram Moolenaar  endif
238a5fac54aSBram Moolenaar
2391056d988SBram Moolenaar"  call Dret("s:NFH_doc 1")
240a5fac54aSBram Moolenaar  return 1
241a5fac54aSBram Moolenaarendfun
242a5fac54aSBram Moolenaar
243a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
2441056d988SBram Moolenaar" s:NFH_sxw: visualize sxw files {{{1
2451056d988SBram Moolenaarfun! s:NFH_sxw(sxw)
2461056d988SBram Moolenaar"  call Dfunc("s:NFH_sxw(sxw<".a:sxw.">)")
247a5fac54aSBram Moolenaar
248a5fac54aSBram Moolenaar  if executable("oowriter")
2495c73622aSBram Moolenaar   exe 'silent! !oowriter '.shellescape(a:sxw,1)
250a5fac54aSBram Moolenaar   redraw!
251a5fac54aSBram Moolenaar  else
2521056d988SBram Moolenaar"   call Dret("s:NFH_sxw 0")
253a5fac54aSBram Moolenaar   return 0
254a5fac54aSBram Moolenaar  endif
255a5fac54aSBram Moolenaar
2561056d988SBram Moolenaar"  call Dret("s:NFH_sxw 1")
257a5fac54aSBram Moolenaar  return 1
258a5fac54aSBram Moolenaarendfun
259a5fac54aSBram Moolenaar
260a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
2611056d988SBram Moolenaar" s:NFH_xls: visualize xls files {{{1
2621056d988SBram Moolenaarfun! s:NFH_xls(xls)
2631056d988SBram Moolenaar"  call Dfunc("s:NFH_xls(xls<".a:xls.">)")
264a5fac54aSBram Moolenaar
265a5fac54aSBram Moolenaar  if executable("oocalc")
2665c73622aSBram Moolenaar   exe 'silent! !oocalc '.shellescape(a:xls,1)
267a5fac54aSBram Moolenaar   redraw!
268a5fac54aSBram Moolenaar  else
2691056d988SBram Moolenaar"  call Dret("s:NFH_xls 0")
270a5fac54aSBram Moolenaar   return 0
271a5fac54aSBram Moolenaar  endif
272a5fac54aSBram Moolenaar
2731056d988SBram Moolenaar"  call Dret("s:NFH_xls 1")
274a5fac54aSBram Moolenaar  return 1
275a5fac54aSBram Moolenaarendfun
276a5fac54aSBram Moolenaar
277a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
2781056d988SBram Moolenaar" s:NFH_ps: handles PostScript files {{{1
2791056d988SBram Moolenaarfun! s:NFH_ps(ps)
2801056d988SBram Moolenaar"  call Dfunc("s:NFH_ps(ps<".a:ps.">)")
281a5fac54aSBram Moolenaar  if executable("gs")
2821056d988SBram Moolenaar"   call Decho("exe silent! !gs ".a:ps)
2835c73622aSBram Moolenaar   exe "silent! !gs ".shellescape(a:ps,1)
284a5fac54aSBram Moolenaar   redraw!
285a5fac54aSBram Moolenaar  elseif executable("ghostscript")
2861056d988SBram Moolenaar"   call Decho("exe silent! !ghostscript ".a:ps)
2875c73622aSBram Moolenaar   exe "silent! !ghostscript ".shellescape(a:ps,1)
288a5fac54aSBram Moolenaar   redraw!
289a5fac54aSBram Moolenaar  elseif executable("gswin32")
2905c73622aSBram Moolenaar"   call Decho("exe silent! !gswin32 ".shellescape(a:ps,1))
2915c73622aSBram Moolenaar   exe "silent! !gswin32 ".shellescape(a:ps,1)
292a5fac54aSBram Moolenaar   redraw!
293a5fac54aSBram Moolenaar  else
2941056d988SBram Moolenaar"   call Dret("s:NFH_ps 0")
295a5fac54aSBram Moolenaar   return 0
296a5fac54aSBram Moolenaar  endif
297a5fac54aSBram Moolenaar
2981056d988SBram Moolenaar"  call Dret("s:NFH_ps 1")
299a5fac54aSBram Moolenaar  return 1
300a5fac54aSBram Moolenaarendfun
301a5fac54aSBram Moolenaar
302a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
3031056d988SBram Moolenaar" s:NFH_eps: handles encapsulated PostScript files {{{1
3041056d988SBram Moolenaarfun! s:NFH_eps(eps)
3051056d988SBram Moolenaar"  call Dfunc("s:NFH_eps()")
306a5fac54aSBram Moolenaar  if executable("gs")
3075c73622aSBram Moolenaar   exe "silent! !gs ".shellescape(a:eps,1)
308a5fac54aSBram Moolenaar   redraw!
309a5fac54aSBram Moolenaar  elseif executable("ghostscript")
3105c73622aSBram Moolenaar   exe "silent! !ghostscript ".shellescape(a:eps,1)
311a5fac54aSBram Moolenaar   redraw!
312a5fac54aSBram Moolenaar  elseif executable("ghostscript")
3135c73622aSBram Moolenaar   exe "silent! !ghostscript ".shellescape(a:eps,1)
314a5fac54aSBram Moolenaar   redraw!
315a5fac54aSBram Moolenaar  elseif executable("gswin32")
3165c73622aSBram Moolenaar   exe "silent! !gswin32 ".shellescape(a:eps,1)
317a5fac54aSBram Moolenaar   redraw!
318a5fac54aSBram Moolenaar  else
3191056d988SBram Moolenaar"   call Dret("s:NFH_eps 0")
320a5fac54aSBram Moolenaar   return 0
321a5fac54aSBram Moolenaar  endif
3221056d988SBram Moolenaar"  call Dret("s:NFH_eps 0")
323a5fac54aSBram Moolenaar  return 1
324a5fac54aSBram Moolenaarendfun
325a5fac54aSBram Moolenaar
326a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
3271056d988SBram Moolenaar" s:NFH_fig: handles xfig files {{{1
3281056d988SBram Moolenaarfun! s:NFH_fig(fig)
3291056d988SBram Moolenaar"  call Dfunc("s:NFH_fig()")
3301056d988SBram Moolenaar  if executable("xfig")
3311056d988SBram Moolenaar   exe "silent! !xfig ".a:fig
3321056d988SBram Moolenaar   redraw!
3331056d988SBram Moolenaar  else
3341056d988SBram Moolenaar"   call Dret("s:NFH_fig 0")
3351056d988SBram Moolenaar   return 0
3361056d988SBram Moolenaar  endif
3371056d988SBram Moolenaar
3381056d988SBram Moolenaar"  call Dret("s:NFH_fig 1")
3391056d988SBram Moolenaar  return 1
3401056d988SBram Moolenaarendfun
3411056d988SBram Moolenaar
3421056d988SBram Moolenaar" ---------------------------------------------------------------------
3431056d988SBram Moolenaar" s:NFH_obj: handles tgif's obj files {{{1
3441056d988SBram Moolenaarfun! s:NFH_obj(obj)
3451056d988SBram Moolenaar"  call Dfunc("s:NFH_obj()")
346a5fac54aSBram Moolenaar  if has("unix") && executable("tgif")
347a5fac54aSBram Moolenaar   exe "silent! !tgif ".a:obj
348a5fac54aSBram Moolenaar   redraw!
349a5fac54aSBram Moolenaar  else
3501056d988SBram Moolenaar"   call Dret("s:NFH_obj 0")
351a5fac54aSBram Moolenaar   return 0
352a5fac54aSBram Moolenaar  endif
353a5fac54aSBram Moolenaar
3541056d988SBram Moolenaar"  call Dret("s:NFH_obj 1")
355a5fac54aSBram Moolenaar  return 1
356a5fac54aSBram Moolenaarendfun
357a5fac54aSBram Moolenaar
358a5fac54aSBram Moolenaarlet &cpo= s:keepcpo
3595b435d67SBram Moolenaarunlet s:keepcpo
360a5fac54aSBram Moolenaar" ---------------------------------------------------------------------
361a5fac54aSBram Moolenaar"  Modelines: {{{1
362c81e5e79SBram Moolenaar"  vim: fdm=marker
363