Le 06/10/2014 14:54, Stéphane Mourey a écrit :
Voilà, j'ai commencé à jeter un coup d'oeil aux sources, et bien que
tout cela soit encore bien hermétique pour moi, j'ai réussi à glane
quelques éléments judicieux à l'aide de quelques greps bien utilisés.
Très bonne résolution, allons-y ensemble.
Voici :
* ce qui m'intéresse se joue dans quatre fichiers "seulement" :
LyXAction.cpp, FuncCode.h, BufferView.cpp, et Buffer.cpp (y
aura-t-il lieu d'intervenir sur Buffer.h et BufferView.h ?). Il
semblerait qu'il n'y ait pas de modifications nécessaires dans
Buffer.cpp bien que l'essentiel de l'action s'y déroule.
LyXAction et FuncCode servent à déclarer les fonctions. Le code qui
permet d'exécuter les fonctions se trouve dans d'autres fichiers. En
particulier:
* BufferView pour les fonction globales à un buffer, mais qui ont
besoin d'une interface graphique
* Buffer pour les fonctions globales à un buffer et n'ont pas
d'interface graphique. C'est ce fichier là que nous voulons ici.
Il n'est donc pas nécessaire de toucher à BufferView.*.
* je ne comprend pas bien le fonctionnement de LyXAction.cpp, mais
j'ai l'impression qu'il sert à faire le lien entre la commande reçue
par le serveur (statistics) et le nom de la fonction en interne
(LFUN_STATISTICS)
Exact, et il y a en plus une série de drapeaux indiquant quand cette
fonction peut être utilisée.
* j'aurai donc besoin d'y rajouter une ligne de code du style
{ LFUN_STATISTICS_NOVIEW, "statistics-noview", ReadOnly, /Buffer /}
Exact, par contre, je propose comme nom LFUN_SERVER_GET_STATISTICS (voir
plus bas)
en ajoutant les commentaires de documentation qui vont bien
* FuncCode.h semble lister les fonctions LyX en utilisant leur nom
interne, il faudrait que j'y ajoute une ligne :
LFUN_STATISTICS_NOVIEW, // brokenclock 20141006
Oui (au nom près)
* dans BufferView.cpp, il faudrait que j'ajoute
LFUN_STATISTICS_NOVIEW dans la liste des cas de la ligne 1068 à 1089,
Dans Buffer.cpp, plutôt. Il faut en effet ajouter un case dans
Buffer::getStatus. C'est là qu'on dit si la fonction est activée ou pas.
Ici, elle est toujours activée.
* dans le même, il faut que je m'inspire du bloc "case
LFUN_STATISTICS" commençant à la ligne 1656 pour créer un autre bloc
"case LFUN_STATISTICS_NOVIEW",
Oui, c'est cela.
* le sens du bloc existant est essentiellement d'appeler le code
réellement fonctionnel (qui se trouve dans Buffer.cpp), puis de
mettre en forme le résultat et de l'afficher.
Si on veut utiliser le serveur, il suffira de renvoyer la valeur comme
résultat de la fonction.
* dans le bloc à produire, à la limite, que je me contenter de
récupérer les mêmes informations, mais au lieu de le mettre en forme
pour un affichage, j'envoie celui qui m'intéresse vers ~/.lyxpipe.out
Exact, sauf que c'est LyX qui va s'occuper de faire le boulot.
Et maintenant, les questions qui vont avec tout ça :
* j'ai bon ?
PPas mal pour un débutant :)
* comment je reçois les paramètres reçus par lyxserver dans
BufferView.cpp (dans le bloc "case LFUN_STATISTICS_NOVIEW) ?
Cela va y aller tout seul. Quand une fonction arrive, elle est envoyée
dans l'ordre à un tas de récepteur possible, jusqu'à ce qu'un d'eux dise
qu'il peut s'en occuper.
* comment je fais pour écrire proprement dans ~/.lyxpipe.out ?
Le mieux est de regarder le fonctions LFUN_SERVER_GET_xxx (d'où le
changement de nom ci-dessus).
Ici, la commande magique sera
result.setMessage(le résultat à renvoyer);
Le résultat de la fonction sera automatiquement renvoyé au bon endroit.
Il faut encore décider le format du résultat en question en regardant
comment sont faites les autres fonctions de serveur.
Bon courage.
JMarc