# emacs FB2-mode
Andrew Lobanov(tavern,1) — All
2017-09-07 05:27:37
Захотелось мне тут на днях почитать Эрика Реймонда "Искусство программирования для Unix", а она у меня в fb2. Собирать FBReader не хотелось, а опакетить fbless было лень. Так что я быстренько переделал свой старый проект fb2-читалки для emacs. Раньше он был глючный и падучий, а сейчас жуёт даже книги, которые не соответствуют стандарту.
Взять можно тут:
https://github.com/spline1986/fb2-mode/
Скриншотв репозитории пока старый, так что вот поновее:
http://spline-online.tk/stuff/docs/pics/fb2-mode2.png
Киллер-фича: он подкладывает белый фон под картинки, чтобы картинки с прозрачным фоном хорошо смотрелись в тёмных темах. Для отображения картинок необходим emacs, собранный с поддержкой imagemagick (в slackware он точно так собирается, но как дела обстоят в других дистрибутивах я не знаю).
Пока что мода не имеет настроек, но зато имеет пару некритичных недочётов и кривостей, но я хочу исправить такое положение вещей =)
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — All
2017-09-07 06:02:51
AL> Захотелось мне тут на днях почитать Эрика Реймонда "Искусство программирования для Unix", а она у меня в fb2. Собирать FBReader не хотелось, а опакетить fbless было лень. Так что я быстренько переделал свой старый проект fb2-читалки для emacs. Раньше он был глючный и падучий, а сейчас жуёт даже книги, которые не соответствуют стандарту.
AL> Взять можно тут: https://github.com/spline1986/fb2-mode/
Обновил скриншот в репозитории, добавил небольшие возможности настройки модуля.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — Difrex
2017-09-07 13:28:29
Difrex> Круто! Спасибо.
Да не за что. Если вдруг возникнут проблемы или будут найдены ошибки, просьба писать сюда. Секту я проверяю чаще гитхаба и почты =)
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 07:05:05
У меня он так и не заработал, на любую книжку (если запускать из консоли командой emacs kniga.fb2) пишет "File mode specification error: (void-function third)". Если в емаксе выполнить M-x fb2-mode пишет "setq: Symbol's function definition is void: third".
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 07:31:03
btimofeev> У меня он так и не заработал, на любую книжку (если запускать из консоли командой emacs kniga.fb2) пишет "File mode specification error: (void-function third)". Если в емаксе выполнить M-x fb2-mode пишет "setq: Symbol's function definition is void: third".
В исходнике у тебя нашел строку: (setq major-mode 'wpdl-mode). Это зависимость? У меня такого модуля не было. Скачал его на емаксвики, подключил так же как и твой модуль (до fb2-mode), но пишет все те же ошибки.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-08 09:38:12
btimofeev> У меня он так и не заработал, на любую книжку (если запускать из консоли командой emacs kniga.fb2) пишет "File mode specification error: (void-function third)". Если в емаксе выполнить M-x fb2-mode пишет "setq: Symbol's function definition is void: third".
Можешь выдать книгу, на которой возникает проблема? Буду разбираться. Сейчас не готов ничего сказать пока.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-08 11:19:27
AL>> Можешь выдать книгу, на которой возникает проблема? Буду разбираться. Сейчас не готов ничего сказать пока.
btimofeev> К примеру вот этот маленький рассказ https://www.dropbox.com/s/rojs8wnzjrsntgi/Lavkraft_Gipnoz.31745.fb2?dl=0
Крайне странно. У меня открывается без проблем. Ты точно обновил моду? Какая система? Какая версия emacs?
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 11:28:32
AL> Крайне странно. У меня открывается без проблем. Ты точно обновил моду? Какая система? Какая версия emacs?
Обновил, попробовал сейчас ещё раз перекачать, все равно ошибка. У меня Archlinux, Emacs 25.2.1
Так fb2-mode зависит от wpdl-mode? Если да, то откуда ты его брал? Мне кажется, что это в моей инсталляции емакса что-то не так.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-08 12:15:39
AL>> Крайне странно. У меня открывается без проблем. Ты точно обновил моду? Какая система? Какая версия emacs?
btimofeev> Обновил, попробовал сейчас ещё раз перекачать, все равно ошибка. У меня Archlinux, Emacs 25.2.1
Крайне странно. Всё должно работать. Надо в виртуалке чтоль проверить.
btimofeev> Так fb2-mode зависит от wpdl-mode? Если да, то откуда ты его брал? Мне кажется, что это в моей инсталляции емакса что-то не так.
Не зависит. Откуда там эта строчка я уже и не вспомню. Её можно вообще удалить, так как она ни на что не влияет. Сегодня пушну подчищенный fb2-mode.el.
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 12:20:02
btimofeev> У меня он так и не заработал, на любую книжку (если запускать из консоли командой emacs kniga.fb2) пишет "File mode specification error: (void-function third)". Если в емаксе выполнить M-x fb2-mode пишет "setq: Symbol's function definition is void: third".
У меня заработало после добавления в начало файла fb2.el строки (require 'cl). Это для экспорта таких функций как first, third, return. В емаксе 24.3 и выше что бы их не экспортировать нужно вызывать их как cl-first, cl-return.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-08 15:01:22
btimofeev> У меня заработало после добавления в начало файла fb2.el строки (require 'cl). Это для экспорта таких функций как first, third, return. В емаксе 24.3 и выше что бы их не экспортировать нужно вызывать их как cl-first, cl-return.
Спасибо за помощь. Видимо, у меня какой-то из используемых пакетов уже тянул cl. Исправлю обязательно.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-08 15:01:22
AL>> Для отображения картинок необходим emacs, собранный с поддержкой imagemagick (в slackware он точно так собирается, но как дела обстоят в других дистрибутивах я не знаю).
btimofeev> Теперь у меня книги с картинками не открываются. Пишет "File mode specification error: (error Not an image: nil)". Хотя команда (описанная тут https://www.gnu.org/software/emacs/manual/html_node/elisp/ImageMagick-Images.html) для проверки наличия поддержки imagemagic выдает t, я так понимаю поддержка есть. Пример книги здесь, если надо https://www.dropbox.com/s/fdhgt6qcs34h30q/Oruell_Skotnyiy_dvor.76204.fb2?dl=0
Спасибо. Пока сделал простую проверку на успешное считывание картинки. В данном файле не распознаётся base64 в атачнутой картинке. Все изменения уже на гитхабе.
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 15:26:41
AL> Все изменения уже на гитхабе.
Ещё в 38 строке замени пожалуйста return на cl-return.
Теперь в качестве ошибки вываливается такая строка
----
File mode specification error: (no-catch --cl-block-nil-- (description nil (title-info nil (genre nil prose_classic) (author nil (first-name nil Джордж) (last-name nil Оруэлл)) (book-title nil Скотный двор) (date nil) (coverpage nil (image ((href . #cover.png)))) (lang nil ru) (src-lang nil en) (translator nil (first-name nil Илан) (last-name nil Полоцк))) (document-info nil (author nil (first-name nil) (last-name nil)) (program-used nil FB Tools) (date ((value . 2005-02-07)) 2005-02-07) (src-url nil
http://iaiwww.uni-muenster.de/cgi-bin/simplex/koi8/orwell/ ) (id nil CF2E496D-BAC4-4BFF-81BF-CB03B7EF95BA) (version nil 1.0))))
----
Помогает возвращение require 'cl, видимо ещё что то нужно заменить, попозже попробую разобраться.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-08 16:05:02
btimofeev> Ещё в 38 строке замени пожалуйста return на cl-return.
Исправил. Спасибо.
btimofeev> Теперь в качестве ошибки вываливается такая строка
btimofeev> ----
btimofeev> File mode specification error: (no-catch --cl-block-nil-- (description nil (title-info nil (genre nil prose_classic) (author nil (first-name nil Джордж) (last-name nil Оруэлл)) (book-title nil Скотный двор) (date nil) (coverpage nil (image ((href . #cover.png)))) (lang nil ru) (src-lang nil en) (translator nil (first-name nil Илан) (last-name nil Полоцк))) (document-info nil (author nil (first-name nil) (last-name nil)) (program-used nil FB Tools) (date ((value . 2005-02-07)) 2005-02-07) (src-url nil http://iaiwww.uni-muenster.de/cgi-bin/simplex/koi8/orwell/ ) (id nil CF2E496D-BAC4-4BFF-81BF-CB03B7EF95BA) (version nil 1.0))))
btimofeev> ----
btimofeev> Помогает возвращение require 'cl, видимо ещё что то нужно заменить, попозже попробую разобраться.
Надо будет попробовать на чистом профиле, но не сегодня уже.
# Re: emacs FB2-mode
btimofeev(tavern,13) — btimofeev
2017-09-08 18:10:44
btimofeev> Помогает возвращение require 'cl, видимо ещё что то нужно заменить, попозже попробую разобраться.
Разобрался. Простой замены return на cl-return недостаточно, нужно ещё всё в cl-block заключить, вот так:
(defun somename()
(cl-block имя блока
...
тело блока
...
(cl-return-from имя блока возвращаемое значение)))
После подобной замены у меня всё без require 'cl заработало, даже нашел одну книжку в которой обложка отображается. Кстати, что не так с изображением в книге которую я тебе отослал?
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-11 14:59:22
Сегодня пробовал запускать сабж в Windows: для корректной работы нужно из архива
https://kent.dl.sourceforge.net/project/ezwinports/libxml2-2.7.8-w32-bin.zip распаковать файлы libxml2.dll, libiconv-2.dll и zlib1.dll в папку Emacs/bin/.
Ещё оказывается в емаксе есть закладки для файлов - для чтения книг очень важная штука. Что бы установить закладку на файл (и текущую строку) жмём C-x r m, что бы открыть список закладок C-x r l.
Ещё бы добавить настройки шрифтов и список глав/быстрый переход вперёд назад по главам и будет шикарно.
А ещё на днях также вышел nov.el - режим для чтения Epub:
https://github.com/wasamasa/nov.el
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-11 15:40:39
btimofeev> Сегодня пробовал запускать сабж в Windows: для корректной работы нужно из архива https://kent.dl.sourceforge.net/project/ezwinports/libxml2-2.7.8-w32-bin.zip распаковать файлы libxml2.dll, libiconv-2.dll и zlib1.dll в папку Emacs/bin/.
Да. В windows приходится устанавливать недостающие библиотеки вручную, но ничего не поделать - такова уж система.
btimofeev> Ещё оказывается в емаксе есть закладки для файлов - для чтения книг очень важная штука. Что бы установить закладку на файл (и текущую строку) жмём C-x r m, что бы открыть список закладок C-x r l.
Да. Я активно ими пользуюсь при чтении разнообразных pdf-ок.
btimofeev> Ещё бы добавить настройки шрифтов и список глав/быстрый переход вперёд назад по главам и будет шикарно.
Вот это хочу в перспективе, но сперва полностью избавлюсь от cl. Так уж вышло, что пока не особо до программирования.
btimofeev> А ещё на днях также вышел nov.el - режим для чтения Epub: https://github.com/wasamasa/nov.el
Вот спасибо. Хотя у меня всё или в pdf или в fb2, но возьму на заметку.
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-11 17:23:20
AL> при чтении разнообразных pdf-ок.
У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
# Re: emacs FB2-mode
btimofeev(tavern,13) — all
2017-09-11 19:12:04
btimofeev> У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
Проблема оказалась в тормознутости плагина отображающего номера строк, отключил его для этого режима и теперь не тормозит.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-11 19:19:46
AL>> при чтении разнообразных pdf-ок.
btimofeev> У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
Такое было у меня на нетбуке. Как вариант, попробовать поиграться переменной doc-view-resolution. На новом ноуте всё вполне сносно переключается.
К сожалению, чтение через doc-view в emacs это достаточно грязный хак в виде конвертации страниц в отдельные изображения и последующее их изображение уже пререндеренными. И я не особо разбирался можно ли как-то кешировать подгруженные изображения на одну страницу вперёд, но погуглить в этом направлении стоит.
# Re: emacs FB2-mode
Andrew Lobanov(tavern,1) — btimofeev
2017-09-11 19:20:39
btimofeev>> У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
btimofeev> Проблема оказалась в тормознутости плагина отображающего номера строк, отключил его для этого режима и теперь не тормозит.
А. Ну я linum-mode включаю просто по хоткею, так как далеко не только пишу текст в emacs =)
# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-12-09 08:19:20
Андрей, а у тебя в книгах пробелы в диалогах выделяются подобным образом? Скриншот:
https://ibb.co/kTqZfG
У меня такое во всех книгах и во всех темах емакса, которые я пробовал. Или это у меня с настройками емакса что-то не так?
# Re: emacs FB2-mode
Andrew Lobanov(Go!,1) — btimofeev
2017-12-09 10:11:54
btimofeev> Андрей, а у тебя в книгах пробелы в диалогах выделяются подобным образом? Скриншот: https://ibb.co/kTqZfG
btimofeev> У меня такое во всех книгах и во всех темах емакса, которые я пробовал. Или это у меня с настройками емакса что-то не так?
Это имакс так отображает неразрывный пробел. По-моему, я так и не нашёл как для одной моды сменить это. Менять же глобально в своём ридере мне показалось плохим тоном. Так что да. Проблема.