# 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
Difrex(mira, 14) — Andrew Lobanov
2017-09-07 09:23:05


Круто! Спасибо.

# 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
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 10:58:58


AL> Можешь выдать книгу, на которой возникает проблема? Буду разбираться. Сейчас не готов ничего сказать пока.

К примеру вот этот маленький рассказ https://www.dropbox.com/s/rojs8wnzjrsntgi/Lavkraft_Gipnoz.31745.fb2?dl=0

# 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
btimofeev(tavern,13) — btimofeev
2017-09-08 12:29:30


btimofeev> У меня заработало после добавления в начало файла fb2.el строки (require 'cl). Это для экспорта таких функций как first, third, return. В емаксе 24.3 и выше что бы их не экспортировать нужно вызывать их как cl-first, cl-return.

Инфу я нашел тут https://stackoverflow.com/a/30848971 и тут https://www.masteringemacs.org/article/whats-new-emacs-24-3 в разделе Common Lisp emulation (CL). Написано что теперь модуль cl с функциями без приставок deprecated.

# Re: emacs FB2-mode
btimofeev(tavern,13) — Andrew Lobanov
2017-09-08 14:25:07


AL> Для отображения картинок необходим emacs, собранный с поддержкой imagemagick (в slackware он точно так собирается, но как дела обстоят в других дистрибутивах я не знаю).

Теперь у меня книги с картинками не открываются. Пишет "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

# 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> У меня такое во всех книгах и во всех темах емакса, которые я пробовал. Или это у меня с настройками емакса что-то не так?

Это имакс так отображает неразрывный пробел. По-моему, я так и не нашёл как для одной моды сменить это. Менять же глобально в своём ридере мне показалось плохим тоном. Так что да. Проблема.