J'aimerais pouvoir faire afficher dans mon buffer, le résultat d'une
fonction.
Concrètement, je sais compter dans mon buffer (fichier tex ici) le
nombre de fois où apparaît l'expression << \begin{exercice} >> (avant le
curseur ou dans l'ensemble du buffer). J'aimerais que ceci s'affiche:
Ce que je souhaite, c'est lancer une commande qui mettra à jour les
numéros de mes exercices. Par exemple, si je rajoute un exercice entre
le n°2 et le n°3, je souhaite que mon nouvel exercice obtienne le numéro
3 et que le numéro de l'ancien exercice 3 passe à 4.
J'ai deux idées (que je ne sais pas comment programmer malheureusement):
- soit faire une fonction qui va écrire dans le fichier à côté de chaque
<< \begin{exercice} >> le numéro de mon exercice de la façon suivante:
avec une regexp on cherche l'expression, on applique
kmacro-insert-counter puis on recommence avec l'expression suivante
- soit faire en sorte qu'il y ait dans le buffer une instruction qui
s'adresse à emacs pour qu'il remplace cette commande par le résultat de
mon compteur d'exercice. Quelque chose comme:
dans le buffer:
\begin{exercice}
% "commande spéciale pour emacs"
puis je ferais:
M-x remplace-commande-speciale-pour-emacs-par-valeur-du-compteur
et j'aurais:
\begin{exercice}
% 1
...
\begin{exercice}
% 2
Merci d'avance pour votre aide ou encore pour tout début de piste.
Stéphane
J'aimerais pouvoir faire afficher dans mon buffer, le résultat d'une fonction. Concrètement, je sais compter dans mon buffer (fichier tex ici) le nombre de fois où apparaît l'expression << begin{exercice} >> (avant le curseur ou dans l'ensemble du buffer). J'aimerais que ceci s'affiche:
Tu tombes sur le code de count-matches (enfin, how-many, il y a un alias), que tu recopies pour la modifier (et changer de nom). Vers la fin de cette fonction tu trouves (setq count (1+ count)), qui incrémente le compteur. Juste après, tu utilises insert (et sûrement format) pour placer la valeur dans le buffer.
-- Alain.
Merci Alain, je vais essayer cela. Stéphane
Le 21/10/2012 17:39, Alain Ketterlin a écrit :
Stéphane Dutailly <dutaillys@yahoo.fr> writes:
J'aimerais pouvoir faire afficher dans mon buffer, le résultat d'une
fonction.
Concrètement, je sais compter dans mon buffer (fichier tex ici) le
nombre de fois où apparaît l'expression << begin{exercice} >> (avant
le curseur ou dans l'ensemble du buffer). J'aimerais que ceci
s'affiche:
Tu tombes sur le code de count-matches (enfin, how-many, il y a un
alias), que tu recopies pour la modifier (et changer de nom). Vers la
fin de cette fonction tu trouves (setq count (1+ count)), qui incrémente
le compteur. Juste après, tu utilises insert (et sûrement format) pour
placer la valeur dans le buffer.
J'aimerais pouvoir faire afficher dans mon buffer, le résultat d'une fonction. Concrètement, je sais compter dans mon buffer (fichier tex ici) le nombre de fois où apparaît l'expression << begin{exercice} >> (avant le curseur ou dans l'ensemble du buffer). J'aimerais que ceci s'affiche:
Tu tombes sur le code de count-matches (enfin, how-many, il y a un alias), que tu recopies pour la modifier (et changer de nom). Vers la fin de cette fonction tu trouves (setq count (1+ count)), qui incrémente le compteur. Juste après, tu utilises insert (et sûrement format) pour placer la valeur dans le buffer.
Alors j'ai essayé et cela fait exactement ce que je cherche à faire (j'ai juste remplacé (re-search-forward "^s-*ends-*{exercice}" nil t) par (re-search-forward "\begin{exercice}" nil t) car sinon rien ne se passait) Merci beaucoup Vincent. Je vais donc passer à la finalisation de ce que je cherche à faire. En effet, cette fonction me permet de savoir à quel begin{exercice} j'en suis en affichant le numéro à la ligne du dessous. Le problème, c'est que lorsque je relance la fonction, le numéro s'affiche à nouveau. Par exemple, si je lance 3 fois la fonction, j'obtiens:
begin{exercice} % 1 % 1 % 1
blablabla
begin{exercice}
% 2 % 2 % 2 ...
Je voudrais donc que ma fonction supprime la ligne qui suit mon begin{exercice} puis ré-affiche le numéro (je pourrais par exemple avoir 2 fonctions: celle-ci que j’appellerais la 1ere fois puis la deuxième qui commencerait par supprimer la ligne qui suit avant d'afficher le numéro).
Je n'ai pas le temps de tester tout cela pour l'instant. Je vais chercher un peu et je vous redemanderai sans doute de l'aide lorsque j'aurai avancé. Si quelqu'un peut me dire comment faire pour effacer la ligne qui suit mon begin{exercice}, je ne suis tout de même pas contre car j'espère pouvoir ensuite me débrouiller. Je suppose qu'à la place de: (insert (format "%% %dn" compteur))) il me faudrait quelque chose comme (kill-nextline) (j'ai essayé mais kill-nextline n'existe pas; j'ai essayé en mettant kill-whole-line, qui existe, mais j'obtiens une erreur).
Alors j'ai essayé et cela fait exactement ce que je cherche à faire
(j'ai juste remplacé
(re-search-forward "^\s-*\end\s-*{exercice}" nil t)
par
(re-search-forward "\\begin{exercice}" nil t)
car sinon rien ne se passait)
Merci beaucoup Vincent. Je vais donc passer à la finalisation de ce que
je cherche à faire. En effet, cette fonction me permet de savoir à quel
begin{exercice} j'en suis en affichant le numéro à la ligne du dessous.
Le problème, c'est que lorsque je relance la fonction, le numéro
s'affiche à nouveau. Par exemple, si je lance 3 fois la fonction, j'obtiens:
begin{exercice}
% 1
% 1
% 1
blablabla
begin{exercice}
% 2
% 2
% 2
...
Je voudrais donc que ma fonction supprime la ligne qui suit mon
begin{exercice} puis ré-affiche le numéro (je pourrais par exemple
avoir 2 fonctions: celle-ci que j’appellerais la 1ere fois puis la
deuxième qui commencerait par supprimer la ligne qui suit avant
d'afficher le numéro).
Je n'ai pas le temps de tester tout cela pour l'instant. Je vais
chercher un peu et je vous redemanderai sans doute de l'aide lorsque
j'aurai avancé.
Si quelqu'un peut me dire comment faire pour effacer la ligne qui suit
mon begin{exercice}, je ne suis tout de même pas contre car j'espère
pouvoir ensuite me débrouiller. Je suppose qu'à la place de:
(insert (format "%% %dn" compteur)))
il me faudrait quelque chose comme
(kill-nextline)
(j'ai essayé mais kill-nextline n'existe pas; j'ai essayé en mettant
kill-whole-line, qui existe, mais j'obtiens une erreur).
Alors j'ai essayé et cela fait exactement ce que je cherche à faire (j'ai juste remplacé (re-search-forward "^s-*ends-*{exercice}" nil t) par (re-search-forward "\begin{exercice}" nil t) car sinon rien ne se passait) Merci beaucoup Vincent. Je vais donc passer à la finalisation de ce que je cherche à faire. En effet, cette fonction me permet de savoir à quel begin{exercice} j'en suis en affichant le numéro à la ligne du dessous. Le problème, c'est que lorsque je relance la fonction, le numéro s'affiche à nouveau. Par exemple, si je lance 3 fois la fonction, j'obtiens:
begin{exercice} % 1 % 1 % 1
blablabla
begin{exercice}
% 2 % 2 % 2 ...
Je voudrais donc que ma fonction supprime la ligne qui suit mon begin{exercice} puis ré-affiche le numéro (je pourrais par exemple avoir 2 fonctions: celle-ci que j’appellerais la 1ere fois puis la deuxième qui commencerait par supprimer la ligne qui suit avant d'afficher le numéro).
Je n'ai pas le temps de tester tout cela pour l'instant. Je vais chercher un peu et je vous redemanderai sans doute de l'aide lorsque j'aurai avancé. Si quelqu'un peut me dire comment faire pour effacer la ligne qui suit mon begin{exercice}, je ne suis tout de même pas contre car j'espère pouvoir ensuite me débrouiller. Je suppose qu'à la place de: (insert (format "%% %dn" compteur))) il me faudrait quelque chose comme (kill-nextline) (j'ai essayé mais kill-nextline n'existe pas; j'ai essayé en mettant kill-whole-line, qui existe, mais j'obtiens une erreur).
Merci pour tout. Stéphane
jack-mac
Le jeudi 8 novembre 2012 22:30:05 UTC+1, Stéphane Dutailly a écrit :
Le 23/10/2012 06:01, Vincent Belaïche a écrit :
> Stéphane Dutailly writes:
>> Le 21/10/2012 17:39, Alain Ketterlin a écrit : >>> Stéphane Dutailly writes:
Alors j'ai essayé et cela fait exactement ce que je cherche à faire (j'ai juste remplacé (re-search-forward "^s-*ends-*{exercice}" nil t) par (re-search-forward "\begin{exercice}" nil t) car sinon rien ne se passait) Merci beaucoup Vincent. Je vais donc passer à la finalisation de ce que je cherche à faire. En effet, cette fonction me permet de savoir à qu el begin{exercice} j'en suis en affichant le numéro à la ligne du desso us. Le problème, c'est que lorsque je relance la fonction, le numéro s'affiche à nouveau. Par exemple, si je lance 3 fois la fonction, j'obt iens:
begin{exercice} % 1 % 1 % 1
blablabla
begin{exercice}
% 2 % 2 % 2 ...
Je voudrais donc que ma fonction supprime la ligne qui suit mon begin{exercice} puis ré-affiche le numéro (je pourrais par exemple avoir 2 fonctions: celle-ci que jappellerais la 1ere fois puis la deuxième qui commencerait par supprimer la ligne qui suit avant d'afficher le numéro).
Je n'ai pas le temps de tester tout cela pour l'instant. Je vais chercher un peu et je vous redemanderai sans doute de l'aide lorsque j'aurai avancé. Si quelqu'un peut me dire comment faire pour effacer la ligne qui suit mon begin{exercice}, je ne suis tout de même pas contre car j'espère pouvoir ensuite me débrouiller.
Ben justement, c'est ce que propose Vincent: (beginning-of-line 2) (if (looking-at "%s-+[0-9]+s-+$") (replace-match (format "%% %d" compteur) t) (insert (format "%% %dn" compteur))) qui se lit comme suit: Aller au début de la ligne suivante. Si la ligne contient déjà le compteur, alors remplacer le numéro trou vé par le nouveau numéro sinon insérer le nouveau numéro.
S'il réinsère un numéro à chaque fois, c'est qu'il semble qu'il y a it un petit problème dans le looking-at...
(il me suffit de le tester avec ma fonction magique jd-looking-at pour voir qu'il ne matche pas tout)
Je propose alors de le remplacer par (looking-at "%s-+[0-9]+$")
et le tour est joué!
Le jeudi 8 novembre 2012 22:30:05 UTC+1, Stéphane Dutailly a écrit :
Le 23/10/2012 06:01, Vincent Belaïche a écrit :
> Stéphane Dutailly writes:
>> Le 21/10/2012 17:39, Alain Ketterlin a écrit :
>>> Stéphane Dutailly writes:
Alors j'ai essayé et cela fait exactement ce que je cherche à faire
(j'ai juste remplacé
(re-search-forward "^\s-*\end\s-*{exercice}" nil t)
par
(re-search-forward "\\begin{exercice}" nil t)
car sinon rien ne se passait)
Merci beaucoup Vincent. Je vais donc passer à la finalisation de ce que
je cherche à faire. En effet, cette fonction me permet de savoir à qu el
begin{exercice} j'en suis en affichant le numéro à la ligne du desso us.
Le problème, c'est que lorsque je relance la fonction, le numéro
s'affiche à nouveau. Par exemple, si je lance 3 fois la fonction, j'obt iens:
begin{exercice}
% 1
% 1
% 1
blablabla
begin{exercice}
% 2
% 2
% 2
...
Je voudrais donc que ma fonction supprime la ligne qui suit mon
begin{exercice} puis ré-affiche le numéro (je pourrais par exemple
avoir 2 fonctions: celle-ci que jappellerais la 1ere fois puis la
deuxième qui commencerait par supprimer la ligne qui suit avant
d'afficher le numéro).
Je n'ai pas le temps de tester tout cela pour l'instant. Je vais
chercher un peu et je vous redemanderai sans doute de l'aide lorsque
j'aurai avancé.
Si quelqu'un peut me dire comment faire pour effacer la ligne qui suit
mon begin{exercice}, je ne suis tout de même pas contre car j'espère
pouvoir ensuite me débrouiller.
Ben justement, c'est ce que propose Vincent:
(beginning-of-line 2)
(if (looking-at "%\s-+[0-9]+\s-+$")
(replace-match (format "%% %d" compteur) t)
(insert (format "%% %dn" compteur)))
qui se lit comme suit:
Aller au début de la ligne suivante.
Si la ligne contient déjà le compteur, alors remplacer le numéro trou vé par le nouveau numéro
sinon insérer le nouveau numéro.
S'il réinsère un numéro à chaque fois, c'est qu'il semble qu'il y a it un petit problème dans le looking-at...
(il me suffit de le tester avec ma fonction magique jd-looking-at pour voir qu'il ne matche pas tout)
Je propose alors de le remplacer par (looking-at "%\s-+[0-9]+$")
Alors j'ai essayé et cela fait exactement ce que je cherche à faire (j'ai juste remplacé (re-search-forward "^s-*ends-*{exercice}" nil t) par (re-search-forward "\begin{exercice}" nil t) car sinon rien ne se passait) Merci beaucoup Vincent. Je vais donc passer à la finalisation de ce que je cherche à faire. En effet, cette fonction me permet de savoir à qu el begin{exercice} j'en suis en affichant le numéro à la ligne du desso us. Le problème, c'est que lorsque je relance la fonction, le numéro s'affiche à nouveau. Par exemple, si je lance 3 fois la fonction, j'obt iens:
begin{exercice} % 1 % 1 % 1
blablabla
begin{exercice}
% 2 % 2 % 2 ...
Je voudrais donc que ma fonction supprime la ligne qui suit mon begin{exercice} puis ré-affiche le numéro (je pourrais par exemple avoir 2 fonctions: celle-ci que jappellerais la 1ere fois puis la deuxième qui commencerait par supprimer la ligne qui suit avant d'afficher le numéro).
Je n'ai pas le temps de tester tout cela pour l'instant. Je vais chercher un peu et je vous redemanderai sans doute de l'aide lorsque j'aurai avancé. Si quelqu'un peut me dire comment faire pour effacer la ligne qui suit mon begin{exercice}, je ne suis tout de même pas contre car j'espère pouvoir ensuite me débrouiller.
Ben justement, c'est ce que propose Vincent: (beginning-of-line 2) (if (looking-at "%s-+[0-9]+s-+$") (replace-match (format "%% %d" compteur) t) (insert (format "%% %dn" compteur))) qui se lit comme suit: Aller au début de la ligne suivante. Si la ligne contient déjà le compteur, alors remplacer le numéro trou vé par le nouveau numéro sinon insérer le nouveau numéro.
S'il réinsère un numéro à chaque fois, c'est qu'il semble qu'il y a it un petit problème dans le looking-at...
(il me suffit de le tester avec ma fonction magique jd-looking-at pour voir qu'il ne matche pas tout)
Je propose alors de le remplacer par (looking-at "%s-+[0-9]+$")
et le tour est joué!
Stéphane Dutailly
Super!!! C'est exactement ce que je cherchais à faire. Un grand merci à tous! Stéphane
Super!!! C'est exactement ce que je cherchais à faire.
Un grand merci à tous!
Stéphane