Add compat from GNU ELPA as a soft dependency in ERC

* lisp/erc/erc-backend.el (erc-parse-server-response,
erc--parse-isupport-value): Remove sub-28 compat code involving
`string-search'.

* lisp/erc/erc-compat.el: Require compat package, but don't error
when absent.

* lisp/erc/erc-dcc.el (erc-dcc-member): Remove `string-search' compat
code.
(erc-dcc-unquote-filename): Remove `string-replace' compat code.

* lisp/erc/erc-speedbar.el (erc-speedbar-expand-server,
erc-speedbar-expand-channel, erc-speedbar-expand-user): Remove
`string-search' compat code.

* lisp/erc/erc.el: Add compat version 28.1.2.0 to Package-Requires
header and require `erc-compat' after other libraries.
(erc--valid-local-channel-p): Remove `string-search' compat code.
(erc-update-mode-line-buffer): Remove `string-replace' compat code.
(erc-message-english-PART): Remove `string-replace' compat code.
This commit is contained in:
F. Jason Park 2022-07-08 04:58:26 -07:00
parent c238f568cd
commit f6b6614c32
5 changed files with 31 additions and 68 deletions

View file

@ -1011,21 +1011,15 @@ PROCs `process-buffer' is `current-buffer' when this function is called."
(save-match-data
(let* ((tag-list (when (eq (aref string 0) ?@)
(substring string 1
(if (>= emacs-major-version 28)
(string-search " " string)
(string-match " " string)))))
(string-search " " string))))
(msg (make-erc-response :unparsed string :tags (when tag-list
(erc-parse-tags
tag-list))))
(string (if tag-list
(substring string (+ 1 (if (>= emacs-major-version 28)
(string-search " " string)
(string-match " " string))))
(substring string (+ 1 (string-search " " string)))
string))
(posn (if (eq (aref string 0) ?:)
(if (>= emacs-major-version 28)
(string-search " " string)
(string-match " " string))
(string-search " " string)
0)))
(setf (erc-response.sender msg)
@ -1035,9 +1029,7 @@ PROCs `process-buffer' is `current-buffer' when this function is called."
(setf (erc-response.command msg)
(let* ((bposn (string-match "[^ \n]" string posn))
(eposn (if (>= emacs-major-version 28)
(string-search " " string bposn)
(string-match " " string bposn))))
(eposn (string-search " " string bposn)))
(setq posn (and eposn
(string-match "[^ \n]" string eposn)))
(substring string bposn eposn)))
@ -1045,9 +1037,7 @@ PROCs `process-buffer' is `current-buffer' when this function is called."
(while (and posn
(not (eq (aref string posn) ?:)))
(push (let* ((bposn posn)
(eposn (if (>= emacs-major-version 28)
(string-search " " string bposn)
(string-match " " string bposn))))
(eposn (string-search " " string bposn)))
(setq posn (and eposn
(string-match "[^ \n]" string eposn)))
(substring string bposn eposn))
@ -1668,9 +1658,7 @@ Then display the welcome message."
start (- (match-end 0) 3))
(setq start (match-end 0))))
v))
(if (if (>= emacs-major-version 28)
(string-search "," value)
(string-match-p "," value))
(if (string-search "," value)
(split-string value ",")
(list value)))))

View file

