Improved nick and command handling.
authorTim Vaughan <plugd@thelambdalab.xyz>
Wed, 30 Jun 2021 15:10:19 +0000 (17:10 +0200)
committerTim Vaughan <plugd@thelambdalab.xyz>
Wed, 30 Jun 2021 15:10:19 +0000 (17:10 +0200)
lurk.el

diff --git a/lurk.el b/lurk.el
index e519f46..c5ba515 100644 (file)
--- a/lurk.el
+++ b/lurk.el
 
 (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.")
 
       (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