cerhu > comp.divers.* > comp.applications.emacs

Denis Bitouzé (13/05/2020, 22h54)
Bonsoir,

dans mon `.emacs`, j'ai quelque chose qui ressemble à ceci :

--8<---------------cut here---------------start------------->8---
(setq LaTeX-verbatim-environments-local '("truc"
"machin"
"bidule"
))

(with-eval-after-load "latex"
(add-to-list 'LaTeX-indent-environment-list '("truc" current-indentation))
(add-to-list 'LaTeX-indent-environment-list '("machin" current-indentation))
(add-to-list 'LaTeX-indent-environment-list '("bidule" current-indentation)))
--8<---------------cut here---------------end--------------->8---

mais avec une liste beaucoup plus longue que seulement :

?????
? "truc"
? "machin"
? "bidule"
?????

Concernant `add-to-list`, y aurait-il moyen de factoriser la chose, de
sorte à ne répéter :

1. ni `'LaTeX-indent-environment-list '` ;
2. ni ` current-indentation` ?

L'idéal serait évidemment de ne pas avoir maintenir à deux endroits
différents la liste :

?????
? "truc"
? "machin"
? "bidule"
?????

Merci d'avance !
Jean-Jacques Rétorré (14/05/2020, 08h39)
mer. 13 mai 2020, Denis Bitouzé <dbitouze> disait :

[..]
> L'idéal serait évidemment de ne pas avoir maintenir à deuxendroits
> différents la liste :
> ?????
> ? "truc"
> ? "machin"
> ? "bidule"
> ?????
> Merci d'avance !


J'aurais proposé

