08 августа 2008

Имя файла при печати из Opera в PDF

Понадобилось часто (зачем - в одном из следующих постов) страницы в PDF печатать. Но в Opera название файла, в который печатается страница, жёстко задаётся в настройках печати, подстановкам (substitution) не поддаётся и править каждый раз руками - то ещё занятие, не наш выбор. Отметим вскользь, что в ффоксе с этим порядок, но он не подходил по многим другим причинам.
Пошёл в обход и воткнул огромный такой костыль в виде враппера. Враппер запускает оперу, чтобы запомнить её окно, ждёт запись в определённую директорию и переименовывает записанный файл по текущему заголовку окна оперы.
Код:

 1 #!/bin/sh
 2 WATCH_DIR='/home/phoenix/download/nit'
 3 opera -notrayicon &> /dev/null &
 4 pid=$!
 5 #waiting for opera window
 6 sleep 15
 7 #getting opera's window id on start
 8 windowid=$(xprop -root | grep "_NET_ACTIVE_WINDOW(WINDOW)"| cut -d ' ' -f 5)
 9 cd $WATCH_DIR
10 #check if opera's pid exists
11 while [ `ps aux | awk '{print $2}' | grep $pid | wc -l` -gt 0 ]; do
12     #waiting for writing file, only 15 sec, then recheck
13     inotifywait -t 15 -q --timefmt '%d/%m/%y %H:%M' --format '%T %f' \
14         -e close_write $WATCH_DIR | while read date time file; do
15         #expressing target filename via current webpage name and trimming noisy "- Opera" suffix
16         name=$(xwininfo -id $windowid |awk 'BEGIN {FS="\""}/xwininfo: Window id/{print $2}' | sed 's/-[^-]*$//g')
17         mv ${file} "${name}.pdf"
18     done
19 done

Недостатки метода - не работает с множественными окнами оперы, требует пакет inotify-tools.
Преимущества - недеструктивность (не требует лезть в кишочки, тем более, что сорцов нет).

Комментариев нет: