X-Git-Url: https://thelambdalab.xyz/gitweb/index.cgi?a=blobdiff_plain;f=lirc.el;h=f8c23b25577bdf2e893ac5d93e21c98b85bcf783;hb=c4589c706bfc030574e4c2eabfec881c747d33db;hp=ee6bdd4a2bfe55598845e85a9cbce583bdf9f220;hpb=a8753ebe5492cf0bc66e7b18e128c7d87936f551;p=lurk.git diff --git a/lirc.el b/lirc.el index ee6bdd4..f8c23b2 100644 --- a/lirc.el +++ b/lirc.el @@ -1,4 +1,4 @@ -;;; lirc.el --- Lambdalabs irc client -*- lexical-binding:t -*- +;;; lirc.el --- Lightweight irc client -*- lexical-binding:t -*- ;; Copyright (C) 2021 Tim Vaughan @@ -43,21 +43,25 @@ "Default full name.") (defcustom lirc-user-name "plugd" "Default user name.") -(defcustom lirc-host "localhost" +(defcustom lirc-host "irc.libera.chat" "Default server.") (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 ;; @@ -186,10 +190,17 @@ (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)))))) + (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.") @@ -224,11 +235,33 @@ (lirc-display-string (lirc-msg->string msg)))))) +;;; Command entering +;; + +(defun lirc-enter-string (string) + (cond ((string-prefix-p "/" string) + (let ((cmd-str (substring string 1))) + (lirc-send-msg (lirc-msg nil nil cmd-str)))) + (t + (error "Unknown command" string)))) + +(defun lirc-enter () + "Enter current contents of line after prompt." + (interactive) + (with-current-buffer "*lirc*" + (lirc-enter-string + (buffer-substring lirc-input-marker (point-max))) + (let ((inhibit-read-only t)) + (delete-region lirc-input-marker (point-max))))) + + + ;;; Mode ;; (defvar lirc-mode-map (let ((map (make-sparse-keymap))) + (define-key map (kbd "RET") 'lirc-enter) map)) (define-derived-mode lirc-mode text-mode "lirc"