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

Écriture d'une fonction lisp dans ~/.emacs

28 réponses
Avatar
Jean-Claude Marques
Bonjour à tous.

Néophyte complet en Emacs-Lisp, j'ai souvent à écrire \og{} ... \fg{}
(LaTeX) et j'ai tenté d'écrire une fonction Lisp pour qu'Emacs le fasse
à ma place. J'ai inséré dans le ~/.emacs le code ci-dessous :

(defun tex-insert-og-fg nil
(insert "\\og{}" )
(save-excursion
(insert "\\fg{}"))
)

(define-key LaTeX-mode-map [C-f6] 'tex-insert-og-fg)

Lors de C-f6, j'ai le message :
Wrong type argument: commandp, tex-insert-og-fg


Par M-x tex-TAB, la fonction tex-insert-og-fg n'apparaît pas dans la
liste (alors qu'une autre commençant par la même chaîne de caractères
apparaît).

Il y a donc un bug, mais je ne le vois pas.
Si quelqu'un a une idée (et je n'en doute pas !)
En attendant vos réponses, je vous souhaite à tous une bonne et heureuse
nouvelle année !

JC

10 réponses

1 2 3
Avatar
Erwan David
Jean-Claude Marques écrivait :

Bonjour à tous.

Néophyte complet en Emacs-Lisp, j'ai souvent à écrire og{} ... fg{}
(LaTeX) et j'ai tenté d'écrire une fonction Lisp pour qu'Emacs le
fasse à ma place. J'ai inséré dans le ~/.emacs le code ci-dessous :

(defun tex-insert-og-fg nil
(insert "og{}" )
(save-excursion
(insert "fg{}"))
)

(define-key LaTeX-mode-map [C-f6] 'tex-insert-og-fg)

Lors de C-f6, j'ai le message :
Wrong type argument: commandp, tex-insert-og-fg


Par M-x tex-TAB, la fonction tex-insert-og-fg n'apparaît pas dans la
liste (alors qu'une autre commençant par la même chaîne de caractères
apparaît).

Il y a donc un bug, mais je ne le vois pas.
Si quelqu'un a une idée (et je n'en doute pas !)
En attendant vos réponses, je vous souhaite à tous une bonne et
heureuse nouvelle année !



Il faut déclarer ta fonction comme interactive. Il est aussi boon de
mettre une chaine de commentaire qui te facilitera la vie quand
quelqu'un d'autre utilisera ta fonction (ou toi dans 6 mois...)


(defun tex-insert-og-fg nil
"Insert pair of french guillemets"
(interactive)
(insert "og{}" )
(save-excursion
(insert "fg{}"))
)



--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
Luc.Habert.00__arjf
Pour précision:

Erwan David :

"Insert pair of french guillemets"



La documentation de la fonction, c'est facultatif.

(interactive)



Là est le point important. Pour qu'une fonction puisse etre appellée via un
racourci clavier ou M-x, il faut qu'elle soit marquée comme interactive.
C'est pas uniquement pour faire chier, ça permet de préciser quel type
d'argument attendre du minibuffer, via une string qu'on passe en argument à
interactive. Si une fonction n'est pas marquée comme interactive, on ne peut
l'appeller que via M-:.
Avatar
Erwan David
(Luc Habert) écrivait :

Pour précision:

Erwan David :

"Insert pair of french guillemets"



La documentation de la fonction, c'est facultatif.



C'est pour ça que j'ai dit qu'il fallait la déclarer interactive, et
qu'il était bon de mettre une documentation. Autant commencer
directement avec les bonnes habitudes...

--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
Avatar
Jean-Claude Marques
Erwan David a écrit :


Il faut déclarer ta fonction comme interactive. Il est aussi boon de
mettre une chaine de commentaire qui te facilitera la vie quand
quelqu'un d'autre utilisera ta fonction (ou toi dans 6 mois...)


J'avais mis 2 lignes de commentaires : une avant, et une à l'intérieur
de la fonction (la même que la tienne, mais ... en français !


(defun tex-insert-og-fg nil
"Insert pair of french guillemets"
(interactive)
(insert "og{}" )
(save-excursion
(insert "fg{}"))
)


Merci pour cette réponse

JC
Avatar
Jean-Claude Marques
Luc Habert a écrit :
Pour précision:

Erwan David :

"Insert pair of french guillemets"



La documentation de la fonction, c'est facultatif.


Oui, mais vital. Donc ...

(interactive)



Là est le point important. Pour qu'une fonction puisse etre appellée via un
racourci clavier ou M-x, il faut qu'elle soit marquée comme interactive.
C'est pas uniquement pour faire chier, ça permet de préciser quel type
d'argument attendre du minibuffer, via une string qu'on passe en argument à
interactive. Si une fonction n'est pas marquée comme interactive, on ne peut
l'appeller que via M-:.


On (j') en apprend(s) tous les jours ...

Pas bien réactif pour les réponses, mais ma gamine est malade.

JC
Avatar
Luc.Habert.00__arjf
Erwan David :

C'est pour ça que j'ai dit



Pardon, j'avais zappé ton premier paragraphe. Mal réveillé...

qu'il était bon de mettre une documentation



Perso, je suis assez réservé sur ce point. Dans la plupart des cas, le nom
de la fonction est suffisant pour décrire ce qu'elle fait; je vois mal
l'intéret d'écrire un commentaire qui se contente de paraphraser ce nom (et
ça m'agace plus qu'autre chose quand j'en lis, parce que je perds du temps à
lire quelque chose qui ne m'apprend rien).
Avatar
Luc.Habert.00__arjf
Jean-Claude Marques :

Oui, mais vital.



Pas d'accord, cf ma réponse à Carlos.
Avatar
Denis Bitouzé
Le vendredi 31/12/10 à 09h16,
Jean-Claude Marques a écrit :

Néophyte complet en Emacs-Lisp, j'ai souvent à écrire og{} ... fg {}
(LaTeX)



La syntaxe recommandée est plutôt : og ... fg{}. Mais, il me semble
qu'avec auctex, dès lors que le package babel avec l'option frenchb, il
suffit de saisir un « " » :

1. après un espace pour que « og » apparaisse ;

2. après autre chose qu'un espace pour que « fg{} » apparaisse.

Je regrette d'ailleurs que ceci ne fonctionne qu'avec l'option frenchb
de babel car je recommande plutôt de recourir à l'option de classe
french.
--
Denis
Avatar
Denis Bitouzé
Le vendredi 31/12/10 à 11h09,
Denis Bitouzé a écrit :

La syntaxe recommandée est plutôt : og ... fg{}.



Plutôt :

og ...fg{}.
--
Denis
Avatar
JJ. Rétorré
Denis Bitouzé disait le 12/31/10 que :

[Snip]

Je regrette d'ailleurs que ceci ne fonctionne qu'avec l'option frenchb
de babel car je recommande plutôt de recourir à l'option de classe
french.



Il suffit peut-être de se bricoler un
french.el à la façon du frenchb.el
et de le mettre dans ses fichiers de style personnels ?

(TeX-add-style-hook
"french"
(lambda ()
....
(setq TeX-quote-language
`("french" "og "
(lambda ()
(concat "fg"
(unless (member "xspace" TeX-active-styles) "{}")))
,TeX-quote-after-quote))
(run-hooks 'TeX-language-fr-hook)))

--
JJR.
1 2 3