>From 45e083eb4212cb77130d917a27f5f9985b08bdf7 Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Thu, 9 Mar 2023 06:13:56 -0800 Subject: [PATCH 0/7] *** NOT A PATCH *** *** BLURB HERE *** F. Jason Park (7): [5.6] Honor arbitrary CHANTYPES in ERC [5.6] Copy over upstream Compat macros to erc-compat [5.6] Leverage loaddefs for migrating ERC modules [5.6] Don't require erc-goodies in erc.el [5.6] Modify erc-mode-map in module definitions [5.6] Add missing colors to erc-irccontrols-mode [5.6] Convert ERC's Imenu integration into proper module lisp/erc/erc-backend.el | 2 +- lisp/erc/erc-button.el | 6 +- lisp/erc/erc-common.el | 39 +---- lisp/erc/erc-compat.el | 52 +++++- lisp/erc/erc-goodies.el | 117 ++++++++----- lisp/erc/erc-ibuffer.el | 1 + lisp/erc/erc-imenu.el | 23 ++- lisp/erc/erc-log.el | 8 +- lisp/erc/erc-match.el | 8 +- lisp/erc/erc-page.el | 4 + lisp/erc/erc-pcomplete.el | 2 + lisp/erc/erc-services.el | 1 + lisp/erc/erc-sound.el | 1 + lisp/erc/erc-speedbar.el | 1 + lisp/erc/erc-stamp.el | 4 + lisp/erc/erc.el | 105 ++++++++---- test/lisp/erc/erc-goodies-tests.el | 253 +++++++++++++++++++++++++++++ test/lisp/erc/erc-tests.el | 187 +++++++++++++++++++-- 18 files changed, 672 insertions(+), 142 deletions(-) create mode 100644 test/lisp/erc/erc-goodies-tests.el Interdiff: diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el index 3d018bb11e0..7ea6c42ec65 100644 --- a/lisp/erc/erc-goodies.el +++ b/lisp/erc/erc-goodies.el @@ -235,6 +235,12 @@ erc-inverse-face "ERC inverse face." :group 'erc-faces) +(defface erc-spoiler-face + '((((background light)) :foreground "DimGray" :background "DimGray") + (((background dark)) :foreground "LightGray" :background "LightGray")) + "ERC spoiler face." + :group 'erc-faces) + (defface erc-underline-face '((t :underline t)) "ERC underline face." :group 'erc-faces) @@ -467,6 +473,7 @@ erc-controls-interpret s)) (t s))))) +;;;###autoload (defun erc-controls-strip (str) "Return a copy of STR with all IRC control characters removed." (when str @@ -531,6 +538,13 @@ erc-controls-propertize "Prepend properties from IRC control characters between FROM and TO. If optional argument STR is provided, apply to STR, otherwise prepend properties to a region in the current buffer." + (if (and fg bg (equal fg bg)) + (progn + (setq fg 'erc-spoiler-face + bg nil) + (put-text-property from to 'mouse-face 'erc-inverse-face str)) + (when fg (setq fg (erc-get-fg-color-face fg))) + (when bg (setq bg (erc-get-bg-color-face bg)))) (font-lock-prepend-text-property from to @@ -548,14 +562,12 @@ erc-controls-propertize '(erc-underline-face) nil) (if fg - (list (erc-get-fg-color-face fg)) + (list fg) nil) (if bg - (list (erc-get-bg-color-face bg)) + (list bg) nil)) str) - (when (and fg bg (equal fg bg)) - (put-text-property from to 'mouse-face 'erc-inverse-face str)) str) (defun erc-toggle-interpret-controls (&optional arg) @@ -632,3 +644,7 @@ erc-occur (provide 'erc-goodies) ;;; erc-goodies.el ends here + +;; Local Variables: +;; generated-autoload-file: "erc-loaddefs.el" +;; End: diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index b8f8263f9c3..1315bce2e54 100644 --- a/lisp/erc/erc.el +++ b/lisp/erc/erc.el @@ -58,17 +58,13 @@ ;;; Code: -(load "erc-loaddefs" 'noerror 'nomessage) +(eval-and-compile (load "erc-loaddefs" 'noerror 'nomessage)) (require 'erc-networks) (require 'erc-backend) (require 'cl-lib) (require 'format-spec) -(require 'pp) -(require 'thingatpt) (require 'auth-source) -(require 'time-date) -(require 'iso8601) (eval-when-compile (require 'subr-x) (require 'url-parse)) (defconst erc-version "5.5" @@ -135,13 +131,14 @@ erc-scripts ;; Forward declarations (defvar erc-message-parsed) -(defvar erc-irccontrols-mode) (defvar tabbar--local-hlf) (defvar motif-version-string) (defvar gtk-version-string) -(declare-function erc-controls-strip "erc-goodies" (str)) +(declare-function decoded-time-period "time-date" (time)) +(declare-function iso8601-parse-duration "iso8601" (string)) +(declare-function word-at-point "thingatpt" (&optional no-properties)) ;; tunable connection and authentication parameters @@ -3099,6 +3096,8 @@ erc--read-time-period (string-to-number period)) ;; Parse as a time spec. (t + (require 'time-date) + (require 'iso8601) (let ((time (condition-case nil (iso8601-parse-duration (concat (cond @@ -6891,8 +6890,7 @@ erc-update-mode-line-buffer (?m . ,(erc-format-channel-modes)) (?n . ,(or (erc-current-nick) "")) (?N . ,(erc-format-network)) - (?o . ,(or (and (bound-and-true-p erc-irccontrols-mode) - (erc-controls-strip erc-channel-topic)) + (?o . ,(or (erc-controls-strip erc-channel-topic) "")) (?p . ,(erc-port-to-string erc-session-port)) (?s . ,(erc-format-target-and/or-server)) diff --git a/test/lisp/erc/erc-goodies-tests.el b/test/lisp/erc/erc-goodies-tests.el index 8cab1dd0857..46fcf82401b 100644 --- a/test/lisp/erc/erc-goodies-tests.el +++ b/test/lisp/erc/erc-goodies-tests.el @@ -156,11 +156,13 @@ erc-controls-highlight--inverse 0 "Spoiler: " 'erc-default-face '(fg:erc-color-face0 bg:erc-color-face0)) (erc-goodies-tests--assert-face - 9 "Hello" '(fg:erc-color-face0 bg:erc-color-face0) - '(fg:erc-color-face1 bg:erc-color-face1)) + 9 "Hello" '(erc-spoiler-face) + '( fg:erc-color-face0 bg:erc-color-face0 + fg:erc-color-face1 bg:erc-color-face1)) (erc-goodies-tests--assert-face - 18 " World" '(fg:erc-color-face1 bg:erc-color-face1) - '(fg:erc-color-face0 bg:erc-color-face0))) + 18 " World" '(erc-spoiler-face) + '( fg:erc-color-face0 bg:erc-color-face0 + fg:erc-color-face1 bg:erc-color-face1 ))) (when noninteractive (kill-buffer))))) -- 2.39.2