LINUX.ORG.RU

FB2 читалка для Emacs

 , ,


4

3

Если вдруг кто то страдал без возможности читать FB2 в Emacs, то у меня хорошая новость - теперь и для этого тоже есть плагин. Дописал до состояния «можно пользоваться», решил похвастаться. Поддерживает ссылки, картинки, навигацию по разделам (imenu, отдельный буфер с содержанием), показ инофрмации о книге. Скриншоты и чуть подробнее - https://github.com/jumper047/fb2-reader. Пакет есть на MELPA, можно установить из менеджера пакетов: M-x package-install fb2-reader и добавить в конфиг

(add-to-list 'auto-mode-alist '("\\.fb2\\(.zip\\|\\)$" . fb2-reader-mode))
Это мой первый большой плагин, если вдруг кто нибудь кто нибудь посмотрит внутрь и скажет где я накосячил будет круто.

★★

Последнее исправление: psh (всего исправлений: 1)

Хоть Emacs и не использую, но выглядит прикольно.

Двухстоаничный режим было б хорошо иметь (с отображением страниц, как просят выше).

grem ★★★★★
()

Это мой первый не ебаться какой большой плагин, если с нихуя кто нибудь кто нибудь посмотрит внутрь и скажет где я нахуевертил будет круто.

Да норм плагин вроде, вот бы кто такой для вим сделал.

anonymous
()

Недурно, недурно.

За что зацепился глаз:

  • «Загружается, пожалуйста подождите» — после «пожалуйста» тоже надо запятую.
  • Было бы неплохо, если бы текст переформатировался под ширину текущего окна.
  • Может, это только у меня, но каждая строчка текста заканчивается знаком $.
Nervous ★★★★★
()
Ответ на: комментарий от Nervous

Может, это только у меня, но каждая строчка текста заканчивается знаком $.

toggle-truncate-lines

BceM_IIpuBeT ★★☆☆☆
()
Ответ на: комментарий от BceM_IIpuBeT

Не планировал, но можно попробовать, с двустраничным вариантом который grem предложил должно прикольно получиться.

psh ★★
() автор топика
Ответ на: комментарий от c0ne

А почему? Биндинг и брал или близкие к стандартным емаксовским, или похожие из Nov.el/pdf-tools на случай если у кого то рука привыкла.

psh ★★
() автор топика
Ответ на: комментарий от Nervous

С шириной окна засада - нужно будет каждый раз книгу заново рендерить. Пока что можно только настроить ширину страницы. Включить перенос строк конечно поможет, но форматирование поедет.

psh ★★
() автор топика
Ответ на: комментарий от Bass

О, не зря значит одну функцию заменил - с ней плагин был 27+

psh ★★
() автор топика
Ответ на: комментарий от psh

Потому, что если читалка не планируется для выделения и копирования текста, то нужно хардкодить:
C-F,C-N, j,k, arrows Up, Down - построчно,
PgUp,PgDown - постранично,
Space - Page Down (страницу вниз).

А перемещение курсора по тексту отключить, если не планируешь делать переход по сноскам.

c0ne
()
Последнее исправление: c0ne (всего исправлений: 2)
Ответ на: комментарий от psh

И хорошо, а вот перемещение надо переопределить. И будет конфетка. В любом случае спасибо, что улучшаешь.

c0ne
()
Ответ на: комментарий от c0ne

Последний момент, который меня смущает - а что с выделением текста? Допустим захотелось мне кусок скопировать.. Может тогда C-n C-p оставить как есть, а n p движение экрана построчно?

psh ★★
() автор топика
Ответ на: комментарий от c0ne

А, забыл - а что с cl-lib не так? Где то (то ли реддит, то ли емакс девел) натыкался на мысль что сейчас столько пакетов используют cl-lib что можно не щаморачиваться с избеганием её.

psh ★★
() автор топика
Ответ на: комментарий от psh

Не надо выделять, в X - мышкой, а клава для чтения.

c0ne
()
Ответ на: комментарий от psh
 С дискретной прокруткой.
+----------------------
|       -----
|       |   |  <--- титулка
|       |   |
|       |   |
|       -----
+======================
+---------------------
|    -----  -----
|    |   |  |   |  <---- текст
|    |   |  |   |
|    |   |  |   |
|    -----  -----
+======================
+---------------------
|    -----  -----
|    |   |  |   |  <---- текст
|    |   |  |   |
|    |   |  |   |
|    -----  -----
+=====================
...
BceM_IIpuBeT ★★☆☆☆
()

Не работает команда «Перейти по ссылке в оглавлении и закрыть его» pdf-outline-follow-link-and-quit

Выхлоп такой:

command-execute: Wrong type argument: commandp, pdf-outline-follow-link-and-quit
Dreamdrawer
()

Ого! Я нечто подобное писал нцать лет назад, но так и не довёл до ума. А ты подложку под картинки рисуешь? А то бывают картинки с прозрачностью и на тёмных темах они не смотрятся совсем.

skiminok1986 ★★★★★
()
Ответ на: комментарий от psh

Тебе спасибо! Такую вещь нужную сделал и сделал достойно! Имакс стал ещё более всемогущим :)

Заметил, что после открытия файла, плагин сохраняет его копию в каталог настроек (~/.emacs.d/fb2-reader/)

Надо бы, по-хорошему, сделать заметку об этом в описании, иначе каталог распухнет без ведома пользователя и будет неожиданностью при синхронизации настроек.

