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

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Erwan David
Le #22973261
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 !



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é
Luc.Habert.00__arjf
Le #22973311
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-:.
Erwan David
Le #22973441
(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é
Jean-Claude Marques
Le #22973431
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
Jean-Claude Marques
Le #22973421
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
Luc.Habert.00__arjf
Le #22973411
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).
Luc.Habert.00__arjf
Le #22973401
Jean-Claude Marques :

Oui, mais vital.



Pas d'accord, cf ma réponse à Carlos.
Denis Bitouzé
Le #22973791
Le vendredi 31/12/10 à 09h16,
Jean-Claude Marques
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
Denis Bitouzé
Le #22973921
Le vendredi 31/12/10 à 11h09,
Denis Bitouzé
La syntaxe recommandée est plutôt : og ... fg{}.



Plutôt :

og ...fg{}.
--
Denis
JJ. Rétorré
Le #22973981
Denis Bitouzé
[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.
Publicité
Poster une réponse
Anonyme