Skip to content

Commit 254f12d

Browse files
committed
Add an alternative way to display cheatsheet in a buffer
1 parent 8be2bcf commit 254f12d

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

cider-cheatsheet.el

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
;;; Code:
3030

3131
(require 'cider-doc)
32+
(require 'cl-lib)
3233
(require 'seq)
3334

3435
(defconst cider-cheatsheet-hierarchy
@@ -568,6 +569,38 @@ When you make it to a Clojure var its doc buffer gets displayed."
568569
(setq cheatsheet-data (cdr section-data))))
569570
(cider-cheatsheet--select-var cheatsheet-data)))
570571

572+
(cl-defun cider-cheatsheet--insert-hierarchy (hierarchy &optional (level 0))
573+
"Insert the cheatsheet hierarchy with visual indentation for each level."
574+
(dolist (node hierarchy)
575+
(if (stringp (car node))
576+
(progn
577+
(insert (make-string (* level 2) ?\s) (car node) "\n")
578+
(cider-cheatsheet--insert-hierarchy (cdr node) (1+ level)))
579+
(dolist (var (cider-cheatsheet--expand-vars node))
580+
(insert (make-string (* level 2) ?\s))
581+
(insert-text-button var
582+
'var var
583+
'action (lambda (btn)
584+
(cider-doc-lookup (button-get btn 'var)))
585+
'help-echo (format "Show documentation for %s" var))
586+
(insert "\n")))))
587+
588+
(defun cider-cheatsheet--buffer-contents ()
589+
"Generate cheatsheet buffer contents based on the cheatsheet hierarchy."
590+
(with-temp-buffer
591+
(cider-cheatsheet--insert-hierarchy cider-cheatsheet-hierarchy)
592+
(buffer-string)))
593+
594+
;;;###autoload
595+
(defun cider-cheatsheet-buffer ()
596+
"Display cheatsheet in a popup buffer."
597+
(interactive)
598+
(with-current-buffer (cider-popup-buffer "*cider-cheatsheet*")
599+
(read-only-mode -1)
600+
(insert (cider-cheatsheet--buffer-contents))
601+
(read-only-mode 1)
602+
(goto-char (point-min))))
603+
571604
(provide 'cider-cheatsheet)
572605

573606
;;; cider-cheatsheet.el ends here

0 commit comments

Comments
 (0)