Как использовать Emacs для RSS с Elfeed

Emacs — это очень расширяемое программное обеспечение. Он может быть вашим текстовым редактором, вашим почтовым клиентом и даже вашим читателем USENET. С Elfeed вы также можете использовать Emacs в качестве читателя RSS-лент.
Содержание
- Что такое Elfeed?
- Почему использовать читатель лент в Emacs?
- Установка Elfeed в Emacs
- Настройка вашей первой RSS-ленты в Emacs
- Как автоматически помечать и фильтровать ленты в Emacs
- Как автоматически помечать ленты на основе URL
- Как создать пользовательские цвета и шрифты для меток
- Часто задаваемые вопросы
Также читайте: 5 лучших приложений для чтения RSS для macOS
Что такое Elfeed?
Elfeed — это легкий, но мощный читатель RSS-лент, написанный для Emacs. Он использует простую систему на основе меток для сортировки ваших RSS-лент. Более того, он также поставляется с мощной системой меток на основе “хуков”, которая позволяет вам автоматически помечать ленты на основе их содержания.

Это делает Elfeed полезным для людей, которые следят за множеством RSS-лент и ищут способ автоматически сортировать свои ленты.
Также читайте: Как использовать Emacs для воспроизведения музыки с EMMS
Почему использовать читатель лент в Emacs?
Emacs работает в концепции интероперабельности, так как Emacs берет данные и позволяет интерпретировать их различными способами.

Хотя вы можете использовать Emacs исключительно для редактирования текста, возможность доступа к вашей электронной почте во время редактирования текста, например, может позволить вам бесшовно использовать текст, который вы пишете, в электронной почте, которую вы составляете.

Вот почему интеграция вашего RSS-читателя в Emacs может быть привлекательной. Это позволит вам использовать мощные возможности редактирования Emacs для манипуляции вашими лентами и другими функциями в Emacs.
Установка Elfeed в Emacs
Установка Elfeed очень проста. Он доступен из репозитория GNU ELPA, поэтому вы можете получить к нему доступ без каких-либо изменений в вашем файле init.el.

Чтобы установить Elfeed, нажмите Alt + X, чтобы открыть буфер команд, затем введите package-install. Вам нужно указать elfeed как имя пакета и нажать Enter. Emacs загрузит исходный код Elfeed и сразу же скомпилирует его.
Настройка вашей первой RSS-ленты в Emacs
После установки получите доступ к Elfeed, нажав Alt + X и введя elfeed в буфере команд. Это загрузит пустой буфер Elfeed.

Существует два способа добавить RSS-ленту в Elfeed:
Вручную отредактировать ваш файл init.el
Без Emacs
Добавление RSS-ленты вручную в Elfeed
Вы можете легко заполнить Elfeed, вручную добавив URL-адреса лент в ваш файл init.el, так как Elfeed отслеживает переменную “elfeed-feeds”. Это говорит Elfeed, какие ленты загружать и отображать на экране обзора.
Например, это фрагмент из моего файла init.el.
(setq elfeed-feeds
'("https://feeds.maketecheasier.com/MakeTechEasier"
"https://solar.lowtechmagazine.com/feeds/all-en.atom.xml"
"https://old.reddit.com/r/f1technical.rss"))Setq — это функция Emacs, которая устанавливает значение определенной переменной. В данном случае она устанавливает переменную elfeed-feeds с тремя ссылками на ленты в качестве значений.
Оттуда Elfeed автоматически добавит эти ссылки в свою внутреннюю базу данных, а затем загрузит их в следующий раз, когда вы запустите программу.

Добавление RSS-ленты в Emacs
Другой способ заполнить Elfeed — это предоставить ему ссылки на ленты во время его работы. Это позволяет вам активно обновлять свой список лент с RSS-ссылками без перезагрузки Emacs.
Для этого нажмите Alt + X, чтобы открыть буфер команд. Введите elfeed-add-feed и нажмите Enter. Elfeed попросит вас предоставить URL-адрес ленты, которую вы хотите загрузить.

