81 lines
2.9 KiB
EmacsLisp
81 lines
2.9 KiB
EmacsLisp
;;; +cus-edit.el -*- lexical-binding: t; -*-
|
|
|
|
;;; Commentary:
|
|
|
|
;; The naming convention for this library, called "cus-edit.el" on the
|
|
;; filesystem, is all over the damn place. Whatever.
|
|
|
|
;;; Code:
|
|
|
|
(require 'cl-lib)
|
|
(require 'seq)
|
|
|
|
(defgroup +customize nil
|
|
"Extra customize customizations."
|
|
:prefix "+customize-"
|
|
:group 'customize)
|
|
|
|
(defcustom +cus-edit-imenu-generic-expression ; thanks u/oantolin!
|
|
`(("Faces" ,(rx (seq bol
|
|
(or "Show" "Hide") " "
|
|
(group (zero-or-more nonl))
|
|
" face: [sample]"))
|
|
1)
|
|
("Variables" ,(rx (seq bol
|
|
(or "Show Value" "Hide") " "
|
|
(group (zero-or-more
|
|
(not (any "\n:"))))))
|
|
1))
|
|
"Show faces and variables in `imenu' in a `customize' buffer."
|
|
:type 'sexp ; This is .. over-simplified.
|
|
)
|
|
|
|
(defcustom +custom-variable-allowlist nil
|
|
"Variables to allow changing while loading the Custom file.")
|
|
|
|
(defcustom +custom-after-load-hook nil
|
|
"Functions to run after loading the custom file.")
|
|
|
|
(defun +custom-load-ignoring-most-customizations (&optional
|
|
error
|
|
nomessage
|
|
nosuffix
|
|
must-suffix)
|
|
"Load `custom-file', ignoring most customizations.
|
|
Ignore all faces, and only load variables in
|
|
`+customize-variable-allowlist'. All the optional
|
|
variables---ERROR, NOMESSAGE, NOSUFFIX, MUST-SUFFIX---are
|
|
passed on to `load'.
|
|
|
|
NOTE: ERROR is the opposite of its value in `load' -- meaning
|
|
that this function by default does /not/ error, but will if you
|
|
pass t to it."
|
|
(cl-letf (((symbol-function 'custom-set-faces) 'ignore)
|
|
((symbol-function 'custom-set-variables)
|
|
(lambda (&rest args)
|
|
(apply #'custom-theme-set-variables 'user
|
|
(seq-filter (lambda (el)
|
|
(memq (car el)
|
|
+custom-variable-allowlist))
|
|
args)))))
|
|
(load custom-file (not error) nomessage nosuffix must-suffix))
|
|
(run-hooks '+custom-after-load-hook))
|
|
|
|
(defun +cus-edit-expand-widgets (&rest _)
|
|
"Expand descriptions in `Custom-mode' buffers."
|
|
(interactive)
|
|
;; "More/Hide" widgets (thanks alphapapa!)
|
|
(widget-map-buttons (lambda (widget _)
|
|
(pcase (widget-get widget :off)
|
|
("More" (widget-apply-action widget)))
|
|
nil))
|
|
;; "Show Value" widgets (the little triangles)
|
|
(widget-map-buttons (lambda (widget _)
|
|
(pcase (widget-get widget :off)
|
|
("Show Value"
|
|
(widget-apply-action widget)))
|
|
nil)))
|
|
|
|
(provide '+cus-edit)
|
|
;;; +cus-edit.el ends here
|