From bb57c3e606d844000ceb725a4f15f7d92a1d5b67 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Sun, 5 Jan 2025 17:34:34 +1100 Subject: [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 --- emacs/.emacs.d/lisp/my/infobox.el | 65 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 emacs/.emacs.d/lisp/my/infobox.el (limited to 'emacs/.emacs.d/lisp/my/infobox.el') 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 +;; 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 . + +;;; 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) -- cgit v1.2.3