Иногда возникает необходимость быстро просмотреть начало книги. К тому же, неплохо иметь в своём арсенале ещё одну читалку, особенно когда читаешь несколько книг "одновременно" (то есть периодически переключаясь с книги на книгу) в разных читалках (например, fbreader, foliate, coolreader), и "терять" в одной из читалок возможность при запуске определённой читалки ставиться на последнее прочитанное место не хочется.
Консольную читалку, то есть запускаемую в окне терминала можно установить командой sudo apt install fbless
Сразу оговорюсь, что файла настроек и кэша, как описано здесь и здесь, на своей системе Linux Mint 20.3 найдено не было. Тем не менее, читалка была признана рабочей.
Однако использование команды fbless путь_к_книге навевало определённую тоску 😟
В результате было принято решение попробовать открыть файл с помощью fbless через правое контекстное меню файлового менеджера Thunar.
Но оформленная через "Особое действие" (пример создания) команда
xfce4-terminal -H -x sh -c 'fbless %f; exec bash'
при открытии для эксперимента книги /home/minter/01/Хроники особого отдела.fb2 завершалась неудачей.
Вывод через терминал показывал ошибку в python3, из которого было понятно, что
[Errno 2] Нет такого файла или каталога: '/home/minter/01/Хроники'
Добавление кавычек в путь "%f" приводило к пустому окну терминала с заголовком "Дочерний процесс завершился нормально с кодом 2."
После переименования файла таким образом, чтобы в нём не содержалось пробелов, например:
Хроники особого отдела.fb2 --> Хроники-особого-отдела.fb2 - команда отрабатывалась нормально и книга открывалась.
Таким образом было понятно, что "особое действие" не понимает длинных путей в именах файлов и каталогов.
Тогда было решено получить полный путь к имени файла, а затем считать его и передать при запуске fbless. В приводимом ниже примере полученный полный путь записывается с файл /tmp/fbless.txt, а затем передаётся в читалку как $(cat /tmp/fbless.txt) в кавычках.
Команда в одну строку:
realpath %f > /tmp/fbless.txt && xfce4-terminal -H -x sh -c '/usr/bin/fbless "$(cat /tmp/fbless.txt)"; exec bash'
При этом учитываюся как длинное имя (т.е. содержащее пробелы) файла, так и каталога. Для примера приводится открытие этой командой файла
/home/minter/Загрузки/pCloud/Avtors/Дмитрий Леонидович/Проект "Пассионарность"/1. Судья.fb2
Однако, по совету более опытного товарища, вместо команды
xfce4-terminal -H -x sh -c 'fbless %f; exec bash'
необходимо вводить команду
xfce4-terminal -H -x sh -c "fbless %f; exec bash"
Другими словами, вместо одинарных использовать двойные кавычки.
Но в дальнейшем захотелось бóльшего. Читалка fbless может сразу открываться в место книги, которое обозначено процентами.
В таком случае команде необходимо задать ещё и параметр -g, после которого числом указать нужное значение %, например, -g 15
Далее приводится решение "для себя". Оно не является программистским, так как его первая часть была заимствована из готового решения (источник дано забыт) ввода значений с использованием zenity.
Идея.
1. Запрос ввода значения % соответствует "Да". Указывается ожидание времени выбора. Если за это время никакая кнопка нажата не была, то считается, что была нажата кнопка "Нет".
2. Вводится значение (цифра), которая записывается в файл, например в /tmp/proc.txt Если в предыдущем п.1 была нажата кнопка "Нет" (или выбрана по умолчанию после истечения времени выбора), то в /tmp/proc.txt записывается значение 0, что условно соответствует началу книги.
3. Далее используется команда для открытия книги с подстановкой считанного из файла значения, что для рассматриваемого примера осуществляется через
$(cat /tmp/proc.txt)
Заимствованное готовое решение, оформляемое в виде исполняемого файла sh имеет листинг:
#!/bin/bash
zenity --width=180 --height=50 --question --text="Перейти на место,\nобозначенное % ?$task" --timeout 5
answer=$?
if [ "$answer" -eq 0 ]; then
zenity --width=100 --title "Ввод цифры" --text-info --editable > /tmp/proc.txt
elif [ "$answer" -eq 1 ]; then
echo '0' > /tmp/proc.txt
elif [ "$answer" -eq 5 ]; then
echo '0' > /tmp/proc.txt
fi
exit
За время ожидания выбора отвечает параметр -- timeout 5 В приведенном случае это соответствует 5 секундам. Экспериментальным способом вместо 5 можно подобрать удобное для своего использования значение.
🔰 Пояснение. Кнопке "Да" соответствует -eq1, кнопке "Нет" – -eq0, а выбор по умолчанию всегда будет -eq5.
Увы но рабочий результат выполнения команды получился только с использованием тех "костылей", которые приводились в самом начале, то есть с применением realpath %f
Сначала выполняется скрипт получения значения процентов прочитанного, а потом собственно и запуск читалки с указанием этих процентов через параметр -g
путь_к_sh && xfce4-terminal -H -x sh -c "fbless %f -g $(cat /tmp/proc.txt); exec bash"
или (по первому варианту)
путь_к_sh && realpath %f > /tmp/fbless.txt && xfce4-terminal -H -x sh -c '/usr/bin/fbless "$(cat /tmp/fbless.txt)" -g $(cat /tmp/proc.txt); exec bash'
🔰 Примечание. Следует отметить, что при вводе, например, значения 11 (11% книги), книга откроется именно в начале 11 %, но в книге отображаться будут 10%. 11 процентов начнутся тогда когда вы перейдёте на следующую строчку текста книги.
Так как целочисленное значение % может соответствовать 2-3 страницам текста книги, то это может вызывать неудобство или раздражение.
Выходом могло бы служить использование механизма закладок, которые записывается в файл fbless_save Автоматически у меня он не создавался. Его приходилось создавать вручную здесь ~/.fbless_save или здесь ~/.cache/fbless/fbless_save Сведения о его местоположении взяты из этой публикации. Но как создать в fbless закладку мне неизвестно.
Официальную документацию для fbless читайте в файле /usr/share/doc/fbless/README.ru
✔ В качестве дополнения. Используя параметр -g 100 можно перейти в самый конец книги и узнать, является ли это окончанием всего цикла, окончанием отдельного тома или вообще ознакомительным фрагментом книги. Если необходимо это делать часто, то для этого можно создать дополнительное особое действие с командой:
xfce4-terminal -H -x sh -c "fbless -g 100; exec bash"