Как написать функцию, которая уведомляет меня, когда кто-то упоминает меня на irc в Emacs - PullRequest
0 голосов
/ 13 февраля 2012

У меня есть эта функция

(defun mention-notify (match-type nickuserhost msg)
  (interactive)
  (if (and (eq match-type 'current-nick)
           (eq (string-match "^-NickServ-" msg) nil) ;this is probably not needed
           (eq (string-match "^\\*\\*\\*" msg) nil))
      (progn
        (shell-command "mpg123 -q /home/kuba/Pobrane/beep-8.mp3")
        (notify "ERC" msg))))

(add-hook 'erc-text-matched-hook 'mention-notify)

Но он выполняет команду, даже если сообщение начинается с ***. Что я тут не так делаю? Как должна выглядеть эта функция?

Я прочитал эту страницу , но она показывает только, как отправлять уведомления обо всех упоминаниях, даже с сервера. как:

*** Users on #<chanel>: jcubic...

или

*** jcubic has changed mode for jcubic to +i

Похоже, что когда я проверяю 'current-nick - msg - это не целое сообщение, а подстрока, содержащая мой ник, я пытаюсь проверить ключевое слово вместо current-ник и проверить, отображается ли мой ник, который я всегда использую, в тексте. но использование ключевого слова не работает вообще.

Ответы [ 3 ]

3 голосов
/ 13 февраля 2012

Возможно, вы захотите взглянуть на Саурона:

http://www.emacswiki.org/emacs/Sauron

1 голос
/ 22 мая 2012

Я скопировал функцию erc-match-message из файла erc.el в мой файл .emacs и добавил один флаг для перехвата

(run-hook-with-args
 'erc-text-matched-hook
 (intern match-type)
 (or nickuserhost
     (concat "Server:" (erc-get-parsed-vector-type vector)))
 message
 (string-match "^\\*\\*\\*"
               (buffer-substring (point-min) (point-max)))))))

последний флаг установлен, если сообщение является системным сообщением erc - начинается с ***, так что теперь я могу проверить этот флаг в моем хуке

(defun mention-notify (match-type nickuserhost msg notification)
  (interactive)
  (if (and (eq match-type 'current-nick)
           (not notification))
      (progn
        (shell-command "mpg123 -q /home/kuba/Pobrane/beep-8.mp3")
        (notify "ERC" msg))))

ОБНОВЛЕНИЕ Я также не хотел получать сообщение от -NickServ-, поэтому я добавляю это

(run-hook-with-args
 'erc-text-matched-hook
 (intern match-type)
 (or nickuserhost
     (concat "Server:" (erc-get-parsed-vector-type vector)))
 message
 (let ((whole-msg (buffer-substring (point-min) (point-max))))
    (or (string-match "^-NickServ-" whole-msg)
        (string-match "^\\*\\*\\*" whole-msg)))))))
0 голосов
/ 13 февраля 2012
...