(dolist (env LaTeX-verbatim-environments-local (add-to-list
'LaTeX-indent-environment-list (list env current-indentation))))

Ça me paraît vraiment trop simple...
Denis Bitouzé (14/05/2020, 18h05)
Le 14/05/20 à 08h39, Jean-Jacques Rétorré a écrit :

> J'aurais proposé
> (dolist (env LaTeX-verbatim-environments-local (add-to-list
> 'LaTeX-indent-environment-list (list env current-indentation))))
> Ça me paraît vraiment trop simple...


En effet. Lancer C-x C-e à la fin des 2 instructions suivantes :

(setq LaTeX-verbatim-environments-local '("truc"
"machin"
"bidule"
))

(dolist (env LaTeX-verbatim-environments-local (add-to-list
'LaTeX-indent-environment-list (list env current-indentation))))

conduit pour la 2e à :

?????
? Debugger entered--Lisp error: (void-variable current-indentation)
? (list env current-indentation)
? (let* ((x (list env current-indentation))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list))))
? (let ((--dolist-tail-- LaTeX-verbatim-environments-local) env) (while --dolist-tail-- (setq env (car --dolist-tail--)) (setq --dolist-tail-- (cdr --dolist-tail--))) (setq env nil) (let* ((x (list env current-indentation))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list)))))
? eval((let ((--dolist-tail-- LaTeX-verbatim-environments-local) env) (while --dolist-tail-- (setq env (car --dolist-tail--)) (setq --dolist-tail-- (cdr --dolist-tail--))) (setq env nil) (let* ((x (list env current-indentation))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list))))) nil)
? elisp--eval-last-sexp(nil)
? eval-last-sexp(nil)
? funcall-interactively(eval-last-sexp nil)
? call-interactively(eval-last-sexp nil nil)
? command-execute(eval-last-sexp)
?????

Et, là, je dois dire que je n'y entrave que pouic...

Merci en tout cas.
Jean-Jacques Rétorré (14/05/2020, 19h36)
jeu. 14 mai 2020, Denis Bitouzé <dbitouze> disait :

> Le 14/05/20 à 08h39, Jean-Jacques Rétorré a écrit :
> (setq LaTeX-verbatim-environments-local '("truc"
> "machin"
> "bidule"
> ))
> (dolist (env LaTeX-verbatim-environments-local (add-to-list
> 'LaTeX-indent-environment-list (list env current-indentation))))
> conduit pour la 2e à :
> ?????
> ? Debugger entered--Lisp error: (void-variable current-indentation)

Ça veut dire que current-indentation n'a pas de valeur connue : normal,
c'est une fonction et elle n'en a pas dans ce contexte.

J'avais juste oublié de quoter curent-indentation, J'ai pompé
honteusement sur ton code où ce n'est pas nécessaire, ça m'avait enduit d'erreur...

;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(setq LaTeX-verbatim-environments-local '("truc"
"machin"
"bidule"
))

(dolist (env LaTeX-verbatim-environments-local)
(add-to-list 'LaTeX-indent-environment-list (list env #'current-indentation))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;

Cette fois j'ai testé (je ne l'avais pas fait honte à moi )
car ça m'avais paru trop facile, maintenant je comprends mieux ta demande.

Tu devrais t'initier à Elisp, c'est un langage très facile àapprendre
et l'environnement est très sympa : On peut exécuter du code en mode pas
à pas et contrôler les variables en cours d'exécution. C'esttrès
pédagogique pour comprendre comment ça marche.

Par exemple, pour exécuter la deuxième forme (après avoir exécuté la
première) il suffit, dans un buffer en mode elisp, (scratch par exemple)
de placer le point n'importe où dans la forme et de taper C-u C-M x. Le
point se place au début de la forme et l'exécution avance avec labarre
d'espacement. En prenant des exemples simples et en les décortiquant de
cette façon on peut apprendre très rapidement, du moins si on a un peu
de culture algorithmique... En plus, C-h f sur le nom d'une fonction
renvoie une aide sur la fonction et C-h v fait la même chose pour les
variables.

J'aimerais qu'il y ait un machin comme ça pour décortiquer le code
TeX...

Un peu hors sujet, le fichier d'initialisation conseillé maintenant
est .emacs.d/init.el. La nouvelle macro /use-package/ simplifie bien
l'écriture du fichier d'initialisation et le rend plus modulaire.
Denis Bitouzé (18/05/2020, 17h38)
Le 14/05/20 à 19h36, Jean-Jacques Rétorré a écrit :

[..]
> ))
> (dolist (env LaTeX-verbatim-environments-local)
> (add-to-list 'LaTeX-indent-environment-list (list env #'current-indentation))))
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;
>> Cette fois j'ai testé (je ne l'avais pas fait honte à moi ) carça

> m'avais paru trop facile, maintenant je comprends mieux ta demande.


OK, merci ! Sauf qu'il y avait une parenthèse en trop : tout le charme
de elisp ! ;)

> Tu devrais t'initier à Elisp, c'est un langage très facile à apprendre
> et l'environnement est très sympa : On peut exécuter du code enmode
> pas à pas et contrôler les variables en cours d'exécution.C'est très
> pédagogique pour comprendre comment ça marche.


Hum ! J'avais essayé de comprendre tout seul comme un grand comment ça
marchait mais la page :

?????
? [..]
?????

m'a paru d'une décourageante obscurité...

> Par exemple, pour exécuter la deuxième forme (après avoir exécuté la
> première) il suffit, dans un buffer en mode elisp, (scratch par
> exemple) de placer le point n'importe où dans la forme et de taper C-u
> C-M x.


Argh ! Je dois avoir un keybinding maison que fait que ça ne marche
pas... (C-M crée une nouvelle ligne).

> Le point se place au début de la forme et l'exécution avance avec la
> barre d'espacement. En prenant des exemples simples et en les
> décortiquant de cette façon on peut apprendre très rapidement, du
> moins si on a un peu de culture algorithmique... En plus, C-h f sur le
> nom d'une fonction renvoie une aide sur la fonction et C-h v fait la
> même chose pour les variables.


OK, merci pour l'information.

> J'aimerais qu'il y ait un machin comme ça pour décortiquer le code
> TeX...


