Понадобилось часто (зачем - в одном из следующих постов) страницы в 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.
Преимущества - недеструктивность (не требует лезть в кишочки, тем более, что сорцов нет).