On Mon, Apr 17, 2023, 12:10 PM Stefan Monnier wrote: > > (defcustom org-src-lang-modes > > - '(("C" . c) > > + `(("C" . c) > > ("C++" . c++) > > ("asymptote" . asy) > > - ("bash" . sh) > > ("beamer" . latex) > > ("calc" . fundamental) > > ("cpp" . c++) > > @@ -208,9 +215,10 @@ but which mess up the display of a snippet in Org > exported files.") > > ("elisp" . emacs-lisp) > > ("ocaml" . tuareg) > > ("screen" . shell-script) > > - ("shell" . sh) > > ("sqlite" . sql) > > - ("toml" . conf-toml)) > > + ("toml" . conf-toml) > > + ("shell" . sh) > > + ,@(org-src--get-known-shells)) > > "Alist mapping languages to their major mode. > > Side note: while it really doesn't matter here for such trivial > top-level code, I prefer to put such ,@ at the beginning rather than the > end of lists, when it's an option. Basically because it's more > efficient to add to the beginning rather than to the end of a list: > > ELISP> (macroexpand '`(,@(list 1 2) a b c d)) > (append (list 1 2) '(a b c d)) > ELISP> (macroexpand '`(a b c d ,@(list 1 2))) > (cons 'a (cons 'b (cons 'c (cons 'd (list 1 2))))) > ELISP> > Why is the former more efficient than the latter? It looks like the former would have to construct the '(1 2) list twice, and the latter only once. And the '(a b c d) cons cells are only allocated once either way. Lynn