А ещё лучше, сделать опциональную функцию автоочистки при закрытии и возможность устанавливать лимит размера каталога. А также сделать возможность указания каталога для кэширования. Впрочем, по поводу последнего, можно добавить в конфиг нечто вроде этого:

;; FB2-mode
(use-package fb2-reader
  :config
  (setq fb2-reader-settings-dir
		(expand-file-name "/home/user/.cache/emacs.data/fb2-reader2")))
Dreamdrawer
()
Ответ на: комментарий от skiminok1986

О, аватарка знакомая - значит не показалось и ты тоже на лоре есть! Я изначально твою fb2-mode хотел чуть подпилить, но в итоге увлёкся и своё написал. В ридми внизу есть ссылка на твою репу btw:). Сам бы я, подозреваю, очень долго бы с парсером возился если бы не было твоей реализации перед глазами.

psh ★★
() автор топика
Ответ на: комментарий от Dreamdrawer

Максимальное количество файлов в кэше задаётся переменной fb2-reader-max-in-cache. А по поводу ридми да, добавлю в ближайшее время.

psh ★★
() автор топика
Ответ на: комментарий от skiminok1986

Задание фона у картинок тоже у тебя видел, но у себя пока не делал. Хочу попробовать как-то детектить темную/светлую тему и в зависимости от этого ставить фон.

psh ★★
() автор топика
Ответ на: комментарий от BceM_IIpuBeT

Занёс в список, мне прям понравилось как это выглядит. Не думал про такой вариант. Но видимо это не очень быстро появится - у меня некоторые вещи (в том числе и запланированные) завязаны на то, что книга целиком находится в буфере.

psh ★★
() автор топика

Отличный проект, молодец!

zabbal ★★★★★
()

. Дописал до состояния «можно пользоваться», решил похвастаться.

Большое спасибо, сделано круто!

Надеюсь, что такое хвастовство окажется заразительным, как COVID.

anonymous
()

Приятная возможность. Спасибо. Почему не мининовость?

А каталогизатор подобных вещей в emacs имеется? В смысле книжная полка для fb2?

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)

Это мой первый большой плагин

Получилось очень хорошо!

ЗЫ: найти бы ещё для емакса плагин тестового редактора…

anonymous
()
Ответ на: комментарий от psh

Хочу попробовать как-то детектить темную/светлую тему и в зависимости от этого ставить фон.

Я хотел так сделать, но в итоге пошёл срезать углы. Подложку рисовать показалось самым дешёвым вариантом. Хотя, сейчас я бы, пожалуй, начал определять яркость фона и исходить из неё, но сейчас смысла нет уже, когда есть твой плагин :)

skiminok1986 ★★★★★
()
Ответ на: комментарий от Evgueni

Почему не мининовость?

Постеснялся - где я а где мининовость. Если есть смысл, попробую сегодня вечером оформить.

psh ★★
() автор топика
Ответ на: комментарий от Evgueni

Я тут подумал что сейчас уже смысла нет - большая часть тех, кому этот потенциально интересно пришла по тегу. Сначала доприкручу синхронизацию с Librera reader, а потом и мининовость.

psh ★★
() автор топика

(add-to-list ’auto-mode-alist ’(«\.fb2\(.zip\|\)$» . fb2-reader-mode))

мне кажется, можно спокойно положить этот код в автолоад – по крайней мере, большинство major-modes не стесняются так делать.

zarkone ★★
()
Последнее исправление: zarkone (всего исправлений: 1)
Ответ на: комментарий от zarkone

В принципе можно, но тогда сначала нужно разобраться как сделать отключение режима по человечески - что бы можно было сделать (fb2-reader-mode -1) и вернуть в буфере все как было.

psh ★★
() автор топика
Ответ на: комментарий от psh

Но зачем? Ассоциации типов файлов с модами разве не должны быть постоянными?

Если только по unload-feature чистить, и то.

Nervous ★★★★★
()
Последнее исправление: Nervous (всего исправлений: 2)
Ответ на: комментарий от Nervous

Меня немного смущает то, что я .gz буду открывать - вдруг кому то захочется посмотреть что в архиве с книгой.

psh ★★
() автор топика
Ответ на: комментарий от psh

Моё видение того, как должен работать переход из оглавления.

И прописать в конфиг по умолчанию «не отображать символ неразрывного пробела».

(use-package fb2-reader
  :init
  ;; Функция для перехода из оглавления с правильным позиционированием
  ;;
  ;; Алгоритм действий:
  ;; > открыть текст на указанной в оглавлении странице
  ;; > переключить фокус обратно на оглавление
  ;; > закрыть окно
  ;; > сдвинуть позицию заголовка кверху страницы
  ;; > прокрутить на три строки
  (defun fb2-reader-toc-follow-link-and-quit ()
    (interactive)
    (fb2-reader-toc-follow-link)
    (fb2-reader-show-toc)
    (quit-window)
    (recenter 2)
    (scroll-up-line 3)
    )
  :bind (
	 :map fb2-reader-toc-mode-map
	 ("RET" . fb2-reader-toc-follow-link-and-quit))

  :config
  ;; скрыть символ неразрывного пробела
  (set-face-attribute 'nobreak-space nil :underline nil)
  )

ИМХО

Dreamdrawer
()
Последнее исправление: Dreamdrawer (всего исправлений: 1)
Ответ на: комментарий от Dreamdrawer

Прикольно - doom-themes изменяет face для nobreak-space так как у тебя написано. Кстати, если что - я добавил отдельную переменную fb2-reader-cache-dir, что бы не мешать кэш с позицией в одной папке.

psh ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.