From d0bcb510b018ea2948a1557d7dc8a68537c7f7fa Mon Sep 17 00:00:00 2001 From: Tim Vaughan Date: Wed, 30 Jun 2021 17:10:19 +0200 Subject: [PATCH] Improved nick and command handling. --- lurk.el | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/lurk.el b/lurk.el index e519f46..c5ba515 100644 --- a/lurk.el +++ b/lurk.el @@ -40,14 +40,15 @@ (defcustom lurk-nick "plugd" "Default nick.") -(defcustom lurk-full-name "plugd" - "Default full name.") -(defcustom lurk-user-name "plugd" - "Default user name.") + +(defcustom lurk-default-quit-msg "Bye" + "Default quit message when none supplied.") (defcustom lurk-networks '(("libera" "irc.libera.chat" 6697) ("freenode" "chat.freenode.net" 6697) + ("tilde" "tilde.chat" 6697) + ("mbr" "mbrserver.com" 6667 :notls) ("local" "localhost" 6697)) "IRC networks.") @@ -161,10 +162,13 @@ (clrhash lurk-contexts) (setq lurk-current-context nil) (lurk-start-process network) - (lurk-send-msg (lurk-msg nil nil "USER" lurk-user-name 0 "*" lurk-full-name)) + (lurk-send-msg (lurk-msg nil nil "USER" lurk-nick 0 "*" lurk-nick)) (lurk-send-msg (lurk-msg nil nil "NICK" lurk-nick)) (setq lurk-ping-timer (run-with-timer lurk-ping-period nil #'lurk-ping-function))))) +(defun lurk-connected-p () + (let ((proc (get-process "lurk"))) + (and proc (eq (process-status proc) 'open)))) (defun lurk-send-msg (msg) (let ((proc (get-process "lurk"))) @@ -452,6 +456,13 @@ portion of the source component of the message, as LURK doesn't use this.") ("PONG") ;; (lurk-display-notice nil "ping-pong (client initiated)")) + ("001" + (let* ((params (lurk-msg-params msg)) + (nick (elt params 0)) + (text (string-join (seq-drop params 1) " "))) + (setq lurk-nick nick) + (lurk-display-notice nil text))) + ("353" ; NAMEREPLY (let* ((params (lurk-msg-params msg)) (channel (elt params 2)) @@ -573,7 +584,7 @@ portion of the source component of the message, as LURK doesn't use this.") (concat "\01ACTION " action "\01")))) (lurk-display-action lurk-nick action)) - ((rx (: "VERSION" " " (let nick (* (not whitespace))))) + ((rx (: "VERSION" " " (let nick (+ (not whitespace))))) (lurk-send-msg (lurk-msg nil nil "PRIVMSG" (list nick "\01VERSION\01"))) (lurk-display-notice nil "CTCP version request sent to " nick)) @@ -585,6 +596,19 @@ portion of the source component of the message, as LURK doesn't use this.") lurk-current-context))) (lurk-display-error "No current channel to leave."))) + ((rx "QUIT" (opt (: " " (let quit-msg (* not-newline))))) + (lurk-send-msg (lurk-msg nil nil "QUIT" + (or quit-msg lurk-default-quit-msg)))) + + ((rx (: "NICK" (* whitespace) string-end)) + (lurk-display-notice nil "Current nick: " lurk-nick)) + + ((rx (: "NICK" (+ whitespace) (let nick (+ (not whitespace))))) + (if (lurk-connected-p) + (lurk-send-msg (lurk-msg nil nil "NICK" nick)) + (setq lurk-nick nick) + (lurk-display-notice nil "Set default nick to '" nick "'"))) + ((rx "MSG " (let to (* (not whitespace))) " " @@ -612,10 +636,10 @@ portion of the source component of the message, as LURK doesn't use this.") "Enter current contents of line after prompt." (interactive) (with-current-buffer "*lurk*" - (lurk-enter-string - (buffer-substring lurk-input-marker (point-max))) - (let ((inhibit-read-only t)) - (delete-region lurk-input-marker (point-max))))) + (let ((line (buffer-substring lurk-input-marker (point-max)))) + (let ((inhibit-read-only t)) + (delete-region lurk-input-marker (point-max))) + (lurk-enter-string line)))) ;;; Mode -- 2.20.1