Re: Improving add-hook of two functions
uzibalqa <[email protected]> Mon, 06 Jul 2026 21:27:19 +0000
| Newsgroups | gmane.emacs.help |
|---|---|
| Message-ID | <UL1Dm24MGvFUItiNEd1W3j18yLNQ5ZmRg63HLc8N2x3A4di5yERiayxzPmow57VGrecOGIX9vL84CMsiiLvdQZYcvtsjA8gVl6o3YvUwRvI=@proton.me> |
On Tuesday, July 7th, 2026 at 3:40 AM, tpeplt <[email protected]> wrote: > Heime <[email protected]> writes: > > > I would like to improve the selection mechanism and > > performance of the following function. > > > > Until someone suggests an alternate mechanism for what you > want, you can simplify your code by replacing your ‘cond’ > expressions with ‘cl-case’ (formerly, ‘case’): > > > (hka (cond > > ((eq actm 'add) #'add-hook) > > ((eq actm 'remove) #'remove-hook) > > ((eq actm 'add-regexp) #'add-hook) > > ((eq actm 'remove-regexp) #'remove-hook) > > ((eq actm 'add-outline) #'add-hook) > > ((eq actm 'remove-outline) #'remove-hook) > > (t (error "%s: ACTM %s is invalid" > > "kronaire-hooks" actm)))) ) > > Using ‘cl-case’ can simplify this binding expression to: > > (hka (cl-case actm > ((add add-regexp add-outline) #'add-hook) > ((remove remove-regexp remove-outline) #'remove-hook) > (otherwise (error "%s: ACTM %s is invalid" > "kronaire-hooks" actm)))) > I figured the capability of string-match-p like so (let* ( (sbn (symbol-name actm)) (add-rx "^add\\(-regexp\\|-outline\\)?$") (rmv-rx "^remove\\(-regexp\\|-outline\\)?$") (hka (cond ((string-match-p add-rx sbn) 'add-hook) ((string-match-p rmv-rx sbn) 'remove-hook) (t (message (format "%s: Invalid ACTM %s" "kronaire-hooks" actm))))) ) > Likewise, > > > (cond > > ((or (eq actm 'add) (eq actm 'remove)) > > (funcall hka mdhook #'kronaire-regexp) > > (funcall hka mdhook #'outline-minor-mode)) > > ((or (eq actm 'add-regexp) (eq actm 'remove-regexp)) > > (funcall hka mdhook #'kronaire-regexp)) > > ((or (eq actm 'add-outline) (eq actm 'remove-outline)) > > (funcall hka mdhook #'outline-minor-mode)))))) > > simplifies to: > > (cl-case actm > ((add remove) > (funcall hka mdhook #'kronaire-regexp) > (funcall hka mdhook #'outline-minor-mode)) > > ((add-regexp remove-regexp) > (funcall hka mdhook #'kronaire-regexp)) > > ((add-outline remove-outline) > (funcall hka mdhook #'outline-minor-mode))) > > You should not expect that these changes will improve > performance significantly. Evaluate the following > expression in Emacs to read more about ‘cl-case’: > > (info "(cl) Conditionals") > > -- > The lyf so short, the craft so long to lerne. > - Geoffrey Chaucer, The Parliament of Birds. > >