@ -25,8 +25,14 @@
;; This mostly defines stuff that cannot be worked around easily.
;; ERC depends on the `compat' library from GNU ELPA for supporting
;; older versions of Emacs. See this discussion for additional info:
;; https://lists.gnu.org/archive/html/emacs-devel/2022-07/msg00512.html
;;; Code:
(require 'compat nil 'noerror)
;;;###autoload(autoload 'erc-define-minor-mode "erc-compat")
(define-obsolete-function-alias 'erc-define-minor-mode
#'define-minor-mode "28.1")

View file

@ -191,9 +191,7 @@ compared with `erc-nick-equal-p' which is IRC case-insensitive."
test (cadr (plist-member elt prop)))
;; if the property exists and is equal, we continue, else, try the
;; next element of the list
(or (and (eq prop :nick) (if (>= emacs-major-version 28)
(string-search "!" val)
(string-match "!" val))
(or (and (eq prop :nick) (string-search "!" val)
test (string-equal test val))
(and (eq prop :nick)
test val
@ -659,13 +657,7 @@ that subcommand."
(define-inline erc-dcc-unquote-filename (filename)
(inline-quote
(if (>= emacs-major-version 28)
(string-replace
"\\\\" "\\"
(string-replace "\\\"" "\"" ,filename))
(replace-regexp-in-string
"\\\\\\\\" "\\"
(replace-regexp-in-string "\\\\\"" "\"" ,filename t t) t t))))
(string-replace "\\\\" "\\" (string-replace "\\\"" "\"" ,filename))))
(defun erc-dcc-handle-ctcp-send (proc query nick login host to)
"This is called if a CTCP DCC SEND subcommand is sent to the client.

View file

@ -139,9 +139,7 @@ This will add a speedbar major display mode."
t))))
(defun erc-speedbar-expand-server (text server indent)
(cond ((if (>= emacs-major-version 28)
(string-search "+" text)
(string-match "\\+" text))
(cond ((string-search "+" text)
(speedbar-change-expand-button-char ?-)
(if (speedbar-with-writable
(save-excursion
@ -150,9 +148,7 @@ This will add a speedbar major display mode."
(speedbar-change-expand-button-char ?-)
(speedbar-change-expand-button-char ??)))
(;; we have to contract this node
(if (>= emacs-major-version 28)
(string-search "-" text)
(string-match "-" text))
(string-search "-" text)
(speedbar-change-expand-button-char ?+)
(speedbar-delete-subblock indent))
(t (error "Ooops... not sure what to do")))
@ -189,9 +185,7 @@ This will add a speedbar major display mode."
"For the line matching TEXT, in CHANNEL, expand or contract a line.
INDENT is the current indentation level."
(cond
((if (>= emacs-major-version 28)
(string-search "+" text)
(string-match "\\+" text))
((string-search "+" text)
(speedbar-change-expand-button-char ?-)
(speedbar-with-writable
(save-excursion
@ -240,9 +234,7 @@ INDENT is the current indentation level."
(speedbar-with-writable
(dolist (entry names)
(erc-speedbar-insert-user entry ?+ (1+ indent))))))))))
((if (>= emacs-major-version 28)
(string-search "-" text)
(string-match "-" text))
((string-search "-" text)
(speedbar-change-expand-button-char ?+)
(speedbar-delete-subblock indent))
(t (error "Ooops... not sure what to do")))
@ -293,9 +285,7 @@ The update is only done when the channel is actually expanded already."
(erc-speedbar-expand-channel "+" buffer 1)))))
(defun erc-speedbar-expand-user (text token indent)
(cond ((if (>= emacs-major-version 28)
(string-search "+" text)
(string-match "\\+" text))
(cond ((string-search "+" text)
(speedbar-change-expand-button-char ?-)
(speedbar-with-writable
(save-excursion
@ -318,9 +308,7 @@ The update is only done when the channel is actually expanded already."
nil nil nil nil
info nil nil nil
(1+ indent)))))))
((if (>= emacs-major-version 28)
(string-search "-" text)
(string-match "-" text))
((string-search "-" text)
(speedbar-change-expand-button-char ?+)
(speedbar-delete-subblock indent))
(t (error "Ooops... not sure what to do")))

View file

@ -13,7 +13,7 @@
;; Michael Olson (mwolson@gnu.org)
;; Kelvin White (kwhite@gnu.org)
;; Version: 5.4.1
;; Package-Requires: ((emacs "27.1"))
;; Package-Requires: ((emacs "27.1") (compat "28.1.2.0"))
;; Keywords: IRC, chat, client, Internet
;; URL: https://www.gnu.org/software/emacs/erc.html
@ -69,6 +69,8 @@
(require 'iso8601)
(eval-when-compile (require 'subr-x))
(require 'erc-compat)
(defconst erc-version "5.4.1"
"This version of ERC.")
@ -3519,9 +3521,7 @@ Without SECRET, consult auth-source, possibly passing SERVER as the
"Non-nil when channel is server-local on a network that allows them."
(and-let* (((eq ?& (aref channel 0)))
(chan-types (erc--get-isupport-entry 'CHANTYPES 'single))
((if (>= emacs-major-version 28)
(string-search "&" chan-types)
(string-match-p "&" chan-types))))))
((string-search "&" chan-types)))))
(defun erc-cmd-JOIN (channel &optional key)
"Join the channel given in CHANNEL, optionally with KEY.
@ -7005,21 +7005,12 @@ shortened server name instead."
(fill-region (point-min) (point-max))
(buffer-string))))
(setq header-line-format
(if (>= emacs-major-version 28)
(string-replace
"%"
"%%"
(if face
(propertize header 'help-echo help-echo
'face face)
(propertize header 'help-echo help-echo)))
(replace-regexp-in-string
"%"
"%%"
(if face
(propertize header 'help-echo help-echo
'face face)
(propertize header 'help-echo help-echo)))))))
(string-replace
"%"
"%%"
(if face
(propertize header 'help-echo help-echo 'face face)
(propertize header 'help-echo help-echo))))))
(t (setq header-line-format
(if face
(propertize header 'face face)
@ -7304,9 +7295,7 @@ functions."
nick user host channel
(if (not (string= reason ""))
(format ": %s"
(if (>= emacs-major-version 28)
(string-replace "%" "%%" reason)
(replace-regexp-in-string "%" "%%" reason)))
(string-replace "%" "%%" reason))
"")))))