(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)))
(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
(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*")))
"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)))
(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"
(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 "<tab>") 'lurk-complete)
+ (define-key map (kbd "C-c C-z") 'lurk-toggle-zoom)
(define-key map (kbd "<C-tab>") 'lurk-cycle-contexts-forward)
(define-key map (kbd "<C-S-tab>") 'lurk-cycle-contexts-reverse)
map))