-;;; lirc.el --- Lambdalabs irc client -*- lexical-binding:t -*-
+;;; lirc.el --- Lightweight irc client -*- lexical-binding:t -*-
;; Copyright (C) 2021 Tim Vaughan
;;; Code:
-(provide 'lerc)
+(provide 'lirc)
;;; Customizations
;;
(defcustom lirc-port 6667
"Default port.")
-(defcustom lirc-prompt-string "prompt> "
+(defcustom lirc-prompt-string "> "
"Prompt.")
;;; Faces
;;
(defface lirc-prompt
- '((t :inherit font-lock-string-face))
+ '((t :inherit org-level-2))
"Face used for the prompt.")
+(defface lirc-channel
+ '((t :inherit org-list-dt))
+ "Face used for the channel name in the prompt.")
+
;;; Global variables
;;
(with-current-buffer "*lirc*"
(set-marker-insertion-type lirc-prompt-marker nil)
(set-marker-insertion-type lirc-input-marker t)
- (let ((inhibit-read-only t))
- (delete-region lirc-prompt-marker lirc-input-marker))
(save-excursion
- (goto-char lirc-prompt-marker)
(let ((inhibit-read-only t))
- (insert (propertize lirc-prompt-string
- 'face 'lirc-prompt
- 'read-only t
- 'rear-nonsticky t))))
- (set-marker-insertion-type lirc-input-marker nil)))
+ (delete-region lirc-prompt-marker lirc-input-marker)
+ (goto-char lirc-prompt-marker)
+ (insert
+ (propertize (if lirc-current-channel
+ lirc-current-channel
+ "[no channel]")
+ 'face 'lirc-channel
+ 'read-only t)
+ (propertize lirc-prompt-string
+ 'face 'lirc-prompt
+ 'read-only t
+ 'rear-nonsticky t)))))
+ (set-marker-insertion-type lirc-input-marker nil))
(defvar lirc-prompt-marker nil
"Marker for prompt position in LIRC buffer.")
(defun lirc-eval-msg-string (string)
(let* ((msg (lirc-string->msg string)))
- (cond
- ((equal (lirc-msg-cmd msg) "PING")
+ (pcase (lirc-msg-cmd msg)
+ ("PING"
(lirc-send-msg
(lirc-msg nil nil "PONG" (lirc-msg-params msg))))
- ((string-match (rx (= 3 digit)) (lirc-msg-cmd msg))
- (lirc-display-string (string-join (cdr (lirc-msg-params msg)) " ")))
- (t
+ ;; ((rx (= 3 digit))
+ ;; (lirc-display-string (string-join (cdr (lirc-msg-params msg)) " ")))
+ ((and "JOIN" (let (rx (: (literal lirc-nick) "!" (* anychar))) (lirc-msg-src msg)))
+ (let ((channel (car (lirc-msg-params msg))))
+ (setq lirc-current-channel channel)
+ (add-to-list 'lirc-channel-list channel)
+ (lirc-render-prompt)))
+ (_
(lirc-display-string (lirc-msg->string msg))))))
(interactive)
(with-current-buffer "*lirc*"
(lirc-enter-string
- (buffer-substring lirc-input-marker (point-max)))))
+ (buffer-substring lirc-input-marker (point-max)))
+ (let ((inhibit-read-only t))
+ (delete-region lirc-input-marker (point-max)))))
+
;;; Mode