:type '(string))
(defcustom murk-networks
- '(("debug" "localhost" 6667 :notls)
+ '(("debug" "localhost" 6697)
("libera" "irc.libera.chat" 6697)
("tilde" "tilde.chat" 6697)
("freenode" "chat.freenode.net" 6697))
ctx
(delete user (murk-context-users ctx))))
+(defun murk-del-server-user (server user)
+ (dolist (ctx murk-contexts)
+ (if (equal (murk-context-server ctx) server)
+ (murk-del-context-user ctx user))))
+
+(defun murk-rename-server-user (server old-nick new-nick)
+ (dolist (ctx murk-contexts)
+ (when (and (equal (murk-context-server ctx) server)
+ (member old-nick (murk-context-users ctx)))
+ (murk-del-context-user ctx old-nick)
+ (murk-add-context-users ctx (list new-nick)))))
+
;;; Buffer
;;
("PONG")
- ("001"
+ ("001" ; RPL_WELCOME
(let* ((params (murk-msg-params msg))
(nick (elt params 0))
(text (string-join (seq-drop params 1) " ")))
" users in " channel)
(murk-display-notice nil "End of " channel " names list."))))
- ("331"
+ ("331" ; RPL_NOTOPIC
(let* ((params (murk-msg-params msg))
(channel (elt params 1))
(ctx (murk-get-context server channel)))
(murk-display-notice ctx "No topic set.")))
- ("332"
+ ("332" ; RPL_TOPIC
(let* ((params (murk-msg-params msg))
(channel (elt params 1))
(topic (elt params 2))
(murk-render-prompt)))
("PART"
- (let* ((channel (car (lurk-msg-params msg)))
- (nick (lurk-msg-src msg))
+ (let* ((channel (car (murk-msg-params msg)))
+ (nick (murk-msg-src msg))
(ctx (murk-get-context server channel)))
(murk-del-context-user ctx nick)
(if murk-show-joins
(murk-display-notice ctx nick " left channel " channel
" on " server))))
+ ((and "NICK"
+ (guard (equal (murk-connection-nick server)
+ (murk-msg-src msg))))
+ (let ((new-nick (car (murk-msg-params msg))))
+ (murk-set-connection-nick server new-nick)
+ (murk-display-notice nil "Nick set to " new-nick " on " server)))
+
+ ("NICK"
+ (let ((old-nick (murk-msg-src msg))
+ (new-nick (car (murk-msg-params msg))))
+ (murk-display-notice nil old-nick " is now known as " new-nick
+ " on " server)
+ (murk-rename-server-user server old-nick new-nick)))
+
+ ("TOPIC"
+ (let ((channel (car (murk-msg-params msg)))
+ (nick (murk-msg-src msg))
+ (topic (cadr (murk-msg-params msg))))
+ (murk-display-notice (murk-get-context server channel)
+ nick " set the topic: " topic)))
+
("QUIT"
(let ((nick (murk-msg-src msg))
(reason (mapconcat 'identity (murk-msg-params msg) " ")))
- (murk-del-user nick)
+ (murk-del-server-user server nick)
(if murk-show-joins
(murk-display-notice nil nick " quit: " reason))))
("JOIN" "Join one or more channels." murk-command-join)
("PART" "Leave channel." murk-command-part murk-context-completions)
("NICK" "Change nick." murk-command-nick)
+ ("LIST" "Display details of one or more channels." murk-command-list)
+ ("TOPIC" "Set/query topic for current channel." murk-command-topic)
+ ("USERS" "List nicks of users in current context." murk-command-users)
("MSG" "Send private message to user." murk-command-msg murk-nick-completions)
("CLEAR" "Clear buffer text." murk-command-clear murk-context-completions)
("HELP" "Display help on client commands." murk-command-help murk-help-completions))
(murk-display-notice nil "Joins/parts will now be "
(if murk-show-joins "shown" "hidden") "."))
-(defun murk-command-clear (params)
- (if (not params)
- (murk-clear-buffer)
- (dolist (context params)
- (murk-clear-context context))))
-
(defun murk-command-connect (params)
(if params
(let ((network (car params)))
(murk-send-msg server (murk-msg nil nil "PART" channel))
(murk-display-error "No current channel to leave"))))
+(defun murk-command-nick (params)
+ (if params
+ (let ((new-nick (string-join params " "))
+ (ctx (murk-current-context)))
+ (if ctx
+ (murk-send-msg (murk-context-server ctx)
+ (murk-msg nil nil "NICK" new-nick))
+ (murk-display-error "No current connection")))
+ (murk-display-notice nil "Usage: /nick <new-nick>")))
+
+(defun murk-command-list (params)
+ (let ((ctx (murk-current-context)))
+ (if ctx
+ (if (not params)
+ (murk-display-notice nil "This command can generate lots of output. Use `/LIST -yes' if you really want this, or `/LIST <channel_regexp>' to reduce the output.")
+ (let ((server (murk-context-server ctx)))
+ (if (equal (upcase (car params)) "-YES")
+ (murk-send-msg server (murk-msg nil nil "LIST"))
+ (murk-send-msg server (murk-msg nil nil "LIST"
+ (car params))))))
+ (murk-display-error "No current connection"))))
+
+(defun murk-command-topic (params)
+ (let ((ctx (murk-current-context)))
+ (if (and ctx (not (murk-server-context-p ctx)))
+ (let ((server (murk-context-server ctx))
+ (channel (murk-context-channel ctx)))
+ (if params
+ (murk-send-msg server
+ (murk-msg nil nil "TOPIC" channel
+ (string-join params " ")))
+ (murk-send-msg server
+ (murk-msg nil nil "TOPIC" channel))))
+ (murk-display-notice nil "No current channel."))))
+
(defun murk-command-msg (params)
(let ((server (murk-context-server (murk-current-context))))
(if (and params (>= (length params) 2))
to text))
(murk-display-notice nil "Usage: /msg <nick> <message>"))))
+(defun murk-command-users (_params)
+ (let ((ctx (murk-current-context)))
+ (if (and ctx (not (murk-server-context-p ctx)))
+ (let ((channel (murk-context-channel ctx))
+ (server (murk-context-server ctx))
+ (users (murk-context-users ctx)))
+ (murk-display-notice ctx "Users in " channel " on " server ":")
+ (murk-display-notice ctx (string-join users " ")))
+ (murk-display-notice nil "No current channel."))))
+
+
;;; Command entering
;;