82ecd61f5c
Change-Id: I6c6847fac56f0a9a1a2209792e00a3aec5e672b9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/10809 Autosubmit: aspen <root@gws.fyi> Reviewed-by: sterni <sternenseemann@systemli.org> Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
131 lines
3.7 KiB
EmacsLisp
131 lines
3.7 KiB
EmacsLisp
;;; -*- lexical-binding: t; -*-
|
|
|
|
(require 'erc)
|
|
(require 'alert)
|
|
|
|
(defvar irc-servers
|
|
'("hackint"
|
|
"libera"))
|
|
|
|
(defun irc-connect (server)
|
|
(interactive
|
|
(list (ivy-read "Server: " irc-servers)))
|
|
(let ((pw (s-trim (shell-command-to-string
|
|
(format "pass irccloud/%s" server))))
|
|
(gnutls-verify-error nil))
|
|
(erc-tls :server "bnc.irccloud.com"
|
|
:port 6697
|
|
:nick "grfn"
|
|
:password (concat "bnc@"
|
|
(s-trim (shell-command-to-string "hostname"))
|
|
":"
|
|
pw))))
|
|
|
|
|
|
(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 disable-tvl-notifications ()
|
|
(interactive)
|
|
(setq tvl-enabled? nil))
|
|
|
|
(defun enable-tvl-notifications ()
|
|
(interactive)
|
|
(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 "grfn" 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 "grfn" (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 "grfn:" (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)
|
|
|
|
(defun fix-irc-message (msg)
|
|
(let ((msg (s-trim msg)))
|
|
(if (string-equal msg ":q") "" msg)))
|
|
|
|
(advice-add #'erc-user-input :filter-return #'fix-irc-message)
|
|
|
|
(comment
|
|
(my-erc-define-alerts)
|
|
)
|