Décidément j'ai des comptes à régler avec Emacs en ce moment :-)
Je suis en train d'implémenter le support des fichiers maîtres/esclaves
dans asy-mode.el et tout marche bien sauf en mode hybride LaTeX/Asy dans
un fichier TeX esclave (dans un maître, pas de problème).
Dans un fichier .tex esclave en lasy-mode (hybride LaTeX/Asy donc) la
cpu grimpe à 100% quand on bascule en asy-mode (curseur entre les
balises \begin{asy}\end{asy}) et reviens à la normale quand on en sort.
D'ailleurs le basculement en asy-mode ne se fait pas puisqu'un
M-: major-mode <ret> donne toujours latex-mode.
On dirait que two-mode-mode boucle et oscille entre asy-mode et
latex-mode avec une préférence marquée pour latex.
Il doit y avoir une processus spécial dans un fichier esclave en
latex-mode qui n'existe pas dans un fichier maître...
Ce processus perturberait le fragile two-mode-mode.
Un spécialiste de AucTeX peut-il éclairer ma pâle lanterne ?
Quand two-mode-mode change de mode, il relit les variables locales et donc revient en latex-mode et donc relis les variables locales et ainsi de suite.
Je ne vois pas pourquoi AucTeX force le mode LaTeX en utilisant une variable locale sur un .tex; c'est pas toujours du latex-mode un .tex avec Auctex ?
Si c'est la cas et pour rester cohérent, il faudrait mettre cette ligne à tout buffer .tex. Bon... j'ai peut-être loupé un truc ?
Si personne n'y voit à redire, j'ajoute ces quelques ligne dans asy-mode.el: 8<------8<------8<------8<------8<------8<------8<------8<------8<------ (defadvice TeX-add-local-master (after asy-adjust-local-variable ()) "Delete the line that defines the mode in a file .tex because two-mode-mode reread the local variables after switching mode." (when (string= (file-name-extension buffer-file-name) "tex") (goto-char (point-min)) (delete-matching-lines "mode: latex" (re-search-forward "^([^n]+)Local Variables:") (re-search-forward (regexp-quote (concat (match-string 1) "End:"))) nil))) (ad-activate 'TeX-add-local-master) 8<------8<------8<------8<------8<------8<------8<------8<------8<------
Au passage, dans TeX-add-local-master, il y a un (concat "^([^n]+)Local " "Variables:") que je comprends pas trop à quoi sert le concat.
Quand two-mode-mode change de mode, il relit les variables locales et
donc revient en latex-mode et donc relis les variables locales et
ainsi de suite.
Je ne vois pas pourquoi AucTeX force le mode LaTeX en utilisant une
variable locale sur un .tex; c'est pas toujours du latex-mode un .tex
avec Auctex ?
Si c'est la cas et pour rester cohérent, il faudrait mettre cette ligne
à tout buffer .tex.
Bon... j'ai peut-être loupé un truc ?
Si personne n'y voit à redire, j'ajoute ces quelques ligne dans asy-mode.el:
8<------8<------8<------8<------8<------8<------8<------8<------8<------
(defadvice TeX-add-local-master (after asy-adjust-local-variable ())
"Delete the line that defines the mode in a file .tex because
two-mode-mode reread the local variables after switching mode."
(when (string= (file-name-extension buffer-file-name) "tex")
(goto-char (point-min))
(delete-matching-lines
"mode: latex"
(re-search-forward
"^\([^n]+\)Local Variables:")
(re-search-forward (regexp-quote
(concat (match-string 1)
"End:"))) nil)))
(ad-activate 'TeX-add-local-master)
8<------8<------8<------8<------8<------8<------8<------8<------8<------
Au passage, dans TeX-add-local-master, il y a un
(concat "^\([^n]+\)Local " "Variables:")
que je comprends pas trop à quoi sert le concat.
Quand two-mode-mode change de mode, il relit les variables locales et donc revient en latex-mode et donc relis les variables locales et ainsi de suite.
Je ne vois pas pourquoi AucTeX force le mode LaTeX en utilisant une variable locale sur un .tex; c'est pas toujours du latex-mode un .tex avec Auctex ?
Si c'est la cas et pour rester cohérent, il faudrait mettre cette ligne à tout buffer .tex. Bon... j'ai peut-être loupé un truc ?
Si personne n'y voit à redire, j'ajoute ces quelques ligne dans asy-mode.el: 8<------8<------8<------8<------8<------8<------8<------8<------8<------ (defadvice TeX-add-local-master (after asy-adjust-local-variable ()) "Delete the line that defines the mode in a file .tex because two-mode-mode reread the local variables after switching mode." (when (string= (file-name-extension buffer-file-name) "tex") (goto-char (point-min)) (delete-matching-lines "mode: latex" (re-search-forward "^([^n]+)Local Variables:") (re-search-forward (regexp-quote (concat (match-string 1) "End:"))) nil))) (ad-activate 'TeX-add-local-master) 8<------8<------8<------8<------8<------8<------8<------8<------8<------
Au passage, dans TeX-add-local-master, il y a un (concat "^([^n]+)Local " "Variables:") que je comprends pas trop à quoi sert le concat.