Il me semble qu'il y a des choses un peu similaires, non ?

> Un peu hors sujet, le fichier d'initialisation conseillé maintenant
> est .emacs.d/init.el.


Oui, c'est ce que j'utilise en fait mais n'avait parlé que de `.emacs`
car je ne savais pas si tout le monde était au courant.

> La nouvelle macro /use-package/


Comment cela s'utilise-t-il ?

> simplifie bien l'écriture du fichier d'initialisation et le rend plus
> modulaire.


En fait, j'utilise essentiellement le monstre de `.init.el` qu'est celui
(ÀMHA très bien fait) de mon ami Fabrice Niessen :

?????
? [..]
?????
Denis Bitouzé (18/05/2020, 18h08)
Le 14/05/20 à 19h36, Jean-Jacques Rétorré a écrit :

> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> (setq LaTeX-verbatim-environments-local '("truc"
> "machin"
> "bidule"
> ))
> (dolist (env LaTeX-verbatim-environments-local)
> (add-to-list 'LaTeX-indent-environment-list (list env #'current-indentation))))
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;
> m'avais paru trop facile, maintenant je comprends mieux ta demande.


Bon, finalement, ça marchait dans mon instance Emacs déjà ouverte, mais
le redémarrage plante. Si je commente la ligne `(dolist ...)` puis
redémarre, Emacs se lance normalement et un C-x C-e en fin de cette
ligne me donne :

?????
? Debugger entered--Lisp error: (void-variable LaTeX-indent-environment-list)
? (member x LaTeX-indent-environment-list)
? (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list)))
? (let* ((x (list env (function current-indentation)))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list))))
? (while --dolist-tail-- (setq env (car --dolist-tail--)) (let*((x (list env (function current-indentation)))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list)))) (setq --dolist-tail-- (cdr --dolist-tail--)))
? (let ((--dolist-tail-- LaTeX-verbatim-environments-local) env) (while --dolist-tail-- (setq env (car --dolist-tail--)) (let* ((x (list env (function current-indentation)))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list)))) (setq --dolist-tail-- (cdr --dolist-tail--))))
? eval((let ((--dolist-tail-- LaTeX-verbatim-environments-local) env) (while --dolist-tail-- (setq env (car --dolist-tail--)) (let* ((x (list env (function current-indentation)))) (if (member x LaTeX-indent-environment-list) LaTeX-indent-environment-list (setq LaTeX-indent-environment-list (cons x LaTeX-indent-environment-list)))) (setq --dolist-tail-- (cdr --dolist-tail--)))) nil)
? elisp--eval-last-sexp(nil)
? eval-last-sexp(nil)
? funcall-interactively(eval-last-sexp nil)
? call-interactively(eval-last-sexp nil nil)
? command-execute(eval-last-sexp)
?????

Pourtant, `C-h v RET LaTeX-indent-environment-list RET` donne :

?????
? LaTeX-indent-environment-list is a variable defined in ?latex.el?.
? Its value is shown below.
?
? Documentation:
? Alist of environments with special indentation.
? The second element in each entry is the function to calculate the
? indentation level in columns.
?
? Environments present in this list are not filled by filling
? functions, see ?LaTeX-fill-region-as-paragraph?.
?
? You can customize this variable.
?
? Value:
? (("sverbatim" current-indentation)
? ("comment" current-indentation)
? ("tikzpicture" current-indentation)
? ("verbatim" current-indentation)
? ("verbatim*" current-indentation)
? ("filecontents" current-indentation)
? ("filecontents*" current-indentation)
? ("tabular" LaTeX-indent-tabular)
? ("tabular*" LaTeX-indent-tabular)
? ("align" LaTeX-indent-tabular)
? ("align*" LaTeX-indent-tabular)
? ("array" LaTeX-indent-tabular)
? ("eqnarray" LaTeX-indent-tabular)
? ("eqnarray*" LaTeX-indent-tabular)
? ("displaymath")
? ("equation")
? ("equation*")
? ("picture")
? ("tabbing"))
? Original value was
? (("verbatim" current-indentation)
? ("verbatim*" current-indentation)
? ("filecontents" current-indentation)
? ("filecontents*" current-indentation)
? ("tabular" LaTeX-indent-tabular)
? ("tabular*" LaTeX-indent-tabular)
? ("align" LaTeX-indent-tabular)
? ("align*" LaTeX-indent-tabular)
? ("array" LaTeX-indent-tabular)
? ("eqnarray" LaTeX-indent-tabular)
? ("eqnarray*" LaTeX-indent-tabular)
? ("displaymath")
? ("equation")
? ("equation*")
? ("picture")
? ("tabbing"))
?????

