First try at #443: Persistent zathura
This commit is contained in:
parent
aa735ee610
commit
9b12cbd91e
@ -8,6 +8,7 @@ let s:viewers = [
|
|||||||
\ 'general',
|
\ 'general',
|
||||||
\ 'mupdf',
|
\ 'mupdf',
|
||||||
\ 'zathura',
|
\ 'zathura',
|
||||||
|
\ 'zathura_alternative',
|
||||||
\ ]
|
\ ]
|
||||||
for viewer in s:viewers
|
for viewer in s:viewers
|
||||||
execute 'let s:' . viewer . ' = {}'
|
execute 'let s:' . viewer . ' = {}'
|
||||||
@ -148,6 +149,7 @@ endfunction
|
|||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
|
|
||||||
|
" }}}1
|
||||||
" {{{1 MuPDF
|
" {{{1 MuPDF
|
||||||
function! s:mupdf.init() dict " {{{2
|
function! s:mupdf.init() dict " {{{2
|
||||||
" Only initialize once
|
" Only initialize once
|
||||||
@ -303,6 +305,7 @@ endfunction
|
|||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
|
|
||||||
|
" }}}1
|
||||||
" {{{1 Zathura
|
" {{{1 Zathura
|
||||||
function! s:zathura.init() dict " {{{2
|
function! s:zathura.init() dict " {{{2
|
||||||
" Only initialize once
|
" Only initialize once
|
||||||
@ -400,6 +403,108 @@ function! s:zathura.latexmk_append_argument() dict " {{{2
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" }}}2
|
" }}}2
|
||||||
|
|
||||||
|
" }}}1
|
||||||
|
" {{{1 Zathura alternative
|
||||||
|
function! s:zathura_alternative.init() dict " {{{2
|
||||||
|
" Only initialize once
|
||||||
|
if has_key(self, 'xwin_id') | return | endif
|
||||||
|
|
||||||
|
"
|
||||||
|
" Default Zathura settings
|
||||||
|
"
|
||||||
|
call vimtex#util#set_default('g:vimtex_view_zathura_options', '')
|
||||||
|
|
||||||
|
if !executable('zathura')
|
||||||
|
call vimtex#echo#warning('Zathura is not executable!')
|
||||||
|
call vimtex#echo#echo('- vimtex viewer will not work!')
|
||||||
|
call vimtex#echo#wait()
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !executable('xdotool')
|
||||||
|
call vimtex#echo#warning('viewer Zathura requires xdotool!')
|
||||||
|
endif
|
||||||
|
|
||||||
|
let self.class = 'Zathura'
|
||||||
|
let self.out = tempname() . '.vimtex.pdf'
|
||||||
|
let self.xwin_id = 0
|
||||||
|
let self.xwin_get_id = function('s:xwin_get_id')
|
||||||
|
let self.xwin_exists = function('s:xwin_exists')
|
||||||
|
call self.xwin_exists()
|
||||||
|
|
||||||
|
call add(g:vimtex_latexmk_callback_hooks, 'b:vimtex.viewer.latexmk_callback')
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
function! s:zathura_alternative.view(file) dict " {{{2
|
||||||
|
let outfile = a:file !=# '' ? a:file : self.out
|
||||||
|
if s:output_not_readable(outfile) | return | endif
|
||||||
|
|
||||||
|
if self.xwin_exists()
|
||||||
|
call self.forward_search(outfile)
|
||||||
|
else
|
||||||
|
call self.start(outfile)
|
||||||
|
endif
|
||||||
|
|
||||||
|
if has_key(self, 'hook_view')
|
||||||
|
call self.hook_view()
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
function! s:zathura_alternative.start(outfile) dict " {{{2
|
||||||
|
let exe = {}
|
||||||
|
let exe.cmd = 'zathura'
|
||||||
|
let exe.cmd .= ' -x "' . g:vimtex_latexmk_progname
|
||||||
|
\ . ' --servername ' . v:servername
|
||||||
|
\ . ' --remote +\%{line} \%{input}"'
|
||||||
|
let exe.cmd .= ' ' . g:vimtex_view_zathura_options
|
||||||
|
let exe.cmd .= ' ' . vimtex#util#shellescape(a:outfile)
|
||||||
|
call vimtex#util#execute(exe)
|
||||||
|
let self.cmd_start = exe.cmd
|
||||||
|
|
||||||
|
call self.xwin_get_id()
|
||||||
|
call self.forward_search(a:outfile)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
function! s:zathura_alternative.forward_search(outfile) dict " {{{2
|
||||||
|
let exe = {}
|
||||||
|
let exe.cmd = 'zathura --synctex-forward '
|
||||||
|
let exe.cmd .= line('.')
|
||||||
|
let exe.cmd .= ':' . col('.')
|
||||||
|
let exe.cmd .= ':' . vimtex#util#shellescape(expand('%:p'))
|
||||||
|
let exe.cmd .= ' ' . vimtex#util#shellescape(a:outfile)
|
||||||
|
call vimtex#util#execute(exe)
|
||||||
|
let self.cmd_forward_search = exe.cmd
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
function! s:zathura_alternative.latexmk_callback(status) dict " {{{2
|
||||||
|
if a:status
|
||||||
|
if filereadable(b:vimtex.out())
|
||||||
|
call writefile(readfile(b:vimtex.out(), 'b'), self.out, 'b')
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
sleep 500m
|
||||||
|
if self.xwin_exists()
|
||||||
|
call self.forward_search(self.out)
|
||||||
|
if has_key(self, 'hook_callback')
|
||||||
|
call self.hook_callback()
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
call self.start(self.out)
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
function! s:zathura_alternative.latexmk_append_argument() dict " {{{2
|
||||||
|
return ' -view=none'
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" }}}2
|
||||||
|
|
||||||
" }}}1
|
" }}}1
|
||||||
|
|
||||||
"
|
"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user