From: Tim Vaughan Date: Fri, 2 Jul 2021 18:23:21 +0000 (+0200) Subject: Actions work again. X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?p=lurk.git;a=commitdiff_plain;h=f0cb00a4471cb0c83c6fdddf1b702365c2f33f82 Actions work again. --- diff --git a/lurk.el b/lurk.el index 16de2af..8b307fe 100644 --- a/lurk.el +++ b/lurk.el @@ -310,17 +310,10 @@ portion of the source component of the message, as LURK doesn't use this.") (lurk-render-prompt)) (lurk-display-error "No channels joined."))) -(defun lurk-cycle-contexts-forward () - (interactive) - (lurk-cycle-contexts)) - -(defun lurk-cycle-contexts-reverse () - (interactive) - (lurk-cycle-contexts t)) - ;;; Buffer ;; + (defun lurk-render-prompt () (with-current-buffer "*lurk*" (let ((update-point (= lurk-input-marker (point))) @@ -425,13 +418,16 @@ portion of the source component of the message, as LURK doesn't use this.") (let ((context (if (eq 'channel (lurk-get-context-type to)) to (if (equal to lurk-nick) from to)))) - (lurk-display-string - context - (pcase (lurk-get-context-type to) - ('channel (concat to " <" from "> " text)) - ('nick (concat "[" from " -> " to "] " text)) - (_ - (error "Unsupported context type")))))) + (if (string-match (rx (: "\01ACTION " (group (* (not "\01"))) "\01")) text) + (lurk-display-string context to " * " from " " (match-string 1 text)) + (lurk-display-string + context + (pcase (lurk-get-context-type to) + ('channel (concat to " <" from "> ")) + ('nick (concat "[" from " -> " to "] ")) + (_ + (error "Unsupported context type"))) + text)))) (defun lurk-display-notice (context &rest notices) (lurk-display-string @@ -458,10 +454,11 @@ portion of the source component of the message, as LURK doesn't use this.") (with-current-buffer "*lurk*" (maphash (lambda (this-context _) - (let ((this-context-atom (if this-context (intern this-context) nil))) - (if (equal this-context context) - (remove-from-invisibility-spec this-context-atom) - (add-to-invisibility-spec this-context-atom)))) + (when this-context + (let ((this-context-atom (intern this-context))) + (if (equal this-context context) + (remove-from-invisibility-spec this-context-atom) + (add-to-invisibility-spec this-context-atom))))) lurk-context-facelists) (force-window-update "*lurk*"))) @@ -518,7 +515,6 @@ portion of the source component of the message, as LURK doesn't use this.") "No topic set."))) ("332" - (lurk-display-notice nil "Detected 332: "string) (let* ((params (lurk-msg-params msg)) (channel (elt params 1)) (topic (elt params 2))) @@ -633,10 +629,10 @@ portion of the source component of the message, as LURK doesn't use this.") (lurk-send-msg (lurk-msg nil nil "TOPIC" lurk-current-context new-topic))) ((rx (: "ME " (let action (* not-newline)))) - (lurk-send-msg (lurk-msg nil nil "PRIVMSG" - (list lurk-current-context - (concat "\01ACTION " action "\01")))) - (lurk-display-action lurk-nick action)) + (let ((ctcp-text (concat "\01ACTION " action "\01"))) + (lurk-send-msg (lurk-msg nil nil "PRIVMSG" + (list lurk-current-context ctcp-text))) + (lurk-display-message lurk-nick lurk-current-context ctcp-text))) ((rx (: "VERSION" " " (let nick (+ (not whitespace))))) (lurk-send-msg (lurk-msg nil nil "PRIVMSG" @@ -696,12 +692,38 @@ portion of the source component of the message, as LURK doesn't use this.") (lurk-enter-string line)))) +;;; Command completion +;; + +;;; Interactive functions +;; + +(defun lurk-cycle-contexts-forward () + (interactive) + (lurk-cycle-contexts)) + +(defun lurk-cycle-contexts-reverse () + (interactive) + (lurk-cycle-contexts t)) + +(defvar lurk-zoomed nil + "Keeps track of zoom status.") + +(defun lurk-toggle-zoom () + (interactive) + (if lurk-zoomed + (lurk-zoom-out) + (lurk-zoom-in lurk-current-context)) + (setq lurk-zoomed (not lurk-zoomed))) + ;;; Mode ;; (defvar lurk-mode-map (let ((map (make-sparse-keymap))) (define-key map (kbd "RET") 'lurk-enter) + (define-key map (kbd "") 'lurk-complete) + (define-key map (kbd "C-c C-z") 'lurk-toggle-zoom) (define-key map (kbd "") 'lurk-cycle-contexts-forward) (define-key map (kbd "") 'lurk-cycle-contexts-reverse) map))