Subject: bug#42833: [PATCH] Make erc-compat.el obsolete

From: Stefan Kangas <[email-masked]>
Date: Wed, 12 Aug 2020 19:48:43 +0200

X-Debbugs-CC: [email-masked]

The attached makes erc-compat.el obsolete. This library seems to be
there mostly for XEmacs compatibility, and is no longer useful.

I'm not a heavy erc user so I've only given it light testing.

Best regards,
Stefan Kangas
From dbf82ff2761715c79338505e79bc730233248b54 Mon Sep 17 00:00:00 2001
From: Stefan Kangas <[email-masked]>
Date: Wed, 12 Aug 2020 19:32:52 +0200
Subject: [PATCH] Make erc-compat.el obsolete

* lisp/erc/erc-compat.el: Move from here...
* lisp/obsolete/erc-compat.el: ...to here.
* lisp/erc/erc-backend.el:
* lisp/erc/erc-pcomplete.el:
* lisp/erc/erc-stamp.el:
* lisp/erc/erc-track.el:
* lisp/erc/erc.el: Don't require 'erc-compat'.

* lisp/erc/erc-backend.el (erc-decode-string-from-target):
* lisp/erc/erc-dcc.el (pcomplete/erc-mode/DCC):
* lisp/erc/erc-fill.el (erc-fill-mode):
* lisp/erc/erc-goodies.el (erc-controls-interpret):
* lisp/erc/erc-log.el (erc-log-setup-logging):
* lisp/erc/erc-notify.el (erc-notify-QUIT):
* lisp/erc/erc.el (erc-startup-file-list, define-erc-module)
(erc-canonicalize-server-name, erc-cmd-SV, erc-banlist-update)
(erc-group-list, erc-seconds-to-string): Adjust callers.
* lisp/erc/erc.el: Require cl-lib and format-spec.
---
 lisp/erc/erc-backend.el              |  3 +--
 lisp/erc/erc-dcc.el                  |  8 ++++----
 lisp/erc/erc-fill.el                 |  2 +-
 lisp/erc/erc-goodies.el              |  3 +--
 lisp/erc/erc-log.el                  |  2 +-
 lisp/erc/erc-notify.el               |  2 +-
 lisp/erc/erc-pcomplete.el            |  1 -
 lisp/erc/erc-stamp.el                |  1 -
 lisp/erc/erc-track.el                |  1 -
 lisp/erc/erc.el                      | 24 ++++++++++++------------
 lisp/{erc => obsolete}/erc-compat.el |  1 +
 11 files changed, 22 insertions(+), 26 deletions(-)
 rename lisp/{erc => obsolete}/erc-compat.el (99%)

diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el
index 4f3d85ba3c..1cf0bb4921 100644
--- a/lisp/erc/erc-backend.el
+++ b/lisp/erc/erc-backend.el
@@ -98,7 +98,6 @@
 
 ;;; Code:
 
-(require 'erc-compat)
 (eval-when-compile (require 'cl-lib))
 ;; There's a fairly strong mutual dependency between erc.el and erc-backend.el.
 ;; Luckily, erc.el does not need erc-backend.el for macroexpansion whereas the
@@ -782,7 +781,7 @@ erc-decode-string-from-target
           (pop precedence))
         (when precedence
           (setq coding (car precedence)))))
