|
29 | 29 | ;;; Code:
|
30 | 30 |
|
31 | 31 | (require 'cider-doc)
|
| 32 | +(require 'cl-lib) |
32 | 33 | (require 'seq)
|
33 | 34 |
|
34 | 35 | (defconst cider-cheatsheet-hierarchy
|
@@ -568,6 +569,38 @@ When you make it to a Clojure var its doc buffer gets displayed."
|
568 | 569 | (setq cheatsheet-data (cdr section-data))))
|
569 | 570 | (cider-cheatsheet--select-var cheatsheet-data)))
|
570 | 571 |
|
| 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 | + |
571 | 604 | (provide 'cider-cheatsheet)
|
572 | 605 |
|
573 | 606 | ;;; cider-cheatsheet.el ends here
|
0 commit comments