diff options
author | Yuchen Pei <id@ypei.org> | 2025-01-05 17:34:34 +1100 |
---|---|---|
committer | Yuchen Pei <id@ypei.org> | 2025-01-05 17:34:34 +1100 |
commit | bb57c3e606d844000ceb725a4f15f7d92a1d5b67 (patch) | |
tree | b6ce6cf0aa8e619dd3b1de03ff35e34d38961c0a /emacs/.emacs.d/lisp/my/infobox.el | |
parent | 72139ef3250f7cad9dad3ccbdc7a829befcb5c5f (diff) |
[emacs][gdb] Infobox with gitlab
* emacs/.emacs.d/init/ycp-org.el: Forgot to require 'my-org-remark
* emacs/.emacs.d/lisp/my/infobox.el: A utility to display alist in a
help buffer
* emacs/.emacs.d/lisp/my/my-buffer.el: Add a function that fontify a
string with a given mode
* emacs/.emacs.d/lisp/my/my-gitlab.el: Example of using infobox, by
displaying gitlab project info in a help buffer
* emacs/.emacs.d/lisp/my/my-net.el: add a function that fetch a url raw
* emacs/.emacs.d/lisp/my/my-prog.el: reduce timeout in gdb completion
from 1 to .1 sec, but the code is commented out anyway because it does
not work (see preceding comments)
* misc/.gdbinit: enable debuginfod and reduce max-completions to 20 to
reduce hanging caused by exhaustive search of completions
Diffstat (limited to 'emacs/.emacs.d/lisp/my/infobox.el')
-rw-r--r-- | emacs/.emacs.d/lisp/my/infobox.el | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/emacs/.emacs.d/lisp/my/infobox.el b/emacs/.emacs.d/lisp/my/infobox.el new file mode 100644 index 0000000..81a66ce --- /dev/null +++ b/emacs/.emacs.d/lisp/my/infobox.el @@ -0,0 +1,65 @@ +;;; infobox.el -- Infobox in a help buffer -*- lexical-binding: t -*- + +;; Copyright (C) 2025 Free Software Foundation, Inc. + +;; Author: Yuchen Pei <id@ypei.org> +;; Package-Requires: ((emacs "29.4")) + +;; This file is part of dotted. + +;; dotted is free software: you can redistribute it and/or modify it under +;; the terms of the GNU Affero General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; dotted is distributed in the hope that it will be useful, but WITHOUT +;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General +;; Public License for more details. + +;; You should have received a copy of the GNU Affero General Public +;; License along with dotted. If not, see <https://www.gnu.org/licenses/>. + +;;; Commentary: + +;; Infobox in a help buffer. + +;;; Code: + + +(defun infobox-translate (info specs) + "Translate INFO according to SPECS. + +TODO: allow multiple levels in specs keys using let-alist, i.e. +something like + +(.channel.name . \"Channel name\")" + (seq-map + (lambda (pair) + (when-let ((val (alist-get (car pair) info))) + (if (or (stringp (cdr pair)) (symbolp (cdr pair))) + (cons (cdr pair) val) + (cons (cadr pair) (funcall (cddr pair) val))))) + specs)) + +(defun infobox-render (info item &optional interactive-p) + "Render and display a help buffer of INFO." + (help-setup-xref item interactive-p) + (with-help-window (help-buffer) + (with-current-buffer standard-output + (let ((n-rows 0)) + (seq-do + (lambda (pair) + (when pair + (when (stringp (car pair)) + (insert (car pair) ": ") + (setq n-rows (1+ n-rows))) + (insert (cdr pair) "\n"))) + info) + (align-regexp + (point-min) + (progn (goto-line (1+ n-rows)) (point)) + "\\(\\s-*\\):")) + (visual-line-mode)))) + +(provide 'infobox) |