@@ -405,20 +405,7 @@ endif"}}}
405405function ! ghcmod#build_command (args )" {{{
406406 let l: cmd = [' ghc-mod' ]
407407
408- " search Cabal file
409- if ! exists (' b:ghcmod_basedir' )
410- let b: ghcmod_basedir = expand (' %:p:h' )
411- let l: dir = b: ghcmod_basedir
412- for _ in range (6 )
413- if ! empty (glob (l: dir . ' /*.cabal' , 0 ))
414- let b: ghcmod_basedir = l: dir
415- break
416- endif
417- let l: dir = fnamemodify (l: dir , ' :h' )
418- endfor
419- endif
420-
421- let l: build_dir = b: ghcmod_basedir . ' /dist/build'
408+ let l: build_dir = s: find_basedir () . ' /dist/build'
422409 if isdirectory (l: build_dir )
423410 " detect autogen directory
424411 let l: autogen_dir = l: build_dir . ' /autogen'
@@ -455,23 +442,45 @@ function! ghcmod#build_command(args)"{{{
455442endfunction " }}}
456443
457444function ! s: system (... )" {{{
458- lcd `= expand ( ' %:p:h ' )`
445+ lcd `= ghcmod#basedir ( )`
459446 let l: ret = call (' vimproc#system' , a: 000 )
460447 lcd -
461448 return l: ret
462449endfunction " }}}
463450
464451function ! s: plineopen2 (... )" {{{
465- if empty (get (g: , ' ghcmod_use_basedir' , ' ' ))
466- lcd `= expand (' %:p:h' )`
467- else
468- lcd `= g: ghcmod_use_basedir `
469- endif
452+ lcd `= ghcmod#basedir ()`
470453 let l: ret = call (' vimproc#plineopen2' , a: 000 )
471454 lcd -
472455 return l: ret
473456endfunction " }}}
474457
458+ function ! ghcmod#basedir ()" {{{
459+ let l: use_basedir = get (g: , ' ghcmod_use_basedir' , ' ' )
460+ if ! empty (l: use_basedir ) && l: use_basedir == ? ' yes'
461+ return s: find_basedir ()
462+ else
463+ return expand (' %:p:h' )
464+ endif
465+ endfunction " }}}
466+
467+ function ! s: find_basedir ()" {{{
468+ " search Cabal file
469+ if ! exists (' b:ghcmod_basedir' )
470+ let l: ghcmod_basedir = expand (' %:p:h' )
471+ let l: dir = l: ghcmod_basedir
472+ for _ in range (6 )
473+ if ! empty (glob (l: dir . ' /*.cabal' , 0 ))
474+ let l: ghcmod_basedir = l: dir
475+ break
476+ endif
477+ let l: dir = fnamemodify (l: dir , ' :h' )
478+ endfor
479+ let b: ghcmod_basedir = l: ghcmod_basedir
480+ endif
481+ return b: ghcmod_basedir
482+ endfunction " }}}
483+
475484function ! ghcmod#print_error (msg)" {{{
476485 echohl ErrorMsg
477486 echomsg a: msg
0 commit comments