Сообщения в emacs FB2-mode

emacs FB2-mode

Захотелось мне тут на днях почитать Эрика Реймонда "Искусство программирования для 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 он точно так собирается, но как дела обстоят в других дистрибутивах я не знаю).

Пока что мода не имеет настроек, но зато имеет пару некритичных недочётов и кривостей, но я хочу исправить такое положение вещей =)
Andrew Lobanov to All (2017-09-07 04:27:37) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL> Захотелось мне тут на днях почитать Эрика Реймонда "Искусство программирования для Unix", а она у меня в fb2. Собирать FBReader не хотелось, а опакетить fbless было лень. Так что я быстренько переделал свой старый проект fb2-читалки для emacs. Раньше он был глючный и падучий, а сейчас жуёт даже книги, которые не соответствуют стандарту.
AL> Взять можно тут: https://github.com/spline1986/fb2-mode/
Обновил скриншот в репозитории, добавил небольшие возможности настройки модуля.
Andrew Lobanov to All (2017-09-07 05:02:51) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
Круто! Спасибо.
Difrex to Andrew Lobanov (2017-09-07 08:23:05) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
Difrex> Круто! Спасибо.
Да не за что. Если вдруг возникнут проблемы или будут найдены ошибки, просьба писать сюда. Секту я проверяю чаще гитхаба и почты =)
Andrew Lobanov to Difrex (2017-09-07 12:28:29) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
У меня он так и не заработал, на любую книжку (если запускать из консоли командой emacs kniga.fb2) пишет "File mode specification error: (void-function third)". Если в емаксе выполнить M-x fb2-mode пишет "setq: Symbol's function definition is void: third".
btimofeev to Andrew Lobanov (2017-09-08 06:05:05) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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), но пишет все те же ошибки.
btimofeev to Andrew Lobanov (2017-09-08 06:31:03) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
btimofeev> У меня он так и не заработал, на любую книжку (если запускать из консоли командой emacs kniga.fb2) пишет "File mode specification error: (void-function third)". Если в емаксе выполнить M-x fb2-mode пишет "setq: Symbol's function definition is void: third".
Можешь выдать книгу, на которой возникает проблема? Буду разбираться. Сейчас не готов ничего сказать пока.
Andrew Lobanov to btimofeev (2017-09-08 08:38:12) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL> Можешь выдать книгу, на которой возникает проблема? Буду разбираться. Сейчас не готов ничего сказать пока.
К примеру вот этот маленький рассказ https://www.dropbox.com/s/rojs8wnzjrsntgi/Lavkraft_Gipnoz.31745.fb2?dl=0
btimofeev to Andrew Lobanov (2017-09-08 09:58:58) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL>> Можешь выдать книгу, на которой возникает проблема? Буду разбираться. Сейчас не готов ничего сказать пока.
btimofeev> К примеру вот этот маленький рассказ https://www.dropbox.com/s/rojs8wnzjrsntgi/Lavkraft_Gipnoz.31745.fb2?dl=0
Крайне странно. У меня открывается без проблем. Ты точно обновил моду? Какая система? Какая версия emacs?
Andrew Lobanov to btimofeev (2017-09-08 10:19:27) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL> Крайне странно. У меня открывается без проблем. Ты точно обновил моду? Какая система? Какая версия emacs?
Обновил, попробовал сейчас ещё раз перекачать, все равно ошибка. У меня Archlinux, Emacs 25.2.1

