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.
> 
>