-    (erc-decode-coding-string str coding)))
+    (decode-coding-string str coding t)))
 
 ;; proposed name, not used by anything yet
 (defun erc-send-line (text display-fn)
diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el
index bf98eb818f..477f148197 100644
--- a/lisp/erc/erc-dcc.el
+++ b/lisp/erc/erc-dcc.el
@@ -419,7 +419,7 @@ pcomplete/erc-mode/DCC
   (pcomplete-here
    (pcase (intern (downcase (pcomplete-arg 1)))
      ('chat (mapcar (lambda (elt) (plist-get elt :nick))
-                    (erc-remove-if-not
+                    (cl-remove-if-not
                      #'(lambda (elt)
                          (eq (plist-get elt :type) 'CHAT))
                      erc-dcc-list)))
@@ -427,7 +427,7 @@ pcomplete/erc-mode/DCC
               (mapcar (lambda (elt) (symbol-name (plist-get elt :type)))
                       erc-dcc-list)))
      ('get (mapcar #'erc-dcc-nick
-                   (erc-remove-if-not
+                   (cl-remove-if-not
                     #'(lambda (elt)
                         (eq (plist-get elt :type) 'GET))
                     erc-dcc-list)))
@@ -435,7 +435,7 @@ pcomplete/erc-mode/DCC
   (pcomplete-here
    (pcase (intern (downcase (pcomplete-arg 2)))
      ('get (mapcar (lambda (elt) (plist-get elt :file))
-                   (erc-remove-if-not
+                   (cl-remove-if-not
                     #'(lambda (elt)
                         (and (eq (plist-get elt :type) 'GET)
                              (erc-nick-equal-p (erc-extract-nick
@@ -443,7 +443,7 @@ pcomplete/erc-mode/DCC
                                                (pcomplete-arg 1))))
                     erc-dcc-list)))
      ('close (mapcar #'erc-dcc-nick
-                     (erc-remove-if-not
+                     (cl-remove-if-not
                       #'(lambda (elt)
                           (eq (plist-get elt :type)
                               (intern (upcase (pcomplete-arg 1)))))
diff --git a/lisp/erc/erc-fill.el b/lisp/erc/erc-fill.el
index 39a8be5e0c..d09caf7aa1 100644
--- a/lisp/erc/erc-fill.el
+++ b/lisp/erc/erc-fill.el
@@ -38,7 +38,7 @@ erc-fill
   :group 'erc)
 
 ;;;###autoload(autoload 'erc-fill-mode "erc-fill" nil t)
-(erc-define-minor-mode erc-fill-mode
+(define-minor-mode erc-fill-mode
   "Toggle ERC fill mode.
 With a prefix argument ARG, enable ERC fill mode if ARG is
 positive, and disable it otherwise.  If called from Lisp, enable
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 94d5de280c..abe0b34ea7 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -394,8 +394,7 @@ erc-controls-interpret
                         (start (match-beginning 0))
                         (end (+ (match-beginning 0)
                                 (length (match-string 5 s)))))
-                    (setq s (erc-replace-match-subexpression-in-string
-                             "" s control 1 start))
+                    (setq s (replace-match "" nil nil s 1))
                     (cond ((and erc-interpret-mirc-color (or fg-color bg-color))
                            (setq fg fg-color)
                            (setq bg bg-color))
diff --git a/lisp/erc/erc-log.el b/lisp/erc/erc-log.el
index e2c066da9b..2166123e67 100644
--- a/lisp/erc/erc-log.el
+++ b/lisp/erc/erc-log.el
@@ -267,7 +267,7 @@ erc-log-setup-logging
     (with-current-buffer buffer
       (auto-save-mode -1)
       (setq buffer-file-name nil)
-      (erc-set-write-file-functions '(erc-save-buffer-in-logs))
+      (set (make-local-variable 'write-file-functions) '(erc-save-buffer-in-logs))
       (when erc-log-insert-log-on-open
 	(ignore-errors
 	  (save-excursion
diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el
index 1b092c8a6a..144a981f83 100644
--- a/lisp/erc/erc-notify.el
+++ b/lisp/erc/erc-notify.el
@@ -181,7 +181,7 @@ erc-notify-QUIT
   (let ((nick (erc-extract-nick (erc-response.sender parsed))))
     (when (and (erc-member-ignore-case nick erc-notify-list)
 	       (erc-member-ignore-case nick erc-last-ison))
-      (setq erc-last-ison (erc-delete-if
+      (setq erc-last-ison (cl-delete-if
 			   (let ((nick-down (erc-downcase nick)))
 			     (lambda (el)
 			       (string= nick-down (erc-downcase el))))
diff --git a/lisp/erc/erc-pcomplete.el b/lisp/erc/erc-pcomplete.el
index 7643fa85b9..f8b7e13be0 100644
--- a/lisp/erc/erc-pcomplete.el
+++ b/lisp/erc/erc-pcomplete.el
@@ -41,7 +41,6 @@
 
 (require 'pcomplete)
 (require 'erc)
-(require 'erc-compat)
 (require 'time-date)
 
 (defgroup erc-pcomplete nil
diff --git a/lisp/erc/erc-stamp.el b/lisp/erc/erc-stamp.el
index cbab2f9da2..08970f2d70 100644
--- a/lisp/erc/erc-stamp.el
+++ b/lisp/erc/erc-stamp.el
@@ -35,7 +35,6 @@
 ;;; Code:
 
 (require 'erc)
-(require 'erc-compat)
 
 (defgroup erc-stamp nil
   "For long conversation on IRC it is sometimes quite
diff --git a/lisp/erc/erc-track.el b/lisp/erc/erc-track.el
index 41d8fc1a98..820b6d9359 100644
--- a/lisp/erc/erc-track.el
+++ b/lisp/erc/erc-track.el
@@ -36,7 +36,6 @@
 
 (eval-when-compile (require 'cl-lib))
 (require 'erc)
-(require 'erc-compat)
 (require 'erc-match)
 
 ;;; Code:
diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el
index 41d7516fbb..b4800053da 100644
--- a/lisp/erc/erc.el
+++ b/lisp/erc/erc.el
@@ -57,12 +57,12 @@
 
 (load "erc-loaddefs" nil t)
 
-(eval-when-compile (require 'cl-lib))
+(require 'cl-lib)
 (require 'font-lock)
+(require 'format-spec)
 (require 'pp)
 (require 'thingatpt)
 (require 'auth-source)
-(require 'erc-compat)
 (require 'time-date)
 (require 'iso8601)
 (eval-when-compile (require 'subr-x))
@@ -877,8 +877,8 @@ erc-flood-protect
 ;; Script parameters
 
 (defcustom erc-startup-file-list
-  (list (concat erc-user-emacs-directory ".ercrc.el")
-        (concat erc-user-emacs-directory ".ercrc")
+  (list (concat user-emacs-directory ".ercrc.el")
+        (concat user-emacs-directory ".ercrc")
         "~/.ercrc.el" "~/.ercrc" ".ercrc.el" ".ercrc")
   "List of files to try for a startup script.
 The first existent and readable one will get executed.
@@ -1306,7 +1306,7 @@ define-erc-module
          (enable (intern (format "erc-%s-enable" (downcase sn))))
          (disable (intern (format "erc-%s-disable" (downcase sn)))))
     `(progn
-       (erc-define-minor-mode
+       (define-minor-mode
         ,mode
         ,(format "Toggle ERC %S mode.
 With a prefix argument ARG, enable %s if ARG is positive,
@@ -2688,7 +2688,7 @@ erc-canonicalize-server-name
 otherwise `erc-server-announced-name'.  SERVER is matched against
 `erc-common-server-suffixes'."
   (when server
-    (or (cdar (erc-remove-if-not
+    (or (cdar (cl-remove-if-not
                (lambda (net) (string-match (car net) server))
                erc-common-server-suffixes))
         erc-server-announced-name)))
@@ -3725,8 +3725,9 @@ erc-cmd-SV
                                                       x-toolkit-scroll-bars)))
                                "")
                              (if (featurep 'multi-tty) ", multi-tty" ""))
-                            (if erc-emacs-build-time
-                                (concat " of " erc-emacs-build-time)
+                            (if emacs-build-time
+                                (concat " of " (format-time-string
+                                                "%Y-%m-%d" emacs-build-time))
                               "")))
   t)
 
@@ -4573,7 +4574,7 @@ erc-banlist-update
                 ((string-match "^-" mode)
                  ;; Remove the unbanned masks from the ban list
                  (setq erc-channel-banlist
-                       (erc-delete-if
+                       (cl-delete-if
                         #'(lambda (y)
                             (member (upcase (cdr y))
                                     (mapcar #'upcase
@@ -4594,7 +4595,7 @@ erc-group-list
   "Group LIST into sublists of length N."
   (cond ((null list) nil)
         ((null (nthcdr n list)) (list list))
-        (t (cons (erc-subseq list 0 n) (erc-group-list (nthcdr n list) n)))))
+        (t (cons (cl-subseq list 0 n) (erc-group-list (nthcdr n list) n)))))

 ;;; MOTD numreplies
@@ -6183,8 +6184,7 @@ erc-seconds-to-string
           output        (apply #'format format-args))
     ;; Change all "1 units" to "1 unit".
     (while (string-match "\\([^0-9]\\|^\\)1 \\S-+\\(s\\)" output)
-      (setq output (erc-replace-match-subexpression-in-string
-                    "" output (match-string 2 output) 2 (match-beginning 2))))
+      (setq output (replace-match "" nil nil output 2)))
     output))

diff --git a/lisp/erc/erc-compat.el b/lisp/obsolete/erc-compat.el
similarity index 99%
rename from lisp/erc/erc-compat.el
rename to lisp/obsolete/erc-compat.el
index d71221b267..7ef30d822f 100644
--- a/lisp/erc/erc-compat.el
+++ b/lisp/obsolete/erc-compat.el
@@ -5,6 +5,7 @@
 ;; Author: Alex Schroeder <[email-masked]>
 ;; Maintainer: Amin Bandali <[email-masked]>
 ;; URL: https://www.emacswiki.org/emacs/ERC
+;; Obsolete-since: 28.1
 
 ;; This file is part of GNU Emacs.
 
-- 
2.28.0