Bonjour,
Je me permets de relater ma mésaventure avec emacs (ou AucTeX).
Je «travaille» sur un projet de fabrication de code metapost (avec
lualatex) afin d’automatiser la création de figures. Pour cela il me
faut prévoir d’intervenir avec lua sur du code metapost (ajouter,
couper, coller, modifier, recoller…) et il importe dans ces
manipulations que l’éditeur soit respectueux du code, au caractère près,
c’est à dire qu’il n’introduise ni ne supprime des éléments.
Eh bien je viens de constater que emacs (mon éditeur favori jusqu’à ce
jour) se permet au moment de l’enregistrement (c’est à dire sans qu’on
s’en aperçoive) d’ajouter un passage à la ligne en fin de dernière
dernière ligne du fichier (s’il n’y en a pas), dans un code metapost.
J’ai vérifié, c’est pareil avec du code latex, mais il se conduit
normalement avec du texte non codé.
Un éditeur de devrait pas faire ça. D’ailleurs gedit, nano, mousepad
sont plus respectueux.
C’est après plusieurs jours de recherche dans les programmes en lua,
pour comprendre la raison de disparitions de caractères et
d’espacements, que j’ai enfin compris que le bug venait de l’éditeur.
Aussi, je pense utile de le faire savoir !
J’espère ne pas me tromper et ne pas médire !
JM Boucart
Bonsoir,
Effectivement, je me suis fait la même remarque un jour… Et le coupable est dans prog-mode.el :
(define-derived-mode prog-mode fundamental-mode “Prog”
“Major mode for editing programming language source code.”
(setq-local require-final-newline mode-require-final-newline)
(setq-local parse-sexp-ignore-comments t)
(add-hook 'context-menu-functions 'prog-context-menu 10 t)
;; Any programming language is always written left to right.
(setq bidi-paragraph-direction 'left-to-right))
Je suppose qu’on doit pouvoir redéfinir la valeur de require-final-newline avec prog-mode-hook.
Bonnes recherches,
Bastien Dumont
Le Monday 27 March 2023 à 07:48:04PM, Jean-Michel Boucart a écrit :
Bonjour,
Je me permets de relater ma mésaventure avec emacs (ou AucTeX).
Je «travaille» sur un projet de fabrication de code metapost (avec lualatex)
afin d’automatiser la création de figures. Pour cela il me faut prévoir
d’intervenir avec lua sur du code metapost (ajouter, couper, coller,
modifier, recoller…) et il importe dans ces manipulations que l’éditeur
soit respectueux du code, au caractère près, c’est à dire qu’il n’introduise
ni ne supprime des éléments.
Eh bien je viens de constater que emacs (mon éditeur favori jusqu’à ce jour)
se permet au moment de l’enregistrement (c’est à dire sans qu’on s’en
aperçoive) d’ajouter un passage à la ligne en fin de dernière dernière ligne
du fichier (s’il n’y en a pas), dans un code metapost. J’ai vérifié, c’est
pareil avec du code latex, mais il se conduit normalement avec du texte non
codé.
Un éditeur de devrait pas faire ça. D’ailleurs gedit, nano, mousepad sont
plus respectueux.
C’est après plusieurs jours de recherche dans les programmes en lua, pour
comprendre la raison de disparitions de caractères et d’espacements, que
j’ai enfin compris que le bug venait de l’éditeur. Aussi, je pense utile de
le faire savoir !
J’espère ne pas me tromper et ne pas médire !
JM Boucart
Le 27/03/2023 à 19:48, Jean-Michel Boucart a écrit :
[…]
Je me permets de relater ma mésaventure avec emacs (ou AucTeX).
[…]
Eh bien je viens de constater que emacs (mon éditeur favori jusqu’à ce
jour) se permet au moment de l’enregistrement (c’est à dire sans qu’on
s’en aperçoive) d’ajouter un passage à la ligne en fin de dernière
dernière ligne du fichier (s’il n’y en a pas), dans un code metapost.
J’ai vérifié, c’est pareil avec du code latex, mais il se conduit
normalement avec du texte non codé.
[…]
C’est le comportement recommandé pour les modes (d’édition) liés à des
langages de programmation.
La variable qui pilote cela s’appelle ‘mode-require-final-newline’ et
l’ajout du caractère de fin de ligne à la fin de fichier peut avoir lieu
à différent moment selon sa valeur:
-
La valeur t (c’est la valeur par défaut) l’ajoute lors de
l’enregistrement du fichier.
-
La valeur ‘visit’ l’ajoute dès que le fichier est ouvert (dans emacs);
-
La valeur ‘visit-save’ l’ajoute à l’ouverture et lors de l’enregistrement.
-
N’importe quelle autre valeur non-nil (‘ask’ par exemple) demandera à
l’utilisateur lors de l’enregistrement s’il doit être ajouter.
-
La valeur nil empêchera cet ajout.
Donc pour supprimer tout ajout, ajoutez la ligne suivante dans votre
fichier d’initialisation de emacs:
(setq mode-require-final-newline nil)
Mais je vous conseille plutôt la demande explicite:
(setq mode-require-final-newline ‘ask’)
Vous pouvez aussi customiser cette variable si vous préférez.
Ceci étant, je trouve étrange que vous ayez besoin de fichiers sans ce
passage à la ligne final. Sans en être sûr, j’ai l’impression que c’est
le Y d’un syndrome XY (une mauvaise solution Y à un vrai problème X).
Cordialement,
Paul Gaborit