From 23cc4ab7b5695f77ffd15f5ee5e7cc414237642f Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Tue, 18 Aug 2026 03:04:31 -0400 Subject: Update --- src/gizmo/wasp-flymake.el | 4 ++- src/gizmo/wasp-heartrate.el | 2 +- src/gizmo/wasp-leaderboard.el | 75 +++++++++++++++++++++++++++++++++++++++++++ src/gizmo/wasp-top.el | 10 ++++++ 4 files changed, 89 insertions(+), 2 deletions(-) create mode 100644 src/gizmo/wasp-leaderboard.el create mode 100644 src/gizmo/wasp-top.el (limited to 'src/gizmo') diff --git a/src/gizmo/wasp-flymake.el b/src/gizmo/wasp-flymake.el index 42c085b4..b727d2c9 100644 --- a/src/gizmo/wasp-flymake.el +++ b/src/gizmo/wasp-flymake.el @@ -56,8 +56,10 @@ (defun w/flymake-setup () "Setup stream Flymake errors." - (add-hook 'flymake-diagnostic-functions #'w/flymake-backend nil t)) + (unless (-contains? flymake-diagnostic-functions #'w/flymake-backend) + (add-hook 'flymake-diagnostic-functions #'w/flymake-backend nil t))) (add-hook 'prog-mode-hook #'w/flymake-setup) +(add-hook 'eglot-managed-mode-hook #'w/flymake-setup) (provide 'wasp-flymake) ;;; wasp-flymake.el ends here diff --git a/src/gizmo/wasp-heartrate.el b/src/gizmo/wasp-heartrate.el index fa27d64d..08acfe76 100644 --- a/src/gizmo/wasp-heartrate.el +++ b/src/gizmo/wasp-heartrate.el @@ -39,7 +39,7 @@ (define-derived-mode w/heartrate-mode special-mode "heartrate" "Major mode for displaying heartrate." - :group 'w + :group 'wasp (setq-local cursor-type nil)) (defun w/heartrate-get-buffer () diff --git a/src/gizmo/wasp-leaderboard.el b/src/gizmo/wasp-leaderboard.el new file mode 100644 index 00000000..6a573e50 --- /dev/null +++ b/src/gizmo/wasp-leaderboard.el @@ -0,0 +1,75 @@ +;;; wasp-leaderboard --- description -*- lexical-binding: t; -*- +;;; Commentary: +;;; Code: + +(require 'wasp-utils) +(require 'wasp-db) + +(defvar-local w/leaderboard-id nil) + +(defconst w/leaderboard-url-base "https://api.colonq.computer/api/leaderboard") + +(defun w/leaderboard-url (lid) + "Return the URL for the leaderboard LID." + (s-concat w/leaderboard-url-base "/" lid)) + +(defun w/leaderboard-buffer-name (lid) + "Return the buffer name for the leaderboard LID." + (format "*wasp-leaderboard %s*" lid)) + +(defun w/leaderboard-fetch (lid k) + "Fetch the leaderboard LID and pass it to K." + (w/fetch-json (w/leaderboard-url lid) + (lambda (data) + (funcall k + (--map (seq-into it 'list) (seq-into data 'list)))))) + +(define-derived-mode w/leaderboard-mode tabulated-list-mode "leaderboard" + "Major mode for displaying a leaderboard." + :group 'wasp + (setq-local tabulated-list-format + [ ("Name" 32 t) + ("Score" 32 t) + ]) + (add-hook 'tabulated-list-revert-hook #'w/leaderboard-refresh nil t) + (tabulated-list-init-header)) + +(defun w/leaderboard-get-buffer (lid) + "Return the leaderboard buffer for LID." + (let ((nm (w/leaderboard-buffer-name lid))) + (unless (get-buffer nm) + (with-current-buffer (get-buffer-create nm) + (w/leaderboard-mode) + (setq-local w/leaderboard-id lid))) + (get-buffer nm))) + +(defun w/leaderboard-render (lid d) + "Render the fetched leaderboard data D for LID." + (with-current-buffer (w/leaderboard-get-buffer lid) + (setq-local tabulated-list-entries + (--map + (list (car it) + (vector + (format "%s" (cadr it)) + (format "%s" (caddr it)))) + d)) + (tabulated-list-print))) + +(defun w/leaderboard-update (lid) + "Fetch and render the leaderboard LID." + (w/leaderboard-fetch lid + (lambda (d) + (w/leaderboard-render lid d)))) + +(defun w/leaderboard-refresh () + "Refresh the leaderboard displayed in the current buffer." + (interactive) + (when (and (eq major-mode 'w/leaderboard-mode) w/leaderboard-id) + (w/leaderboard-update w/leaderboard-id))) + +(defun w/leaderboard-set-score (lid user score) + "Update the SCORE for USER in leaderboard LID." + (w/db-zadd (s-concat "leaderboard:" lid) (format "%s" score) user)) + +(provide 'wasp-leaderboard) +;;; wasp-leaderboard.el ends here diff --git a/src/gizmo/wasp-top.el b/src/gizmo/wasp-top.el new file mode 100644 index 00000000..f82b2329 --- /dev/null +++ b/src/gizmo/wasp-top.el @@ -0,0 +1,10 @@ +;;; wasp-top --- description -*- lexical-binding: t; -*- +;;; Commentary: +;;; Code: + +(define-derived-mode w/top-mode tabulated-list-mode "Top Humans" + "Major mode for displaying top humans." + :group 'wasp) + +(provide 'wasp-top) +;;; wasp-top.el ends here -- cgit v1.3.1