Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Erreur étrange

3 réponses
Avatar
Ph. Ivaldi
Bonjour,

J'ai un problème très étrange avec le module asy-mode que j'ai écrit
pour Asymptote.
J'édite un fichier LaTeX et me place dans le mode lasy-mode; ce mode
permet de basculer entre les modes latex-mode et asy-mode suivant que le
curseur se trouve entre les balise \begin{asy} et \end{asy} ou pas.
Le basculement est assuré par le module `two-mode-mode'.

En mode latex 'C-c C-c' est "bindé" sur `TeX-command-master' et en mode
asy il l'est sur `asy-compile'.
Lorsque je bascule de latex-mode vers asy-mode (en plaçant le curseur
sur la première ligne après \begin{asy}, un C-c C-c devrait
appeler 'asy-compile' mais il appelle « je ne sais pas quoi » et me
propose l'invite: "Command: (default)" avec pour complétion possible:
8<------8<------8<------8<------8<------8<------8<------8<------8<------
Possible completions are:
BibTeX Clean
Clean All File
Index Other
Print Queue
Spell View
8<------8<------8<------8<------8<------8<------8<------8<------8<------
Ça ressemble à du `TeX-command-master' avec un complétion réduite.

On va me dire: « Ya un bogue dans asy-mode ».
Pas sûr: j'annule et je recommence C-c C-c: là ça marche, `asy-compile'
est lancé.

Encore plus bizarre:
* je bascule de asy-mode en latex-mode et C-c C-c me donne 'asy-compile'
au lieux de `TeX-command-master' et si je recommence C-c C-c une
deuxième fois j'ai bien `TeX-command-master'.
* je rebascule en asy-mode, un C-h k C-c C-c me dit `asy-compile' et C-c
C-c appelle bien `asy-compile'.
* Si après avoir placé le curseur après la première ligne de \begin{asy}
(à n'importe qu'elle position sur la ligne) j'avance de 1 caractère, un
C-c C-c lance bien `asy-compile'.
* Dans 'two-mode-mode', il y a un "hook" qui s'exécute après chaque
basculement.
Je mets ceci:
8<------8<------8<------8<------8<------8<------8<------8<------8<------
(add-hook 'two-mode-switch-hook
(lambda ()
(if (string-match "latex" (downcase mode-name))
(message "********Bascule en LaTeX-mode********")
(progn ;; Swith to asy-mode
(describe-key-briefly (kbd "C-c C-c"))
(message "********Bascule en asy-mode********")
))))
8<------8<------8<------8<------8<------8<------8<------8<------8<------

Lors de la bascule en asy-mode, j'obtiens dans "*messages*":
C-c C-c runs the command asy-compile
********Bascule en asy-mode********
et pourtant C-c C-c continu à faire le vilain...

J'ai bien étudié le code `two-mode-mode' et je ne vois rien qui soit
appelé après `two-mode-switch-hook'.

Ce problème est reproductible sur Emacs 21 et 22 mais tout baigne sous
XEmacs.

Je vous serais reconnaissant de me proposer le moindre début d'idée.
--
Merci de votre attention et excusez moi d'avoir aussi long,
Philippe Ivaldi.
http://piprim.tuxfamily.org/

3 réponses

Avatar
Olivier
Bonjour,

C-c C-c est un raccourci "universel" qui est censé être
mis sur "faire la chose naturelle". Je ne sais pas comment
latex la code, mais c'est probablement avec une liste d'association
last-command / next-command.
Pas trop le temps d'aller fouiller mais c'est la piste que
je privilégie. Curieusement, je ne trouve aucune doc sur ce C-c C-c,
seulement mes souvenirs :-(
Je ne sais pas coment est programmé asy-mode non plus, mais
emacs n'est pas vraiment fait pour avoir deux modes majeurs, quoiqu'en
fasse mm-mode. Ceci dit, on doit pouvoir des bindings locaux,
à coup de redefine-key je pense, mais une affectation de last-command
en entrant en asy-mode peut suffir.

Mes deux sous !
Bon courage !
Amitiés,
Olivier
Avatar
Ph. Ivaldi
Le 04 juin 2007, Olivier écrivit :

C-c C-c est un raccourci "universel" qui est censé être
mis sur "faire la chose naturelle". Je ne sais pas comment
latex la code, mais c'est probablement avec une liste d'association
last-command / next-command.
Pas trop le temps d'aller fouiller mais c'est la piste que
je privilégie. Curieusement, je ne trouve aucune doc sur ce C-c C-c,
seulement mes souvenirs :-(



Je vais essayé de regarder le code de AucTeX (je ne sais pas pourquoi je
n'ai pas le source).

Je ne sais pas coment est programmé asy-mode non plus, mais
emacs n'est pas vraiment fait pour avoir deux modes majeurs,



Tout fonctionne bien sauf cette histoire de "biding"; c'est un détail
mais c'est dommage.

Ceci dit, on doit pouvoir des bindings locaux,
à coup de redefine-key je pense, mais une affectation de last-command
en entrant en asy-mode peut suffir.



J'ai essayé pleins de trucs, rien n'y fait.
C'est assez déroutant de voir qu'il suffit de déplacer le curseur une
seule fois pour que le bon raccourci soit pris en compte.
Comment expliquer que sous XEmacs il n'y a pas de problème ?

Mes deux sous !



Je vais continué à explorer...

Bon courage !



Merci, j'ai passé la journée d'hier sous Windows pour faire fonctionner
ce paquet, il en faut de la patience pour développer un module Emacs...
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/
Avatar
Ph. Ivaldi
Je n'ai rien trouvé de mieux que de faire un `defadvice' sur
`TeX-command-master':

(when (not running-xemacs-p)
(defadvice TeX-command-master (around asy-choose-compile act)
"Hack to circumvent the preempt of 'C-c C-c' by AucTeX
within `lasy-mode'."
(if (string= "asymptote" (downcase mode-name))
(asy-compile)
ad-do-it)))

--
Philippe Ivaldi.
http://piprim.tuxfamily.org/