#!/usr/bin/env -S emacs --script (setq cur-path (file-name-directory load-file-name)) (add-to-list 'load-path (expand-file-name ".." cur-path)) (require 'evil) (require 'evil-digraphs) (require 'json) (require 'help) (defun mark-command-keys (string) "Mark key bindings in STRING with the \":kbd:\" Sphinx role." (when string (cl-loop for prev = 0 then pos until (>= prev (length string)) for pos = (next-single-property-change prev 'face string (length string)) concat (let ((s (substring string prev pos))) (if (eq (get-text-property prev 'face string) 'help-key-binding) (format ":kbd:`%s`" s) s))))) (let (vars) (mapatoms (lambda (sym) (when (string-prefix-p "evil-" (symbol-name sym)) (let ((default (eval (car (get sym 'standard-value))))) (push `(,sym (default . ,(cond ((consp default) (format "%S" default)) ((symbolp default) (symbol-name default)) (t default))) (local . ,(local-variable-if-set-p sym)) (default-type . ,(type-of default)) (var-docstring . ,(mark-command-keys (documentation-property sym 'variable-documentation))) (fn-docstring . ,(ignore-errors (mark-command-keys (documentation sym)))) (arglist . ,(help-function-arglist sym)) (functionp . ,(functionp sym)) (macrop . ,(macrop sym))) vars))))) (with-temp-file (expand-file-name "../doc/docstringdb.json" cur-path) (insert (json-encode vars))))