From 3ce407bb84ac96747cee8b1addf723e1b046b90a Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Tue, 19 Oct 2021 15:40:58 +0100 Subject: [PATCH] dot/emacs, el/dot-emacs.el: Define user variables with `defcustom'. The old start-the-docstring-with-a-`*' thing doesn't work any more. --- dot/emacs | 11 +++-- el/dot-emacs.el | 142 ++++++++++++++++++++++++++++++++++++-------------------- 2 files changed, 100 insertions(+), 53 deletions(-) diff --git a/dot/emacs b/dot/emacs index ad17a56..8715c25 100644 --- a/dot/emacs +++ b/dot/emacs @@ -460,7 +460,9 @@ (sit-for 2)) ;;(add-hook 'viper-vi-state-hook 'mdw-set-viper-cursor-colour) -(defvar mdw-black-background t) +(defcustom mdw-black-background t + "Whether the Emacs background is black (or dark, at any rate)." + :type 'boolean) (eval-after-load "outline" '(progn @@ -676,10 +678,13 @@ ;; Other frame fiddling. -(defvar mdw-hostname +(defcustom mdw-hostname (if (string-match "\\." system-name) (substring system-name 0 (match-beginning 0)) - system-name)) + system-name) + "Unqualified hostname Emacs is running on." + :type 'string + :safe 'stringp) (setq frame-title-format '("Emacs " user-login-name "@" mdw-hostname " – %b") icon-title-format frame-title-format) diff --git a/el/dot-emacs.el b/el/dot-emacs.el index ef705cd..a90c58a 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -24,6 +24,10 @@ ;;;-------------------------------------------------------------------------- ;;; Check command-line. +(defgroup mdw nil + "Customization for mdw's Emacs configuration." + :prefix "mdw-") + (defun mdw-check-command-line-switch (switch) (let ((probe nil) (next command-line-args) (found nil)) (while next @@ -113,12 +117,14 @@ This may be at the expense of cool features.") ;; Width configuration. -(defvar mdw-column-width +(defcustom mdw-column-width (string-to-number (or (mdw-config 'emacs-width) "77")) - "*Width of Emacs columns.") -(defvar mdw-text-width mdw-column-width - "*Expected width of text within columns.") -(put 'mdw-text-width 'safe-local-variable 'integerp) + "Width of Emacs columns." + :type 'integer) +(defcustom mdw-text-width mdw-column-width + "Expected width of text within columns." + :type 'integer + :safe 'integerp) ;; Local variables hacking. @@ -255,20 +261,22 @@ P") sb-width)) (mdw-divvy-window width))) -(defvar mdw-frame-width-fudge +(defcustom mdw-frame-width-fudge (cond ((<= emacs-major-version 20) 1) ((= emacs-major-version 26) 3) (t 0)) "The number of extra columns to add to the desired frame width. -This is sadly necessary because Emacs 26 is broken in this regard.") +This is sadly necessary because Emacs 26 is broken in this regard." + :type 'integer) -(defvar mdw-frame-colour-alist +(defcustom mdw-frame-colour-alist '((black . ("#000000" . "#ffffff")) (red . ("#2a0000" . "#ffffff")) (green . ("#002a00" . "#ffffff")) (blue . ("#00002a" . "#ffffff"))) - "*Alist mapping symbol names to (FOREGROUND . BACKGROUND) colour pairs.") + "Alist mapping symbol names to (FOREGROUND . BACKGROUND) colour pairs." + :type '(alist :key-type symbol :value-type (cons color color))) (defun mdw-set-frame-colour (colour &optional frame) (interactive "xColour name or (FOREGROUND . BACKGROUND) pair: @@ -282,8 +290,9 @@ This is sadly necessary because Emacs 26 is broken in this regard.") ;; Don't raise windows unless I say so. -(defvar mdw-inhibit-raise-frame nil - "*Whether `raise-frame' should do nothing when the frame is mapped.") +(defcustom mdw-inhibit-raise-frame nil + "Whether `raise-frame' should do nothing when the frame is mapped." + :type 'boolean) (defadvice raise-frame (around mdw-inhibit (&optional frame) activate compile) @@ -438,13 +447,16 @@ as output rather than a string." (nth 2 when)))))))) (eq w d))) -(defvar mdw-diary-for-org-mode-p nil) +(defvar mdw-diary-for-org-mode-p nil + "Display diary along with the agenda?") (defadvice org-agenda-list (around mdw-preserve-links activate) (let ((mdw-diary-for-org-mode-p t)) ad-do-it)) -(defvar diary-time-regexp nil) +(defcustom diary-time-regexp nil + "Regexp matching times in the diary buffer." + :type 'regexp) (defadvice diary-add-to-list (before mdw-trim-leading-space compile activate) "Trim leading space from the diary entry string." @@ -488,7 +500,7 @@ as output rather than a string." ;; Fighting with Org-mode's evil key maps. -(defvar mdw-evil-keymap-keys +(defcustom mdw-evil-keymap-keys '(([S-up] . [?\C-c up]) ([S-down] . [?\C-c down]) ([S-left] . [?\C-c left]) @@ -499,7 +511,9 @@ as output rather than a string." (([M-right] [?\e right]) . [C-right])) "Defines evil keybindings to clobber in `mdw-clobber-evil-keymap'. The value is an alist mapping evil keys (as a list, or singleton) -to good keys (in the same form).") +to good keys (in the same form)." + :type '(alist :key-type (choice key-sequence (repeat key-sequence)) + :value-type key-sequence)) (defun mdw-clobber-evil-keymap (keymap) "Replace evil key bindings in the KEYMAP. @@ -523,7 +537,7 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'." (dolist (key replacements) (define-key keymap key binding)))))) -(defvar mdw-org-latex-defs +(defcustom mdw-org-latex-defs '(("strayman" "\\documentclass{strayman} \\usepackage[utf8]{inputenc} @@ -533,7 +547,13 @@ Evil key bindings are defined in `mdw-evil-keymap-keys'." ("\\subsection{%s}" . "\\subsection*{%s}") ("\\subsubsection{%s}" . "\\subsubsection*{%s}") ("\\paragraph{%s}" . "\\paragraph*{%s}") - ("\\subparagraph{%s}" . "\\subparagraph*{%s}")))) + ("\\subparagraph{%s}" . "\\subparagraph*{%s}"))) + "Additional LaTeX class definitions." + :type '(alist :key-type string + :value-type (list string + (alist :inline t + :key-type string + :value-type string)))) (eval-after-load "org-latex" '(setq org-export-latex-classes @@ -826,10 +846,13 @@ so that it can be used for convenient filtering." ;; AUTHINFO GENERIC kludge. -(defvar nntp-authinfo-generic nil +(defcustom nntp-authinfo-generic nil "Set to the `NNTPAUTH' string to pass on to `authinfo-kludge'. -Use this to arrange for per-server settings.") +Use this to arrange for per-server settings." + :type '(choice (const :tag "Use `NNTPAUTH' environment variable" nil) + string) + :safe 'stringp) (defun nntp-open-authinfo-kludge (buffer) "Open a connection to SERVER using `authinfo-kludge'." @@ -1018,8 +1041,10 @@ in REST." ;; Now actually do the thing. (call-process "uuencode" file t nil name)) -(defvar np-file "~/.np" - "*Where the `now-playing' file is.") +(defcustom np-file "~/.np" + "Where the `now-playing' file is." + :type 'file + :safe 'stringp) (defun np (&optional arg) "Grabs a `now-playing' string." @@ -1150,14 +1175,15 @@ If NEW-SESSION-P, start a new session." (eval-after-load 'w3m '(define-key w3m-mode-map [?\e ?\r] 'w3m-view-this-url-new-session)) -(defvar mdw-good-url-browsers +(defcustom mdw-good-url-browsers '(browse-url-mozilla browse-url-generic (w3m . mdw-w3m-browse-url) browse-url-w3) "List of good browsers for mdw-good-url-browsers. Each item is a browser function name, or a cons (CHECK . FUNC). -A symbol FOO stands for (FOO . FOO).") +A symbol FOO stands for (FOO . FOO)." + :type '(repeat (choice function (cons function function)))) (defun mdw-good-url-browser () "Return a good URL browser. @@ -1215,8 +1241,8 @@ CHECK is fboundp, and returning the correponding FUNC." ;; Useful variables. -(defvar mdw-fill-prefix nil - "*Used by `mdw-line-prefix' and `mdw-fill-paragraph'. +(defcustom mdw-fill-prefix nil + "Used by `mdw-line-prefix' and `mdw-fill-paragraph'. If there's no fill prefix currently set (by the `fill-prefix' variable) and there's a match from one of the regexps here, it gets used to set the fill-prefix for the current operation. @@ -1246,13 +1272,14 @@ as modified during matching.") (make-variable-buffer-local 'mdw-fill-prefix) -(defvar mdw-hanging-indents +(defcustom mdw-hanging-indents (concat "\\(\\(" "\\([*o+]\\|-[-#]?\\|[0-9]+\\.\\|\\[[0-9]+\\]\\|([a-zA-Z])\\)" "[ \t]+" "\\)?\\)") - "*Standard regexp matching parts of a hanging indent. -This is mainly useful in `auto-fill-mode'.") + "Standard regexp matching parts of a hanging indent. +This is mainly useful in `auto-fill-mode'." + :type 'regexp) ;; Utility functions. @@ -1460,8 +1487,10 @@ case." ;; Common mode settings. -(defvar mdw-auto-indent t - "Whether to indent automatically after a newline.") +(defcustom mdw-auto-indent t + "Whether to indent automatically after a newline." + :type 'boolean + :safe 'booleanp) (defun mdw-whitespace-mode (&optional arg) "Turn on/off whitespace mode, but don't highlight trailing space." @@ -1540,9 +1569,10 @@ case." ;; Backup file handling. -(defvar mdw-backup-disable-regexps nil - "*List of regular expressions: if a file name matches any of -these then the file is not backed up.") +(defcustom mdw-backup-disable-regexps nil + "List of regular expressions: if a file name matches any of +these then the file is not backed up." + :type '(repeat regexp)) (defun mdw-backup-enable-predicate (name) "[mdw]'s default backup predicate. @@ -1577,15 +1607,17 @@ doesn't match any of the regular expressions in ;;;-------------------------------------------------------------------------- ;;; Fullscreen-ness. -(defvar mdw-full-screen-parameters +(defcustom mdw-full-screen-parameters '((menu-bar-lines . 0) - ;(vertical-scroll-bars . nil) + ;;(vertical-scroll-bars . nil) ) - "Frame parameters to set when making a frame fullscreen.") + "Frame parameters to set when making a frame fullscreen." + :type '(alist :key-type symbol)) -(defvar mdw-full-screen-save +(defcustom mdw-full-screen-save '(width height) - "Extra frame parameters to save when setting fullscreen.") + "Extra frame parameters to save when setting fullscreen." + :type '(repeat symbol)) (defun mdw-toggle-full-screen (&optional frame) "Show the FRAME fullscreen." @@ -2030,7 +2062,9 @@ doesn't match any of the regular expressions in (((class color)) :background "blue") (((type tty) (class mono)) :inverse-video t)) -(defvar mdw-point-overlay-fringe-display '(vertical-bar . vertical-bar)) +(defcustom mdw-point-overlay-fringe-display '(vertical-bar . vertical-bar) + "Bitmaps to display in the left and right fringes in the current line." + :type '(cons symbol symbol)) (defun mdw-configure-point-overlay () (let ((ov (make-overlay 0 0))) @@ -4238,21 +4272,21 @@ strip numbers instead." ;;;-------------------------------------------------------------------------- ;;; Configuration files. -(defvar mdw-conf-quote-normal nil - "*Control syntax category of quote characters `\"' and `''. +(defcustom mdw-conf-quote-normal nil + "Control syntax category of quote characters `\"' and `''. If this is `t', consider quote characters to be normal punctuation, as for `conf-quote-normal'. If this is `nil' then leave quote characters as quotes. If this is a list, then consider the quote characters in the list to be normal punctuation. If this is a single quote character, then consider -that character only to be normal punctuation.") +that character only to be normal punctuation." + :type '(choice boolean character (repeat character)) + :safe 'mdw-conf-quote-normal-acceptable-value-p) (defun mdw-conf-quote-normal-acceptable-value-p (value) "Is the VALUE is an acceptable value for `mdw-conf-quote-normal'?" (or (booleanp value) (every (lambda (v) (memq v '(?\" ?'))) (if (listp value) value (list value))))) -(put 'mdw-conf-quote-normal 'safe-local-variable - 'mdw-conf-quote-normal-acceptable-value-p) (defun mdw-fix-up-quote () "Apply the setting of `mdw-conf-quote-normal'." @@ -4628,8 +4662,13 @@ that character only to be normal punctuation.") ;; Special indentation. -(defvar mdw-lisp-loop-default-indent 2) -(defvar mdw-lisp-setf-value-indent 2) +(defcustom mdw-lisp-loop-default-indent 2 + "Default indent for simple `loop' body." + :type 'integer + :safe 'integerp) +(defcustom mdw-lisp-setf-value-indent 2 + "Default extra indent for `setf' values." + :type 'integer :safe 'integerp) (setq lisp-simple-loop-indentation 0 lisp-loop-keyword-indentation 0 @@ -4759,8 +4798,10 @@ align the other subforms beneath it. Otherwise, indent them ;; SLIME setup. -(defvar mdw-friendly-name "[mdw]" - "How I want to be addressed.") +(defcustom mdw-friendly-name "[mdw]" + "How I want to be addressed." + :type 'string + :safe 'stringp) (defadvice slime-user-first-name (around mdw-use-friendly-name compile activate) (if mdw-friendly-name (setq ad-return-value mdw-friendly-name) @@ -4945,9 +4986,10 @@ This allows you to pass a list of arguments through `ansi-term'." (interactive "sHost: ") (ansi-term (list "ssh" host) (format "ssh@%s" host))) -(defvar git-grep-command +(defcustom git-grep-command "env GIT_PAGER=cat git grep --no-color -nH -e " - "*The default command for \\[git-grep].") + "The default command for \\[git-grep]." + :type 'string) (defvar git-grep-history nil) -- 2.11.0