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

Reply via email to