В моем случае я предоставляю наш URL-адрес ленты Elfeed, чтобы получать ежедневные обновления о последних статьях по технологиям.
Я копирую URL-адрес ленты и нажимаю Ctrl + Y в приглашении URL, чтобы вставить ссылку в Emacs. После вставки мне просто нужно нажать Enter, чтобы подтвердить URL-адрес ленты в Elfeed.

Также читайте: Как легко переименовать файлы в Linux
Как автоматически помечать и фильтровать ленты в Emacs
Помимо перечисления и просмотра RSS-лент, Elfeed также может выполнять ряд функций, которые позволят вам точно настроить ваш список лент.
Одна из этих замечательных функций — автоматическая маркировка. Эта функция позволяет вам немедленно помечать RSS-записи, которые пришли из определенной ленты.
Например, если у вас есть несколько лент на определенную тему, вы можете установить так, чтобы у них всех была одна и та же метка, что упрощает и делает интуитивно понятным сортировку по нескольким лентам на экране сводки.
Для этого отредактируйте RSS-ленты в вашем файле init.el. Посмотрите на этот краткий пример.
(setq elfeed-feeds
'("https://feeds.maketecheasier.com/MakeTechEasier" tech news)
("https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" tech)
("https://old.reddit.com/r/f1technical.rss" tech f1)))Чтобы автоматически пометить RSS-ленту, вам нужно сделать две вещи с вашим форматом по умолчанию elfeed-feeds:
- Обернуть ссылку на ленту в скобки. Это говорит
elfeed-feeds, что эта конкретная запись в переменной имеет несколько частей. - Указать слово, которое будет действовать как ваша метка для этой конкретной ссылки. Вы можете включать несколько меток, если разделяете каждую из них пробелом.

Фильтрация вашей RSS-ленты в Elfeed
Эти метки работают в сочетании с мощной системой фильтрации Elfeed. Это позволяет вам группировать ваши RSS-ленты только на основе меток.
Например, если у вас есть RSS-ленты, помеченные как “новости”, “новости технологий” и “новости игр“, Elfeed позволяет вам сгруппировать их все под меткой “новости”.
Чтобы отфильтровать ваш список лент, нажмите S, находясь в Elfeed, чтобы открыть приглашение фильтра Elfeed. По умолчанию приглашение содержит следующее:
@6-months-ago +unread- Символ @ указывает диапазон дат. Это может быть абсолютная дата, такая как “2022-02-22”, или относительная, такая как “3 дня назад”.
- Символ “ + “ — это оператор метки, который говорит Elfeed явно включить все ленты, которые имеют эту метку.

С учетом этого, рассмотрите следующую RSS-ленту.
[0](setq elfeed-feeds
[1] '("https://feeds.maketecheasier.com/MakeTechEasier" tech news)
[2]("https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" tech)
[3]("https://old.reddit.com/r/f1technical.rss" tech f1)
[4]("https://www.autosport.com/rss/f1/photos/" f1)
[5]("https://www.philstar.com/rss/world" news)))Чтобы отфильтровать метку “технологии”, введите “ +tech “ в приглашении фильтра Elfeed, чтобы отобразить первые три ссылки в сводном буфере Elfeed. Однако, если вы добавите “ +news “, Elfeed отобразит первую и пятую метку вместо этого.
Зная это, вы можете быть более конкретными в вашей логике фильтрации. Например, если вы хотите включить все ссылки на технологии, но без “f1”, вы можете ввести следующее:
+tech -f1Как автоматически помечать ленты на основе URL
Еще один способ автоматически помечать RSS-записи в Elfeed — это сортировать их на основе URL. Это полезно, если вы используете Elfeed для подписки на RSS-ленты, которые имеют схожую структуру URL.

