2020-05-18 17:34:43 +02:00
|
|
|
;;; ~/.doom.d/irc.el
|
|
|
|
|
|
|
|
(require 'erc)
|
|
|
|
(require 'alert)
|
|
|
|
|
|
|
|
(defun irc-connect ()
|
|
|
|
(interactive)
|
2020-07-08 22:20:22 +02:00
|
|
|
(let ((pw (s-trim (shell-command-to-string "pass irccloud/freenode")))
|
2020-05-18 17:34:43 +02:00
|
|
|
(gnutls-verify-error nil))
|
2020-07-08 22:20:22 +02:00
|
|
|
(erc-tls :server "bnc.irccloud.com"
|
|
|
|
:port 6697
|
|
|
|
:nick "grfn"
|
|
|
|
:password (concat "bnc@"
|
|
|
|
(s-trim (shell-command-to-string "hostname"))
|
|
|
|
":"
|
|
|
|
pw))))
|
2020-05-18 17:34:43 +02:00
|
|
|
|
|
|
|
|
|
|
|
(defgroup erc-alert nil
|
|
|
|
"Alert me using alert.el for important ERC messages"
|
|
|
|
:group 'erc)
|
|
|
|
|
|
|
|
(defcustom erc-noise-regexp
|
|
|
|
"\\(Logging in:\\|Signing off\\|You're now away\\|Welcome back\\)"
|
|
|
|
"This regexp matches unwanted noise."
|
|
|
|
:type 'regexp
|
|
|
|
:group 'erc)
|
|
|
|
|
|
|
|
(setq tvl-enabled? t)
|
|
|
|
|
|
|
|
(defun erc-alert-important-p (info)
|
|
|
|
(let ((message (plist-get info :message))
|
|
|
|
(erc-message (-> info (plist-get :data) (plist-get :message)))
|
|
|
|
(erc-channel (-> info (plist-get :data) (plist-get :channel))))
|
|
|
|
(and erc-message
|
|
|
|
(not (or (string-match "^\\** *Users on #" message)
|
|
|
|
(string-match erc-noise-regexp
|
|
|
|
message)))
|
|
|
|
(or (and tvl-enabled?
|
|
|
|
(string-equal erc-channel "##tvl"))
|
|
|
|
(string-match "glittershark" message)))))
|
|
|
|
|
|
|
|
(comment
|
|
|
|
last-info
|
|
|
|
erc-noise-regexp
|
|
|
|
(setq tvl-enabled? nil)
|
|
|
|
)
|
|
|
|
|
|
|
|
(defun my-erc-hook (&optional match-type nick message)
|
|
|
|
"Shows a notification, when user's nick was mentioned.
|
|
|
|
If the buffer is currently not visible, makes it sticky."
|
|
|
|
(setq last-message message)
|
|
|
|
(if (or (null match-type) (not (eq match-type 'fool)))
|
|
|
|
(let (alert-log-messages)
|
|
|
|
(alert (or message (buffer-string))
|
|
|
|
:severity (if (string-match "glittershark" (or message ""))
|
|
|
|
'high 'low)
|
|
|
|
:title (or nick (buffer-name))
|
|
|
|
:data `(:message ,(or message (buffer-string))
|
|
|
|
:channel ,(or nick (buffer-name)))))))
|
|
|
|
|
|
|
|
(add-hook 'erc-text-matched-hook 'my-erc-hook)
|
|
|
|
(add-hook 'erc-insert-modify-hook 'my-erc-hook)
|
|
|
|
|
|
|
|
(defun my-erc-define-alerts (&rest ignore)
|
|
|
|
;; Unless the user has recently typed in the ERC buffer, highlight the fringe
|
|
|
|
(alert-add-rule
|
|
|
|
:status '(buried visible idle)
|
|
|
|
:severity '(moderate high urgent)
|
|
|
|
:mode 'erc-mode
|
|
|
|
:predicate
|
|
|
|
#'(lambda (info)
|
|
|
|
(and (not (eq (current-buffer) (plist-get info :buffer)))
|
|
|
|
(string-match "glittershark:" (plist-get info :message))))
|
|
|
|
:persistent
|
|
|
|
#'(lambda (info)
|
|
|
|
;; If the buffer is buried, or the user has been idle for
|
|
|
|
;; `alert-reveal-idle-time' seconds, make this alert
|
|
|
|
;; persistent. Normally, alerts become persistent after
|
|
|
|
;; `alert-persist-idle-time' seconds.
|
|
|
|
(memq (plist-get info :status) '(buried idle)))
|
|
|
|
:style 'message
|
|
|
|
:continue t)
|
|
|
|
|
|
|
|
(alert-add-rule
|
|
|
|
:status 'buried
|
|
|
|
:mode 'erc-mode
|
|
|
|
:predicate #'erc-alert-important-p
|
|
|
|
:style 'libnotify
|
|
|
|
:append t)
|
|
|
|
|
|
|
|
(alert-add-rule
|
|
|
|
:status 'buried
|
|
|
|
:mode 'erc-mode
|
|
|
|
:predicate #'erc-alert-important-p
|
|
|
|
:style 'message
|
|
|
|
:append t)
|
|
|
|
|
|
|
|
(alert-add-rule
|
|
|
|
:mode 'erc-mode
|
|
|
|
:predicate #'erc-alert-important-p
|
|
|
|
:style 'log
|
|
|
|
:append t)
|
|
|
|
|
|
|
|
(alert-add-rule :mode 'erc-mode :style 'ignore :append t))
|
|
|
|
|
|
|
|
(add-hook 'erc-connect-pre-hook 'my-erc-define-alerts)
|
|
|
|
|
|
|
|
(comment
|
|
|
|
(my-erc-define-alerts)
|
|
|
|
)
|