Improve zathura and mupdf viewers

Improve coupling between viewers and latexmk
This commit is contained in:
Karl Yngve Lervåg 2015-02-23 22:08:13 +01:00
parent ba9e45e11b
commit 8d32ea22c7
2 changed files with 125 additions and 28 deletions

View File

@ -98,6 +98,8 @@ function! latex#latexmk#callback(status) " {{{1
let s:first_callback = 0 let s:first_callback = 0
if g:latex_view_method == 'mupdf' if g:latex_view_method == 'mupdf'
call latex#view#mupdf_poststart() call latex#view#mupdf_poststart()
elseif g:latex_view_method == 'zathura'
call latex#view#zathura_poststart()
endif endif
endif endif
endfunction endfunction
@ -378,11 +380,13 @@ function! s:latexmk_build_cmd(data) " {{{1
let failed = v:progname let failed = v:progname
let failed .= ' --servername ' . v:servername let failed .= ' --servername ' . v:servername
let failed .= ' --remote-expr \"latex\#latexmk\#callback(0)\"' let failed .= ' --remote-expr \"latex\#latexmk\#callback(0)\"'
let cmd .= ' -e ''$failure_cmd .= "' . failed . '"''' let cmd .= latex#latexmk#add_option('success_cmd', success)
endif let cmd .= latex#latexmk#add_option('failure_cmd', failed)
let s:first_callback = 1 let s:first_callback = 1
endif endif
let cmd .= latex#view#append_latexmk_argument()
let cmd .= ' ' . latex#util#fnameescape(a:data.base) let cmd .= ' ' . latex#util#fnameescape(a:data.base)
if g:latex_latexmk_continuous || g:latex_latexmk_background if g:latex_latexmk_continuous || g:latex_latexmk_background

View File

