:group 'network)
(defcustom murk-default-nick "plugd"
- "Default nick.")
+ "Default nick."
+ :type '(string))
(defcustom murk-default-quit-msg "Bye"
- "Default quit message when none supplied.")
+ "Default quit message when none supplied."
+ :type '(string))
(defcustom murk-networks
'(("debug" "localhost" 6667 :notls)
("libera" "irc.libera.chat" 6697)
("tilde" "tilde.chat" 6697))
- "IRC networks.")
+ "IRC networks."
+ :type '(alist :key-type string))
(defcustom murk-display-header t
- "If non-nil, use buffer header to display information on current host and channel.")
+ "If non-nil, use buffer header to display current host and channel."
+ :type '(boolean))
;;; Faces
(setq murk-connection-table (assoc-delete-all server murk-connection-table)))
(defun murk-make-server-filter (server)
- (lambda (proc string)
+ (lambda (_proc string)
(dolist (line (split-string (concat (murk-connection-response server) string)
"\n"))
(if (string-suffix-p "\r" line)
(murk-set-connection-response server line)))))
(defun murk-make-server-sentinel (server)
- (lambda (proc string)
+ (lambda (_proc string)
(unless (equal "open" (string-trim string))
(murk-display-error "Disconnected from server.")
(murk-connection-remove server)
(defun murk-connect (server)
(if (assoc server murk-connection-table)
- (murk-display-error "Already connected to this network.")
+ (murk-display-error "Already connected to this network")
(if (not (assoc server murk-networks))
(murk-display-error "Network '" server "' is unknown.")
(let ((proc (murk-start-process server)))
(let ((proc (murk-connection-process server)))
(if (and proc (eq (process-status proc) 'open))
(process-send-string proc (concat (murk-msg->string msg) "\r\n"))
- (murk-display-error "No server connection established."))))
+ (murk-display-error "No server connection established"))))
;;; Server messages
(append l r))
nil)))
(apply #'murk-msg (append (list tags src cmd) params)))
- (error "Failed to parse string " string)))
+ (error "Failed to parse string %s" string)))
(defun murk-msg->string (msg)
(let ((tags (murk-msg-tags msg))
(equal (seq-take ctx 2) test-ctx))
murk-contexts))))
+(defun murk-cycle-contexts (&optional reverse)
+ (setq murk-contexts
+ (if reverse
+ (let ((nminus1 (- (length murk-contexts) 1)))
+ (cons
+ (elt murk-contexts nminus1)
+ (seq-take murk-contexts nminus1)))
+ (append (cdr murk-contexts) (list (car murk-contexts))))))
+
;;; Buffer
;;
+(defvar murk-prompt-marker nil
+ "Marker for prompt position in murk buffer.")
+
+(defvar murk-input-marker nil
+ "Marker for prompt position in murk buffer.")
+
(defun murk-render-prompt ()
(with-current-buffer "*murk*"
(let ((update-point (= murk-input-marker (point)))
(if (car v)
(set-window-point (cadr v) murk-input-marker))))))
-(defvar murk-prompt-marker nil
- "Marker for prompt position in murk buffer.")
-
-(defvar murk-input-marker nil
- "Marker for prompt position in murk buffer.")
-
(defun murk-setup-header ()
(with-current-buffer "*murk*"
(setq-local header-line-format
(with-selected-window window
(recenter -1))))))
-
-
(defconst murk-url-regex
(rx (:
(group (+ alpha))
from " on " server))
((rx (let ping (: "\01PING " (* (not "\01")) "\01")))
- (murk-send-msg server (lurk-msg nil nil "NOTICE" (list from ping)))
+ (murk-send-msg server (murk-msg nil nil "NOTICE" (list from ping)))
(murk-display-notice nil "CTCP ping received from " from " on " server))
("\01USERINFO\01"
(murk-connect network))
(murk-display-notice nil "Usage: /connect <network>")))
-(defun murk-command-networks (params)
+(defun murk-command-networks (_params)
(murk-display-notice nil "Currently-known networks:")
(dolist (row murk-networks)
- (seq-let (network server port &rest others) row
+ (seq-let (network server port &rest _others) row
(murk-display-notice nil "\t" network
" [" server
" " (number-to-string port) "]")))
(defun murk-command-quit (params)
(let ((ctx (murk-current-context)))
(if (not ctx)
- (murk-display-error "No current context.")
+ (murk-display-error "No current context")
(let ((quit-msg (if params (string-join params " ") murk-default-quit-msg)))
(murk-send-msg
(murk-context-server ctx)
(murk-context-name (murk-current-context)))))
(if channel
(murk-send-msg server (murk-msg nil nil "PART" channel))
- (murk-display-error "No current channel to leave."))))
+ (murk-display-error "No current channel to leave"))))
(defun murk-command-msg (params)
(let ((server (murk-context-server (murk-current-context))))
(if (and params (>= (length params) 2))
(let ((to (car params))
(text (string-join (cdr params) " ")))
- (murk-send-msg server (lurk-msg nil nil "PRIVMSG" to text))
+ (murk-send-msg server (murk-msg nil nil "PRIVMSG" to text))
(murk-display-message server
(murk-connection-nick server)
to text))
(murk-context-server (murk-current-context))
(murk-msg nil nil (upcase cmd-str) params)))))
(_
- (murk-display-error "Badly formed command.")))
+ (murk-display-error "Badly formed command")))
(unless (string-empty-p string)
(if (murk-current-context)
(let ((server (murk-context-server (murk-current-context))))
(murk-context-name (murk-current-context))
string))
(murk-display-message server
- murk-nick
+ (murk-connection-nick server)
(murk-context->string (murk-current-context))
string))
- (murk-display-error "No current context.")))))
+ (murk-display-error "No current context")))))
;;; Command history
(re-search-backward " " murk-input-marker t)))
(start (if space-idx (+ 1 space-idx) murk-input-marker)))
(unless (string-prefix-p "/" (buffer-substring start end))
- (let* ((users (murk-get-context-users murk-current-context))
+ (let* ((users (murk-get-context-users (murk-current-context)))
(users-no@ (mapcar
(lambda (u) (car (split-string u "@" t)))
users)))
(define-key map (kbd "TAB") 'murk-complete-input)
(define-key map (kbd "<C-up>") 'murk-history-prev)
(define-key map (kbd "<C-down>") 'murk-history-next)
+ (define-key map (kbd "<C-tab>") 'murk-cycle-contexts-forward)
+ (define-key map (kbd "<C-S-tab>") 'murk-cycle-contexts-reverse)
(when (fboundp 'evil-define-key*)
(evil-define-key* 'motion map
(kbd "TAB") 'murk-complete-input))