From 65b34db411f0fdc8271bf55360fd4237a117118d Mon Sep 17 00:00:00 2001 From: Case Duckworth Date: Fri, 27 Aug 2021 18:01:23 -0500 Subject: ERC Changes --- lisp/acdw-erc.el | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 52 insertions(+), 2 deletions(-) (limited to 'lisp/acdw-erc.el') diff --git a/lisp/acdw-erc.el b/lisp/acdw-erc.el index 22e6831..e375c61 100644 --- a/lisp/acdw-erc.el +++ b/lisp/acdw-erc.el @@ -128,10 +128,13 @@ Truncation is customized using the `erc-nick-truncate' variable. See also `erc-format-nick-function'." (when user (let* ((nick (erc-server-user-nickname user)) + (prefix (erc-get-user-mode-prefix nick)) (ellipsis "~") - (max-len (- erc-nick-truncate 2 (length ellipsis)))) + (max-len (- erc-nick-truncate 2 ; one each for < and > + (length ellipsis) + (length prefix)))) (concat (erc-propertize - (erc-get-user-mode-prefix nick) + prefix 'font-lock-face 'erc-nick-prefix-face) (if (and max-len (> (length nick) max-len)) (format "%s%s" (substring nick 0 max-len) @@ -147,5 +150,52 @@ Reverse prefix argument from `erc-switch-to-buffer'." (interactive "P") (erc-switch-to-buffer (not arg))) + +;;; ERC-Bar +;; NEEDS MUCH WORK + +(defun erc-bar-move-back (n) + "Moves back n message lines. Ignores wrapping, and server messages." + (interactive "nHow many lines ? ") + (re-search-backward "^.*<.*>" nil t n)) + +(defun erc-bar-update-overlay () + "Update the overlay for current buffer, based on the content of +erc-modified-channels-alist. Should be executed on window change." + (interactive) + (let* ((info (assq (current-buffer) erc-modified-channels-alist)) + (count (cadr info))) + (if (and info (> count erc-bar-threshold)) + (save-excursion + (end-of-buffer) + (when (erc-bar-move-back count) + (let ((inhibit-field-text-motion t)) + (move-overlay erc-bar-overlay + (line-beginning-position) + (line-end-position) + (current-buffer))))) + (delete-overlay erc-bar-overlay)))) + +(defvar erc-bar-threshold 0 + "Display bar when there are more than erc-bar-threshold unread messages.") + +(defvar erc-bar-overlay nil + "Overlay used to set bar") + +(setq erc-bar-overlay (make-overlay 0 0)) + + +(with-eval-after-load 'erc-track + (overlay-put erc-bar-overlay 'face '(:underline "gray")) + + ;;put the hook before erc-modified-channels-update + (defadvice erc-track-mode (after erc-bar-setup-hook + (&rest args) activate) + (add-hook 'window-configuration-change-hook 'erc-bar-update-overlay -90)) + + (add-hook 'erc-send-completed-hook (lambda (str) + (erc-bar-update-overlay)))) + + (provide 'acdw-erc) ;;; acdw-erc.el ends here -- cgit 1.4.1-21-gabe81