[Jacek Śliwerski]
(rzyjontko)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
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:08A 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.
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.