Для этого используйте elfeed-new-entry-hook Elfeed. Это функция хуков, которая выполняет пользовательскую команду на основе определенных условий. Эта функция будет запускать пользовательскую команду каждый раз, когда запись добавляется с помощью команды elfeed-add-feed.
Вы можете использовать функцию elfeed-make-tagger внутри этого хука. Это общая функция, которая помечает ссылки на основе заданных вами параметров. Таким образом, комбинирование двух функций для создания автоматической маркировки может выглядеть следующим образом:
(add-hook 'elfeed-new-entry-hook
(elfeed-make-tagger :feed-url"medium\.com"
:add '(medium)))
Эта функция автоматически пометит любую ссылку, которая будет содержать слуг “medium.com”.
Вы также можете быть более конкретными с параметрами, которые вы устанавливаете с elfeed-make-tagger. Например, вы можете как пометить ленту на основе URL, так и отфильтровать записи, которые старше трех месяцев:
(add-hook 'elfeed-new-entry-hook
(elfeed-make-tagger :feed-url"medium\.com"
:before"3 months ago"
:add 'medium))Как создать пользовательские цвета и шрифты для меток
Помимо автоматической маркировки, вы также можете настроить, как Elfeed выглядит на основе метки, с которой он работает. Это полезно, если вы хотите, чтобы ленты с определенной меткой выделялись.

Для этого вам нужно переопределить функцию elfeed-search-face-alist. Это команда, которую Elfeed использует для изменения внешнего вида сводного буфера. Таким образом, чтобы переопределить эту функцию, вы можете использовать функции defface и push:
- Функция defface создает новую “лицу” для Emacs. “Лицо” — это набор значений, которые могут содержать как шрифты символов, так и цвета фона.
- Функция push, с другой стороны, добавляет определение к существующей команде в Emacs.
С учетом этого, вы можете комбинировать эти функции, чтобы создать пользовательское “лицо” для Elfeed. Например, это пользовательское лицо, которое выделяет метку f1 красным цветом.
(defface elfeed-face-tag-f1
'((t :foreground"#f00"))
"Это пользовательское шрифтовое лицо для метки F1 в Elfeed.")
(push '(f1 elfeed-face-tag-f1)
elfeed-search-face-alist)Поздравляем! Теперь вы знаете, как использовать Emacs в качестве RSS-ридера с Elfeed. Более того, у вас теперь есть базовое представление о том, как настраивать и автоматизировать Elfeed в соответствии с вашими потребностями в RSS-лентах.
Если все это обсуждение заставило вас задуматься о том, что вы можете сделать больше с Emacs, вы можете ознакомиться с нашей статьей о лучших продуктивных пакетах для Emacs.
Также читайте: Как исправить проблему “Не могу печатать в терминале” в Linux
Часто задаваемые вопросы
1. Как я могу удалить ленту в Elfeed?
Вы можете удалить ленту двумя способами: удалить запись ленты в вашем файле init.el или использовать функцию настройки Emacs для ее удаления.
Для первого способа удаление ленты — это просто вопрос удаления URL-адреса ленты в вашей переменной elfeed-feeds. Для второго способа вам нужно нажать Alt + X, чтобы открыть буфер команд. Отсюда вам нужно ввести customize. Это откроет окно настройки для Emacs.
Оттуда введите elfeed-feeds в поле поиска. Это приведет ко всем лентам, на которые вы в настоящее время подписаны.
Это позволит вам удалить ленту, нажав на кнопки DEL рядом с ссылкой на ленту. После завершения вы можете нажать кнопки Применить и Сохранить под строкой поиска, чтобы обновить вашу ленту.
2. Что я могу сделать, если я добавлю все свои ленты в Elfeed, и они не обновляются?
Elfeed не обновляет ссылки на ленты автоматически. Чтобы получить последние записи в ваших лентах, нажмите Shift + G, чтобы инициировать обновление всех текущих подписанных лент.
Кроме того, если вы хотите обновить только конкретную RSS-ленту, выполните функцию elfeed-update-feed.
3. Мои автоматические метки, похоже, не работают. Как я могу это исправить?
Это, вероятно, связано с тем, что у вас есть конфликтующие метки для одной и той же RSS-ленты. Это может произойти, если вы включили один и тот же URL-адрес ленты как в ваших ручных, так и в автоматических лентах.
Чтобы решить эту проблему, вам нужно удалить либо вашу ручную запись в вашем файле init.el, либо автоматическую запись ленты в буфере настройки Emacs.