@ -58,6 +58,17 @@ function! latex#view#init(initialized) " {{{1
endif endif
endfunction endfunction
"}}}1
function! latex#view#append_latexmk_argument() " {{{1
if g:latex_view_method == 'mupdf'
return s:mupdf_append_latexmk_argument()
elseif g:latex_view_method == 'zathura'
return s:zathura_append_latexmk_argument()
else
return ''
endif
endfunction
"}}}1 "}}}1
function! latex#view#general() " {{{1 function! latex#view#general() " {{{1
let exe = {} let exe = {}
@ -204,35 +215,40 @@ endfunction
" }}}1 " }}}1
function! latex#view#zathura() "{{{1 function! latex#view#zathura() "{{{1
let outfile = g:latex#data[b:latex.id].out() if !s:zathura_exists_win()
if !filereadable(outfile) call s:zathura_start()
echomsg "Can't view: Output file is not readable!" else
return call s:zathura_forward_search()
endif endif
" Start zathura if not already started
if !g:latex#data[b:latex.id].zathura_started
let exe = {}
let exe.cmd = 'zathura ' . g:latex_view_zathura_options
let exe.cmd .= ' -x "' . exepath(v:progname)
\ . ' --servername ' . v:servername
\ . ' --remote +\%{line} \%{input}"'
let exe.cmd .= ' ' . latex#util#fnameescape(outfile)
call latex#util#execute(exe)
let g:latex#data[b:latex.id].cmds.view = exe.cmd
let g:latex#data[b:latex.id].zathura_started = 1
endif
" Do forward search
let exe = {}
let exe.cmd = 'zathura --synctex-forward '
let exe.cmd .= line(".") . ':' . col('.') . ':% '
let exe.cmd .= latex#util#fnameescape(outfile)
call latex#util#execute(exe)
let g:latex#data[b:latex.id].zathura.fsearch = exe.cmd
endfunction endfunction
" }}}1 " }}}1
function! latex#view#zathura_poststart() "{{{1
" First get the window id
if g:latex#data[b:latex.id].zathura_id == 0
let zathura_ids = []
if executable('xdotool')
let cmd = 'xdotool search --class Zathura'
let zathura_ids = systemlist(cmd)
endif
if len(zathura_ids) == 0
echomsg "Couldn't find Zathura window ID!"
let g:latex#data[b:latex.id].zathura_id = 0
else
let g:latex#data[b:latex.id].zathura_id = zathura_ids[-1]
endif
endif
" Next return focus to vim
if executable('xdotool')
silent execute '!xdotool windowfocus ' . v:windowid
endif
" Finally do a forward search
call s:zathura_forward_search()
endfunction
"}}}1
function! s:init_general() "{{{1 function! s:init_general() "{{{1
if !executable(g:latex_view_general_viewer) if !executable(g:latex_view_general_viewer)
@ -277,7 +293,10 @@ function! s:init_zathura() "{{{1
echoerr "Zathura is not available!" echoerr "Zathura is not available!"
endif endif
let g:latex#data[b:latex.id].zathura_started = 0 " Initialize zathura_id
if !has_key(g:latex#data[b:latex.id], 'zathura_id')
let g:latex#data[b:latex.id].zathura_id = 0
endif
endfunction endfunction
" }}}1 " }}}1
@ -336,6 +355,80 @@ function! s:mupdf_start() "{{{1
call latex#view#mupdf_poststart() call latex#view#mupdf_poststart()
endfunction endfunction
"}}}1
function! s:mupdf_append_latexmk_argument() " {{{1
let cmd = latex#latexmk#add_option('new_viewer_always', '0')
let cmd .= latex#latexmk#add_option('pdf_update_method', '2')
let cmd .= latex#latexmk#add_option('pdf_update_signal', 'SIGHUP')
let cmd .= latex#latexmk#add_option('pdf_previewer',
\ 'start mupdf ' . g:latex_view_mupdf_options)
return cmd
endfunction
"}}}1
function! s:zathura_exists_win() "{{{1
if executable('xdotool')
let cmd = 'xdotool search --class Zathura'
let zathura_ids = systemlist(cmd)
for id in zathura_ids
if id == g:latex#data[b:latex.id].zathura_id | return 1 | endif
endfor
endif
return 0
endfunction
"}}}1
function! s:zathura_forward_search() "{{{1
let outfile = g:latex#data[b:latex.id].out()
if !filereadable(outfile)
echomsg "Can't view: Output file is not readable!"
return
endif
let exe = {}
let exe.cmd = 'zathura --synctex-forward '
let exe.cmd .= line(".") . ':' . col('.') . ':% '
let exe.cmd .= latex#util#fnameescape(outfile)
call latex#util#execute(exe)
let g:latex#data[b:latex.id].zathura_fsearch = exe.cmd
endfunction
" }}}1
function! s:zathura_start() "{{{1
let outfile = g:latex#data[b:latex.id].out()
if !filereadable(outfile)
echomsg "Can't view: Output file is not readable!"
return
endif
let exe = {}
let exe.cmd = 'zathura ' . g:latex_view_zathura_options
let exe.cmd .= ' -x "' . exepath(v:progname)
\ . ' --servername ' . v:servername
\ . ' --remote +\%{line} \%{input}"'
let exe.cmd .= ' ' . latex#util#fnameescape(outfile)
call latex#util#execute(exe)
let g:latex#data[b:latex.id].cmds.view = exe.cmd
call latex#view#zathura_poststart()
endfunction
" }}}1
function! s:zathura_append_latexmk_argument() " {{{1
let cmd = latex#latexmk#add_option('new_viewer_always', '0')
let cmd .= latex#latexmk#add_option('pdf_previewer',
\ 'start zathura ' . g:latex_view_zathura_options
\ . ' -x \"' . exepath(v:progname)
\ . ' --servername ' . v:servername
\ . ' --remote +\%{line} \%{input}\" \%S')
return cmd
endfunction
"}}}1
"}}}1 "}}}1
" vim: fdm=marker sw=2 " vim: fdm=marker sw=2