Le 13/10/2014 15:25, Stéphane Mourey a écrit :
Bonjour,
Merci à tous pour votre aide, vos compliments, votre soutien !
J'ai essayé de prendre toutes vos remarques en considération, et voici
ce que cela donne.
On va voir ça :) (pour commencer, n'oublie pas de garder les messages
sur la liste, c'est mieux).
La bonne forme est:
Buffer & buffer = cur.buffer();
Erreur lors de la compilation :
Text3.cpp:2396:32: error: invalid initialization of non-const
reference of type ‘lyx::Buffer&’ from an rvalue of type ‘lyx::Buffer*’
Buffer & buffer = cur.buffer();
C'est de ma faute, le résultat est en effet un pointeur. C'est très bien
comme tu l'as fait.
Voilà ce que
donne mon code et là, il se compile bien, ce qui est déjà une petite
victoire:
case LFUN_SERVER_GET_STATISTICS:
{
DocIterator from, to;
if (cur.selection()) {
from = cur.selectionBegin();
to = cur.selectionEnd();
} else {
from = doc_iterator_begin(cur.buffer());
to = doc_iterator_end(cur.buffer());
}
cur.buffer()->updateStatistics(from, to);
string arg0 = cmd.getArg(0);
Style: chaque niveau d'indentation doit être une tabulation.
Style: quand on définit une variable qui ne sera pas modifiée ensuite,
on ajoute "const" :
string const arg0 = cmd.getArg(0);
if (arg0 == "words") {
cur.message(convert<docstring>(cur.buffer()->wordCount()));
} else if (arg0 == "chars") {
cur.message(convert<docstring>(cur.buffer()->charCount(false)));
} else if (arg0 == "chars-space") {
cur.message(convert<docstring>(cur.buffer()->charCount(true)));
} else {
cur.message(convert<docstring>(cur.buffer()->wordCount()) + " " +
convert<docstring>(cur.buffer()->charCount(false)) + " " +
convert<docstring>(cur.buffer()->charCount(true)));
}
}
break;
Si tu ne veux pas avoir plein de cur.message, tu peux définir une variable
string result;
et faire un
cur.message(result);
à la fin. Par contre, c'est dur d'éviter les convert à répétition.
Reste plus qu'à tester pour de vrai. J'enlève le paquet LyX fournit par
Ubuntu, je fais "make install", je lance LyX en ligne de commande et
tout a l'air de bien se passer.
Ceci n'est pas nécessaire. LyX peut toujours être lancé depuis le
répertoire de compilation en faisant src/lyx. Il trouvera
automatiquement les fichiers nécessaires.
J'ouvre un document, no problemo.
Logiquement, je passe au test de ma fonction. Et là, je coince. Dans une
nouvelle console, histoire de voire ce que LyX afficherait sur la ligne
de commande où je l'ai lancé (il n'affichera rien de plus) :
echo "LYXCMD:bro:server-get-statistics:" >~/.lyxpipe.in
cat ~/.lyxpipe.out
Et là, j'ai été quelque peu surpris par le fonctionnement des fichiers
~/.lyxpipe.in et ~/.lyxpipe.out, à tel point que j'ai d'abord cru que
rien ne marchait.
Car si je lance "cat ~/.lyxpipe.out", il ne se passe rien, il ne me rend
pas la main, du moins jusqu'à ce que j'ai envoyé quelque chose sur
~/.lyxpipe.in... du coup j'en arrive à quelques acrobaties intéressantes :
Oui, je ne sais pas trop comment les pipes (tuyaux) marchent. Ce que je
conseille est d'utiliser lyxclient (src/client/lyxclient), qui fait les
trucs compliqués à ta place.
Qu'en pensez-vous ? Des améliorations à apporter ? Cela vaut-il la peine
de soumettre la contribution ? Si oui, comment s'y prendre ?
Ça a l'air très bien, et oui, ce serait une addition intéressante. Pour
faire cela il faut faire un patch. Est-ce que tu travailles depuis git
ou depuis le tar.gz de LyX ? Selon les cas, la méthode varie.
J'imagine que tu as travaillé depuis la version stable 2.1.x ? Il faudra
qu'on commence par appliquer à la version développement 2.2, la version
stable vient après. Normalement, il n'y aura pas besoin de trop adapter
le code.
JMarc