Так fb2-mode зависит от wpdl-mode? Если да, то откуда ты его брал? Мне кажется, что это в моей инсталляции емакса что-то не так.
btimofeev to Andrew Lobanov (2017-09-08 10:28:32) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL>> Крайне странно. У меня открывается без проблем. Ты точно обновил моду? Какая система? Какая версия emacs?
btimofeev> Обновил, попробовал сейчас ещё раз перекачать, все равно ошибка. У меня Archlinux, Emacs 25.2.1
Крайне странно. Всё должно работать. Надо в виртуалке чтоль проверить.
btimofeev> Так fb2-mode зависит от wpdl-mode? Если да, то откуда ты его брал? Мне кажется, что это в моей инсталляции емакса что-то не так.
Не зависит. Откуда там эта строчка я уже и не вспомню. Её можно вообще удалить, так как она ни на что не влияет. Сегодня пушну подчищенный fb2-mode.el.
Andrew Lobanov to btimofeev (2017-09-08 11:15:39) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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.
btimofeev to Andrew Lobanov (2017-09-08 11:20:02) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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.
btimofeev to btimofeev (2017-09-08 11:29:30) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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
btimofeev to Andrew Lobanov (2017-09-08 13:25:07) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
btimofeev> У меня заработало после добавления в начало файла fb2.el строки (require 'cl). Это для экспорта таких функций как first, third, return. В емаксе 24.3 и выше что бы их не экспортировать нужно вызывать их как cl-first, cl-return.
Спасибо за помощь. Видимо, у меня какой-то из используемых пакетов уже тянул cl. Исправлю обязательно.
Andrew Lobanov to btimofeev (2017-09-08 14:01:22) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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 в атачнутой картинке. Все изменения уже на гитхабе.
Andrew Lobanov to btimofeev (2017-09-08 14:01:22) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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, видимо ещё что то нужно заменить, попозже попробую разобраться.
btimofeev to Andrew Lobanov (2017-09-08 14:26:41) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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, видимо ещё что то нужно заменить, попозже попробую разобраться.
Надо будет попробовать на чистом профиле, но не сегодня уже.
Andrew Lobanov to btimofeev (2017-09-08 15:05:02) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
btimofeev> Помогает возвращение require 'cl, видимо ещё что то нужно заменить, попозже попробую разобраться.
Разобрался. Простой замены return на cl-return недостаточно, нужно ещё всё в cl-block заключить, вот так:
(defun somename()
    (cl-block имя блока
           ...
           тело блока
           ...
           (cl-return-from имя блока возвращаемое значение)))
После подобной замены у меня всё без require 'cl заработало, даже нашел одну книжку в которой обложка отображается. Кстати, что не так с изображением в книге которую я тебе отослал?
btimofeev to btimofeev (2017-09-08 17:10:44) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
Сегодня пробовал запускать сабж в 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
btimofeev to Andrew Lobanov (2017-09-11 13:59:22) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
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, но возьму на заметку.
Andrew Lobanov to btimofeev (2017-09-11 14:40:39) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL> при чтении разнообразных pdf-ок.
У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
btimofeev to Andrew Lobanov (2017-09-11 16:23:20) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
btimofeev> У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
Проблема оказалась в тормознутости плагина отображающего номера строк, отключил его для этого режима и теперь не тормозит.
btimofeev to all (2017-09-11 18:12:04) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
AL>> при чтении разнообразных pdf-ок.
btimofeev> У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
Такое было у меня на нетбуке. Как вариант, попробовать поиграться переменной doc-view-resolution. На новом ноуте всё вполне сносно переключается.

К сожалению, чтение через doc-view в emacs это достаточно грязный хак в виде конвертации страниц в отдельные изображения и последующее их изображение уже пререндеренными. И я не особо разбирался можно ли как-то кешировать подгруженные изображения на одну страницу вперёд, но погуглить в этом направлении стоит.
Andrew Lobanov to btimofeev (2017-09-11 18:19:46) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
btimofeev>> У меня emacs почему-то дико тормозит при открытии и скроллинге pdf, по 10-15 секунд страницы переключает.
btimofeev> Проблема оказалась в тормознутости плагина отображающего номера строк, отключил его для этого режима и теперь не тормозит.
А. Ну я linum-mode включаю просто по хоткею, так как далеко не только пишу текст в emacs =)
Andrew Lobanov to btimofeev (2017-09-11 18:20:39) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
Андрей, а у тебя в книгах пробелы в диалогах выделяются подобным образом? Скриншот: https://ibb.co/kTqZfG

У меня такое во всех книгах и во всех темах емакса, которые я пробовал. Или это у меня с настройками емакса что-то не так?
btimofeev to Andrew Lobanov (2017-12-09 08:19:20) [ссылка]

Re: emacs FB2-mode

Ответ на сообщение
btimofeev> Андрей, а у тебя в книгах пробелы в диалогах выделяются подобным образом? Скриншот: https://ibb.co/kTqZfG
btimofeev> У меня такое во всех книгах и во всех темах емакса, которые я пробовал. Или это у меня с настройками емакса что-то не так?
Это имакс так отображает неразрывный пробел. По-моему, я так и не нашёл как для одной моды сменить это. Менять же глобально в своём ридере мне показалось плохим тоном. Так что да. Проблема.
Andrew Lobanov to btimofeev (2017-12-09 10:11:54) [ссылка]