From 32b1f35ada7006fabf9a7c8d7302769662250a0e Mon Sep 17 00:00:00 2001 From: Philip Kaludercic Date: Fri, 4 Jun 2021 16:35:05 +0200 Subject: [PATCH 07/11] Define rcirc-mode using rcirc-initialize --- lisp/net/rcirc.el | 56 ++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el index 040eb60538..92d7b383d8 100644 --- a/lisp/net/rcirc.el +++ b/lisp/net/rcirc.el @@ -774,7 +774,7 @@ rcirc-process-list (mapc (lambda (p) (when (buffer-live-p (process-buffer p)) (with-rcirc-process-buffer p - (when (eq major-mode 'rcirc-mode) + (when (derived-mode-p 'rcirc-mode) (setq ps (cons p ps)))))) (process-list)) ps)) @@ -1128,17 +1128,22 @@ rcirc-current-line "The current number of responses printed in this channel. This number is independent of the number of lines in the buffer.") -(defun rcirc-mode (process target) - ;; FIXME: Use define-derived-mode. - "Major mode for IRC channel buffers. +(defun rcirc-initialize (process target) + "Initialize current buffer for IRC. +PROCESS is the process object that the buffer uses to +communicate. TARGET designates who the buffer is used to +communicate to (channel, username)." + (let ((rcirc-process process) + (rcirc-target target)) + (rcirc-mode))) + +(define-derived-mode rcirc-mode text-mode "rcirc" + "Major mode for IRC channel buffers." + :interactive nil + (cl-assert rcirc-process nil "The variable `rcirc-process' must by bound and non-nil") + (cl-assert rcirc-target nil "The variable `rcirc-target' must by bound and non-nil") -\\{rcirc-mode-map}" - (kill-all-local-variables) - (use-local-map rcirc-mode-map) - (setq mode-name "rcirc") - (setq major-mode 'rcirc-mode) (setq mode-line-process nil) - (setq-local rcirc-input-ring ;; If rcirc-input-ring is already a ring with desired ;; size do not re-initialize. @@ -1147,8 +1152,8 @@ rcirc-mode rcirc-input-ring-size)) rcirc-input-ring (make-ring rcirc-input-ring-size))) - (setq-local rcirc-server-buffer (process-buffer process)) - (setq-local rcirc-target target) + (setq-local rcirc-server-buffer (process-buffer rcirc-process)) + (setq-local rcirc-target rcirc-target) (setq-local rcirc-topic nil) (setq-local rcirc-last-post-time (current-time)) (setq-local fill-paragraph-function 'rcirc-fill-paragraph) @@ -1171,8 +1176,8 @@ rcirc-mode (dolist (i rcirc-coding-system-alist) (let ((chan (if (consp (car i)) (caar i) (car i))) (serv (if (consp (car i)) (cdar i) ""))) - (when (and (string-match chan (or target "")) - (string-match serv (rcirc-server-name process))) + (when (and (string-match chan (or rcirc-target "")) + (string-match serv (rcirc-server-name rcirc-process))) (setq-local rcirc-decode-coding-system (if (consp (cdr i)) (cadr i) (cdr i))) (setq-local rcirc-encode-coding-system @@ -1192,17 +1197,17 @@ rcirc-mode (add-hook 'kill-buffer-hook 'rcirc-kill-buffer-hook nil t) ;; add to buffer list, and update buffer abbrevs - (when target ; skip server buffer + (when rcirc-target ; skip server buffer (let ((buffer (current-buffer))) - (with-rcirc-process-buffer process - (setq rcirc-buffer-alist (cons (cons target buffer) + (with-rcirc-process-buffer rcirc-process + (setq rcirc-buffer-alist (cons (cons rcirc-target buffer) rcirc-buffer-alist)))) (rcirc-update-short-buffer-names)) (add-hook 'completion-at-point-functions - 'rcirc-completion-at-point nil 'local) + 'rcirc-completion-at-point nil 'local)) - (run-mode-hooks 'rcirc-mode-hook)) +(set-advertised-calling-convention 'rcirc-mode '() "28.1") (defun rcirc-update-prompt (&optional all) "Reset the prompt string in the current buffer. @@ -1269,7 +1274,7 @@ rcirc-kill-buffer-hook If `rcirc-kill-channel-buffers' is non-nil and the killed buffer is a server buffer, kills all of the channel buffers associated with it." - (when (eq major-mode 'rcirc-mode) + (when (derived-mode-p 'rcirc-mode) (when (and rcirc-log-flag rcirc-log-directory) (rcirc-log-write)) @@ -1337,7 +1342,7 @@ rcirc-get-buffer-create (let ((new-buffer (get-buffer-create (rcirc-generate-new-buffer-name process target)))) (with-current-buffer new-buffer - (rcirc-mode process target) + (rcirc-initialize process target) (rcirc-put-nick-channel process (rcirc-nick process) target rcirc-current-line)) new-buffer))))) @@ -1486,7 +1491,7 @@ rcirc-any-buffer (let ((buffer (window-buffer))) (if (and buffer (with-current-buffer buffer - (and (eq major-mode 'rcirc-mode) + (and (derived-mode-p 'rcirc-mode) (eq (rcirc-buffer-process) process)))) buffer (process-buffer process))))) @@ -1750,7 +1755,7 @@ rcirc-print (let ((window (get-buffer-window))) (when window (with-selected-window window - (when (eq major-mode 'rcirc-mode) + (when (derived-mode-p 'rcirc-mode) (when (<= (- (window-height) (count-screen-lines (window-point) (window-start)) @@ -2034,7 +2039,8 @@ rcirc-bury-buffers "Bury all RCIRC buffers." (interactive) (dolist (buf (buffer-list)) - (when (eq 'rcirc-mode (with-current-buffer buf major-mode)) + (when (provided-mode-derived-p (buffer-local-value buf 'major-mode) + 'rcirc-mode) (bury-buffer buf) ; buffers not shown (quit-windows-on buf)))) ; buffers shown in a window @@ -2158,7 +2164,7 @@ rcirc-visible-buffers (let (acc) (walk-windows (lambda (w) (with-current-buffer (window-buffer w) - (when (eq major-mode 'rcirc-mode) + (when (derived-mode-p 'rcirc-mode) (push (current-buffer) acc))))) acc)) -- 2.30.2