diff options
Diffstat (limited to 'lisp/erc')
-rw-r--r-- | lisp/erc/erc-backend.el | 3 | ||||
-rw-r--r-- | lisp/erc/erc-compat.el | 163 | ||||
-rw-r--r-- | lisp/erc/erc-dcc.el | 8 | ||||
-rw-r--r-- | lisp/erc/erc-fill.el | 2 | ||||
-rw-r--r-- | lisp/erc/erc-goodies.el | 3 | ||||
-rw-r--r-- | lisp/erc/erc-log.el | 2 | ||||
-rw-r--r-- | lisp/erc/erc-match.el | 67 | ||||
-rw-r--r-- | lisp/erc/erc-notify.el | 2 | ||||
-rw-r--r-- | lisp/erc/erc-pcomplete.el | 1 | ||||
-rw-r--r-- | lisp/erc/erc-stamp.el | 1 | ||||
-rw-r--r-- | lisp/erc/erc-track.el | 12 | ||||
-rw-r--r-- | lisp/erc/erc.el | 27 |
12 files changed, 69 insertions, 222 deletions
diff --git a/lisp/erc/erc-backend.el b/lisp/erc/erc-backend.el index 4f3d85ba3c8..1cf0bb49217 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 @@ value of `erc-server-coding-system'." (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-compat.el b/lisp/erc/erc-compat.el deleted file mode 100644 index d71221b2674..00000000000 --- a/lisp/erc/erc-compat.el +++ /dev/null @@ -1,163 +0,0 @@ -;;; erc-compat.el --- ERC compatibility code for XEmacs - -;; Copyright (C) 2002-2003, 2005-2020 Free Software Foundation, Inc. - -;; Author: Alex Schroeder <alex@gnu.org> -;; Maintainer: Amin Bandali <bandali@gnu.org> -;; URL: https://www.emacswiki.org/emacs/ERC - -;; This file is part of GNU Emacs. - -;; GNU Emacs is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; GNU Emacs is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. - -;;; Commentary: - -;; This mostly defines stuff that cannot be worked around easily. - -;;; Code: - -(require 'format-spec) - -;;;###autoload(autoload 'erc-define-minor-mode "erc-compat") -(defalias 'erc-define-minor-mode 'define-minor-mode) -(put 'erc-define-minor-mode 'edebug-form-spec 'define-minor-mode) - -(defun erc-decode-coding-string (s coding-system) - "Decode S using CODING-SYSTEM." - (decode-coding-string s coding-system t)) - -(defun erc-encode-coding-string (s coding-system) - "Encode S using CODING-SYSTEM. -Return the same string, if the encoding operation is trivial. -See `erc-encoding-coding-alist'." - (encode-coding-string s coding-system t)) - -(define-obsolete-function-alias 'erc-propertize #'propertize "28.1") -(define-obsolete-function-alias 'erc-view-mode-enter #'view-mode-enter "28.1") -(autoload 'help-function-arglist "help-fns") -(define-obsolete-function-alias 'erc-function-arglist #'help-function-arglist "28.1") -(define-obsolete-function-alias 'erc-delete-dups #'delete-dups "28.1") -(define-obsolete-function-alias 'erc-replace-regexp-in-string #'replace-regexp-in-string "28.1") - -(defun erc-set-write-file-functions (new-val) - (set (make-local-variable 'write-file-functions) new-val)) - -(defvar erc-emacs-build-time - (if (or (stringp emacs-build-time) (not emacs-build-time)) - emacs-build-time - (format-time-string "%Y-%m-%d" emacs-build-time)) - "Time at which Emacs was dumped out, or nil if not available.") - -;; Emacs 21 and XEmacs do not have user-emacs-directory, but XEmacs -;; has user-init-directory. -(defvar erc-user-emacs-directory - (cond ((boundp 'user-emacs-directory) - user-emacs-directory) - ((boundp 'user-init-directory) - user-init-directory) - (t "~/.emacs.d/")) - "Directory beneath which additional per-user Emacs-specific files -are placed. -Note that this should end with a directory separator.") - -(defun erc-replace-match-subexpression-in-string - (newtext string match subexp start &optional fixedcase literal) - "Replace the subexpression SUBEXP of the last match in STRING with NEWTEXT. -MATCH is the text which matched the subexpression (see `match-string'). -START is the beginning position of the last match (see `match-beginning'). -See `replace-match' for explanations of FIXEDCASE and LITERAL." - (replace-match newtext fixedcase literal string subexp)) - -(define-obsolete-function-alias 'erc-with-selected-window - #'with-selected-window "28.1") -(define-obsolete-function-alias 'erc-cancel-timer #'cancel-timer "28.1") -(define-obsolete-function-alias 'erc-make-obsolete #'make-obsolete "28.1") -(define-obsolete-function-alias 'erc-make-obsolete-variable - #'make-obsolete-variable "28.1") - -;; Provide a simpler replacement for `member-if' -(defun erc-member-if (predicate list) - "Find the first item satisfying PREDICATE in LIST. -Return the sublist of LIST whose car matches." - (let ((ptr list)) - (catch 'found - (while ptr - (when (funcall predicate (car ptr)) - (throw 'found ptr)) - (setq ptr (cdr ptr)))))) - -;; Provide a simpler replacement for `delete-if' -(defun erc-delete-if (predicate seq) - "Remove all items satisfying PREDICATE in SEQ. -This is a destructive function: it reuses the storage of SEQ -whenever possible." - ;; remove from car - (while (when (funcall predicate (car seq)) - (setq seq (cdr seq)))) - ;; remove from cdr - (let ((ptr seq) - (next (cdr seq))) - (while next - (when (funcall predicate (car next)) - (setcdr ptr (if (consp next) - (cdr next) - nil))) - (setq ptr (cdr ptr)) - (setq next (cdr ptr)))) - seq) - -;; Provide a simpler replacement for `remove-if-not' -(defun erc-remove-if-not (predicate seq) - "Remove all items not satisfying PREDICATE in SEQ. -This is a non-destructive function; it makes a copy of SEQ to -avoid corrupting the original SEQ." - (let (newseq) - (dolist (el seq) - (when (funcall predicate el) - (setq newseq (cons el newseq)))) - (nreverse newseq))) - -;; Copied from cl-extra.el -(defun erc-subseq (seq start &optional end) - "Return the subsequence of SEQ from START to END. -If END is omitted, it defaults to the length of the sequence. -If START or END is negative, it counts from the end." - (if (stringp seq) (substring seq start end) - (let (len) - (and end (< end 0) (setq end (+ end (setq len (length seq))))) - (if (< start 0) (setq start (+ start (or len (setq len (length seq)))))) - (cond ((listp seq) - (if (> start 0) (setq seq (nthcdr start seq))) - (if end - (let ((res nil)) - (while (>= (setq end (1- end)) start) - (push (pop seq) res)) - (nreverse res)) - (copy-sequence seq))) - (t - (or end (setq end (or len (length seq)))) - (let ((res (make-vector (max (- end start) 0) nil)) - (i 0)) - (while (< start end) - (aset res i (aref seq start)) - (setq i (1+ i) start (1+ start))) - res)))))) - -(provide 'erc-compat) - -;;; erc-compat.el ends here -;; -;; Local Variables: -;; generated-autoload-file: "erc-loaddefs.el" -;; End: diff --git a/lisp/erc/erc-dcc.el b/lisp/erc/erc-dcc.el index bf98eb818f3..477f148197b 100644 --- a/lisp/erc/erc-dcc.el +++ b/lisp/erc/erc-dcc.el @@ -419,7 +419,7 @@ where FOO is one of CLOSE, GET, SEND, LIST, CHAT, etc." (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 @@ where FOO is one of CLOSE, GET, SEND, LIST, CHAT, etc." (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 @@ where FOO is one of CLOSE, GET, SEND, LIST, CHAT, etc." (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 @@ where FOO is one of CLOSE, GET, SEND, LIST, CHAT, etc." (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 39a8be5e0cf..d09caf7aa12 100644 --- a/lisp/erc/erc-fill.el +++ b/lisp/erc/erc-fill.el @@ -38,7 +38,7 @@ :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 ff7a77f1265..a475f0a1770 100644 --- a/lisp/erc/erc-goodies.el +++ b/lisp/erc/erc-goodies.el @@ -399,8 +399,7 @@ See `erc-interpret-controls-p' and `erc-interpret-mirc-color' for options." (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 e2c066da9b1..2166123e674 100644 --- a/lisp/erc/erc-log.el +++ b/lisp/erc/erc-log.el @@ -267,7 +267,7 @@ The current buffer is given by BUFFER." (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-match.el b/lisp/erc/erc-match.el index 6e87a183fc1..b3145674f29 100644 --- a/lisp/erc/erc-match.el +++ b/lisp/erc/erc-match.el @@ -94,7 +94,9 @@ The following values are allowed: `nick-or-keyword' - highlight the nick of the user who typed your nickname, or all instances of the current nickname if there was no sending user - `all' - highlight the entire message where current nickname occurs + `message' - highlight the entire message where current nickname occurs + `all' - highlight the entire message (including the nick) where + current nickname occurs Any other value disables highlighting of current nickname altogether." :group 'erc-match @@ -102,6 +104,7 @@ Any other value disables highlighting of current nickname altogether." (const nick) (const keyword) (const nick-or-keyword) + (const message) (const all))) (defcustom erc-pal-highlight-type 'nick @@ -110,14 +113,17 @@ See `erc-pals'. The following values are allowed: - nil - do not highlight the message at all - `nick' - highlight pal's nickname only - `all' - highlight the entire message from pal + nil - do not highlight the message at all + `nick' - highlight pal's nickname only + `message' - highlight the entire message from pal + `all' - highlight the entire message (including the nick) + from pal Any other value disables pal highlighting altogether." :group 'erc-match :type '(choice (const nil) (const nick) + (const message) (const all))) (defcustom erc-fool-highlight-type 'nick @@ -126,14 +132,17 @@ See `erc-fools'. The following values are allowed: - nil - do not highlight the message at all - `nick' - highlight fool's nickname only - `all' - highlight the entire message from fool + nil - do not highlight the message at all + `nick' - highlight fool's nickname only + `message' - highlight the entire message from fool + `all' - highlight the entire message (including the nick) + from fool Any other value disables fool highlighting altogether." :group 'erc-match :type '(choice (const nil) (const nick) + (const message) (const all))) (defcustom erc-keyword-highlight-type 'keyword @@ -143,12 +152,15 @@ See variable `erc-keywords'. The following values are allowed: `keyword' - highlight keyword only - `all' - highlight the entire message containing keyword + `message' - highlight the entire message containing keyword + `all' - highlight the entire message (including the nick) + containing keyword Any other value disables keyword highlighting altogether." :group 'erc-match :type '(choice (const nil) (const keyword) + (const message) (const all))) (defcustom erc-dangerous-host-highlight-type 'nick @@ -157,13 +169,16 @@ See `erc-dangerous-hosts'. The following values are allowed: - `nick' - highlight nick from dangerous-host only - `all' - highlight the entire message from dangerous-host + `nick' - highlight nick from dangerous-host only + `message' - highlight the entire message from dangerous-host + `all' - highlight the entire message (including the nick) + from dangerous-host Any other value disables dangerous-host highlighting altogether." :group 'erc-match :type '(choice (const nil) (const nick) + (const message) (const all))) @@ -449,19 +464,18 @@ Use this defun with `erc-insert-modify-hook'." (match-beginning 0))) (nick-end (when nick-beg (match-end 0))) - (message (buffer-substring - (if (and nick-end - (<= (+ 2 nick-end) (point-max))) - ;; Message starts 2 characters after the nick - ;; except for CTCP ACTION messages. Nick - ;; surrounded by angle brackets only in normal - ;; messages. - (+ nick-end - (if (eq ?> (char-after nick-end)) - 2 - 1)) - (point-min)) - (point-max)))) + (message-beg (if (and nick-end + (<= (+ 2 nick-end) (point-max))) + ;; Message starts 2 characters after the + ;; nick except for CTCP ACTION messages. + ;; Nick surrounded by angle brackets only in + ;; normal messages. + (+ nick-end + (if (eq ?> (char-after nick-end)) + 2 + 1)) + (point-min))) + (message (buffer-substring message-beg (point-max)))) (when (and vector (not (and erc-match-exclude-server-buffer (erc-server-buffer-p)))) @@ -498,7 +512,12 @@ Use this defun with `erc-insert-modify-hook'." (while (re-search-forward match-regex nil t) (erc-put-text-property (match-beginning 0) (match-end 0) 'font-lock-face match-face)))) - ;; Highlight the whole message + ;; Highlight the whole message (not including the nick) + ((eq match-htype 'message) + (erc-put-text-property + message-beg (point-max) + 'font-lock-face match-face (current-buffer))) + ;; Highlight the whole message (including the nick) ((eq match-htype 'all) (erc-put-text-property (point-min) (point-max) diff --git a/lisp/erc/erc-notify.el b/lisp/erc/erc-notify.el index 1b092c8a6a9..144a981f832 100644 --- a/lisp/erc/erc-notify.el +++ b/lisp/erc/erc-notify.el @@ -181,7 +181,7 @@ nick from `erc-last-ison' to prevent any further notifications." (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 7643fa85b96..f8b7e13be02 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 cbab2f9da2b..08970f2d70e 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 41d8fc1a98f..3398c8b9d0c 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: @@ -329,9 +328,8 @@ important." (defun erc-track-remove-from-mode-line () "Remove `erc-track-modified-channels' from the mode-line." - (when (boundp 'mode-line-modes) - (setq mode-line-modes - (remove '(t erc-modified-channels-object) mode-line-modes))) + (setq mode-line-modes + (remove '(t erc-modified-channels-object) mode-line-modes)) (when (consp global-mode-string) (setq global-mode-string (delq 'erc-modified-channels-object global-mode-string)))) @@ -341,12 +339,10 @@ important." See `erc-track-position-in-mode-line' for possible values." ;; CVS Emacs has a new format string, and global-mode-string ;; is very far to the right. - (cond ((and (eq position 'before-modes) - (boundp 'mode-line-modes)) + (cond ((eq position 'before-modes) (add-to-list 'mode-line-modes '(t erc-modified-channels-object))) - ((and (eq position 'after-modes) - (boundp 'mode-line-modes)) + ((eq position 'after-modes) (add-to-list 'mode-line-modes '(t erc-modified-channels-object) t)) ((eq position t) diff --git a/lisp/erc/erc.el b/lisp/erc/erc.el index 41d7516fbb4..8712113790b 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 @@ See `erc-server-flood-margin' for other flood-related parameters.") ;; 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 @@ Example: (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, @@ -1489,8 +1489,7 @@ Defaults to the server buffer." (define-derived-mode erc-mode fundamental-mode "ERC" "Major mode for Emacs IRC." (setq local-abbrev-table erc-mode-abbrev-table) - (when (boundp 'next-line-add-newlines) - (set (make-local-variable 'next-line-add-newlines) nil)) + (set (make-local-variable 'next-line-add-newlines) nil) (setq line-move-ignore-invisible t) (set (make-local-variable 'paragraph-separate) (concat "\C-l\\|\\(^" (regexp-quote (erc-prompt)) "\\)")) @@ -2688,7 +2687,7 @@ displayed hostnames." 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 +3724,9 @@ the message given by REASON." 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 +4573,7 @@ See also: `erc-echo-notice-in-user-buffers', ((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 +4594,7 @@ See also: `erc-echo-notice-in-user-buffers', "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 +6183,7 @@ non-nil value is found. 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)) |