X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;ds=sidebyside;f=lurk.el;h=48b061125d16a7245dcc528c893f97b9f8e03687;hb=a65cb434a57b716eceb9f85dd5eda20a60dc3d7a;hp=16de2af052dfcebd8dc94a295110d8dc0e161dd1;hpb=420d8a86f65f11665e2ef58c738442aa2051208c;p=lurk.git diff --git a/lurk.el b/lurk.el index 16de2af..48b0611 100644 --- a/lurk.el +++ b/lurk.el @@ -1,4 +1,4 @@ -;;; lurk.el --- Little Unified iRc Klient -*- lexical-binding:t -*- +;;; lurk.el --- Little Uni-buffer iRc Klient -*- lexical-binding:t -*- ;; Copyright (C) 2021 Tim Vaughan @@ -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))) @@ -428,10 +421,20 @@ portion of the source component of the message, as LURK doesn't use this.") (lurk-display-string context (pcase (lurk-get-context-type to) - ('channel (concat to " <" from "> " text)) - ('nick (concat "[" from " -> " to "] " text)) + ('channel (concat to " <" from "> ")) + ('nick (concat "[" from " -> " to "] ")) (_ - (error "Unsupported context type")))))) + (error "Unsupported context type"))) + text))) + +(defun lurk-display-action (from to action-text) + (let ((context (if (eq 'channel (lurk-get-context-type to)) + to + (if (equal to lurk-nick) from to)))) + (lurk-display-string + context + "* " from " " action-text))) + (defun lurk-display-notice (context &rest notices) (lurk-display-string @@ -458,10 +461,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 +522,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))) @@ -604,10 +607,13 @@ portion of the source component of the message, as LURK doesn't use this.") ((rx (let ping (: "\01PING " (* (not "\01")) "\01"))) (lurk-send-msg (lurk-msg nil nil "NOTICE" (list from ping))) - (lurk-display-notice "CTCP ping received from " from)) + (lurk-display-notice from "CTCP ping received from " from)) ("\01USERINFO\01" - (lurk-display-notice "CTCP userinfo request from " from " (no response sent)")) + (lurk-display-notice from "CTCP userinfo request from " from " (no response sent)")) + + ((rx (: "\01ACTION " (let action-text (* (not "\01"))) "\01")) + (lurk-display-action from to action-text)) (_ (if (and (equal from "BitBot") @@ -633,10 +639,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-action lurk-nick lurk-current-context action))) ((rx (: "VERSION" " " (let nick (+ (not whitespace))))) (lurk-send-msg (lurk-msg nil nil "PRIVMSG" @@ -696,12 +702,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))