Спустя почти два года разработки представлена новая версия плагина облегчающего запуск внешних программ из XMPP-мессенджера mcabber под названием mcabber-commands-0.7. В новый релиз вошли следующие изменения:
* Исправлено падение модуля в случае ошибок при компиляции регулярных выражений. Вместо этого будет выведено диагностическое сообщение, а сама команда с проблемным регулярным выражением не будет добавлена.
* Включено подавление вывода от запускаемых программ.
* Улучшен разбор команд для выполнения. Теперь аргумент передаваемый в программу может содержать двойные кавычки, которые не будут вырезаны.
Похоже, пришло время пояснить по хардкору, что же такое mcabber-commands и нахуя мы с лайколом его юзаем.
mcabber-commands перехватывает все входящие сообщения, ищет в них заданные регулярки и добавляет сматченное в комплишен-листы мкаббера. Таким образом, можно быстро достать кусок недавнего сообщения из нужного комплишен-листа и передать внешней команде.
Юзкейз первый: ссылки.
Мне по сто ссылок на дню приходит (в основном от bnw и point). Я заебусь мышкой по каждой из них кликать, чтобы посмотреть свежие новости и смехуёчки. Поэтому я пишу в mcabberrc следующее:
add_custom_command ff .* https?://(?!(([a-zA-Z0-9_-]+[.])?((point|bnw)[.]im)))\S+ firefox %s
После этого, чтобы открыть недавно пришедшую ссылку, я набираю /ff
и жамкаю Tab, чтобы подставилась последняя ссылка, а затем жму Ret, чтобы ссылка открылась в браузере. Да, если жамкнуть Tab дважды, то ссылка подставится предпоследняя.
Разберём подробнее мною тут написанное. Команда add_custom_command принимает четыре аргумента:
1. ff
— имя комплишен листа. Комплишены будут доступны после того как в мкаббере будет набран слэш, имя комплишен листа и пробел.
2. .*
— регулярка для матчинга имени собеседника. Ссылки я открываю от всех существ из ростера, так что тут .*
. Для комплишена для bnw можно тут написать например bnw.im
.
3. https?://(?!(([a-zA-Z0-9_-]+[.])?((point|bnw)[.]im)))\S+
— регулярка, которую нужно извлекать из входящих сообщений. Чтобы не замусоривать комплишен-лист, ссылки на посты на бнв и пойнте этой же регуляркой отфильтрованы. Из каждого входящего сообщения извлекаются все подстроки удовлетворяющие регулярке. Все эти подстроки будут добавлены в комплишен лист в порядке получения. Если в комплишен-листе уже есть такая подстрока, то она переместится наверх списка.
4. firefox %s
— команда, которую нужно выполнить после нажатия Ret. Вместо %s будет подставлено всё что было написано после /ff
.
Юзкейз второй: успешный микроблоггинг.
В интернете зачастую кто-то неправ, поэтому приходится многое вам объяснять. Чтобы не набирать мучительно долго номера постов и комментариев, у меня в mcabberrc есть такая вот запись:
add_custom_command bc bnw.im \b[A-Z0-9]{6}(/[A-Z0-9]{3})?\b sh .mcabber/sayto bnw.im "c -m %s" rcode
Итак, мы видим, что создаётся комплишен лист /bc
, в который попадают все подстроки типа IQ3OP2 или S7PIEF/H6W, поэтому набрав /bc
и нажав единожды Tab я получаю в строке ввода мкаббера, например, вот это: /bc IQ3OP2
после этого остаётся только дописать осмысленный текст: /bc IQ3OP2 ты — хуй
, нажать Ret и при помощи нехитрого скрипта новый комментарий будет добавлен к посту штилетты.
Прочее
Сырцы лежат здесь: https://github.com/hirthwork/mcabber-commands/
Ебилд здесь: https://github.com/hirthwork/ncursed-desktop/blob/master/net-im/mcabber-commands/mcabber-commands-0.7.ebuild
Подробнее про выполняемые команды.
Можно писать так: firefox %s
, можно так: firefox "%s"
, и даже так: firefox "http://ya.ru %s" %s
(нахуя?).
Нельзя писать так: firefox "%s %s"
, так: firefox "%s"test
и так: firefox test"http://ya.ru %s"
. Падать не должно, но работать будет не так как хотелось бы.
Количество слов в команде ограничено 32мя, остальное будет отброшено.