Skip to: Site menu | Main content

Autor

Chłopak z Bałut (Dołów), po uniwerku i stypendium. Wiecznie zestresowane, przemądrzałe bezguście. Więcej na stronie domowej.

W ramach odprężenia #3

Stare

Wczoraj opisałem jak zrobić, żeby dokument się automatycznie "LaTeXował" po zachowaniu pliku źródłowego. Dzisiaj kolejne usprawnienie. Zmusimy przeglądarkę Evince do automatycznego przeładowania nowego dokumentu. Oryginalnie program ten w ogóle nie ma takiej możliwości więc trzeba albo pobrać zmodyfikowane przeze mnie źródła, albo patcha na wersję 0.3.2:

W sumie zmodyfikowałem około 10 wierszy całego programu. Niestety zastosowałem niezbyt elegancką sztuczkę, której autorzy programu nigdy by się nie zgodzili wprowadzić do oficjalnych źródeł (stąd patch). Jak zmusić program do przeładowania otwartego dokumentu? Wystarczy uruchomić go tym skryptem (ja go nazwałem evince-wrapper.sh):

    #!/bin/sh
    evince $1 &
    (ps -eo pid,comm | grep 'evince$' | head -n1 | \
     sed -e 's/ *\([0-9]*\).*$/\1/') > /tmp/evince.pid

A wymuszenie odświeżenia robi się skryptem evince-reload.sh

    #!/bin/sh
    pid=`cat /tmp/evince.pid`
    kill -10 $pid

04 lipca 2005, 15:18:01

Komentarze

zdzichuBG, 14 lipca 2005, 23:48:08

A nie lepiej robić to po D-BUS? Jeśli nie ma sygnału przeładowania, można go dodać, taką zmianę raczej wprowadzą do kodu.

rzyjontko, 14 lipca 2005, 23:53:07

Nie wiem, czy zauważyłeś, że funkcji odświeżającej okno odebrałem "static", żeby można się do niej było dobrać w main.c. Poza tym xpdf miał to elegancko rozwiązane przez wywołanie z parametrem "-remote", a evince to w pewnym sensie kontynuacja xpdfa, więc oni wszyscy wiedzą, że to należy zrobić równie elegancko. (A ta zmienna reload_window... paskudztwo).

Z drugiej strony to własnie potęga open-source - brakowało mi czegoś, to sobie dorobiłem.

Treść komentarza można formatować zgodnie ze składnią Textile.
Odpowiedzi śledzić można przy pomocy RSS RSS .