la différence entre les valeurs courantes et originales étant dues au
fait que `emacs-leuven` contient :

?????
? (add-to-list 'LaTeX-indent-environment-list '("tikzpicture" current-indentation))
? (add-to-list 'LaTeX-indent-environment-list '("comment" current-indentation))
? (add-to-list 'LaTeX-indent-environment-list '("sverbatim" current-indentation))
?????
Denis Bitouzé (20/05/2020, 11h50)
Le 18/05/20 à 18h08, Denis Bitouzé a écrit :

> Le 14/05/20 à 19h36, Jean-Jacques Rétorré a écrit :
>> Bon, finalement, ça marchait dans mon instance Emacs déjà ouverte, mais

> le redémarrage plante.


En fait, je pense que Jean-Jacques avait, comme d'habitude, raison mais
qu'il a juste oublié une ligne dans son code (`(with-eval-after-load
"latex"`), ce qui expliquerait la parenthèse que je croyais
superfétatoire. Voici le code fonctionnel (réponse obtenue sur
auctex) :

--8<---------------cut here---------------start------------->8---
(setq LaTeX-verbatim-environments-local '("truc"
"machin"
"bidule"
))

(with-eval-after-load "latex"
(dolist (env LaTeX-verbatim-environments-local)
(add-to-list 'LaTeX-indent-environment-list (list env #'current-indentation))))
--8<---------------cut here---------------end--------------->8---
Jean-Jacques Rétorré (20/05/2020, 18h04)
mer. 20 mai 2020, Denis Bitouzé <dbitouze> disait :

[..]
> (with-eval-after-load "latex"
> (dolist (env LaTeX-verbatim-environments-local)
> (add-to-list 'LaTeX-indent-environment-list (list env #'current-indentation))))


Je pensais que ça allait de soi de placer le code dans un
eval-after-load. La question ne portait que sur la "mise en facteur" et
mon code le fait.

Pour ma part, je n'aurais pas fait ça, j'aurais utilisé la nouvelle
macro /use-package/ qui simplifie l'écriture des fichiers
d'initialisation et qui les rend plus modulaires.

J'ai mis la partie initialisation d'AUCTeX sur un pastebin pour ceux que
ça intéresse. J'ai pompé pas mal sur le web, mais certaines fonctions
sont de moi. Chez moi ça marche. Si ça ne marche pas ailleurs, merci de
ne taper qu'avec modération.

Le code est placé dans mon bloc use-package dans la rubrique :config
d'après la doc, ce code s'exécute après le chargement du package, donc
je pense qu'il fait la même chose que eval-after-load

,----
| [..]
`----

Le code est dans un bloc de code elisp du fichier init.org. La commande
org-babel-tangle se charge de confectionner le fichier init.el avec tous
les blocs de code emacs-lisp qui sont marqués pour ça. Ce qui facilite
la mise au point du fichier init, on peut même évaluer un à un les blocs
de code pour les tester.

La macro use-package est documentée soit sur le site
[..]
Discussions similaires
erase entre un list<T>::iterator et un list<T>:reverse_iterator ???

Factorisation

Factorisation

Factorisation?


Fuseau horaire GMT +2. Il est actuellement 02h58. | Privacy Policy