[script nvda] Re: [script nvda] Re: [script nvda] Re: [script nvda] RE: [script nvda] Re: [script nvda] RE: [script nvda] Re: [script-NVDA] Extension Conjugaison (implémentation de l'aide contextuelle)

  • From: yannick <philaos31@xxxxxxx>
  • To: scriptnvda@xxxxxxxxxxxxx
  • Date: Sun, 5 Jun 2022 12:49:34 +0200

salut Paul.
lorsque ton module est chargé  et que je tape dans la console help(gui.messageBox),
on a la ligne :
Help on function myMessageBox in module globalPlugins.NVDAExtensionGlobalPlugin.utils.messageBox:
cette ligne signifie  que l'on a bien à faire avec ton module.
il y a une petite erreur qui n'est pas lié à ton module, c'est dans la description de la fonction.
on a la ligne :
myMessageBox(message: str, caption: str = b'Message', style: int = 5, parent: Union[wx._core.Window, NoneType] = None) ->
il s'agit du second paramètre :
caption: str = b'Message'
ici caption vaut part défaut le mot "message" au format binaire.
si dans la (volet journalisation) console,je fais control +a, la longueur de la sélèction est de 620 caractères,
et la dernière ligne est :
    @return: Same as for wx.MessageBox.
maintenant je désactive ton module, je retourne dans la console et je tape à nouveau  help(gui.messageBox).
la ligne qui faisait référence à ton globalPlugin est remplacé par :
Help on function messageBox in module gui.message:
on a toujours l'erreur :
caption: str = b'Message'
il y a toujours le préfixage de l'argument.
maintenant si je sélèctionne tout dans le volet de journalisation, la longueur de la sélèction est de 1247 caractères.
et la dernière ligne est :
    some actions such as shutting down are prevented while NVDA is in a possibly uncertain state.
en fait, voici le  texte que l'on trouve dans la version originale de gui.messageBox et qui disparait dans ta version :
(ps  pourune raison de  lisibilité, je ne mets pas l'entièreté de l'aide
    `gui.message.messageBox` is a function which blocks the calling thread,
    until a user responds to the modal dialog.
    This function should be used when an answer is required before proceeding.
    Consider using a custom subclass of a wxDialog if an answer is not required
    or a default answer can be provided.

    It's possible for multiple message boxes to be open at a time.
    Before opening a new messageBox, use `isModalMessageBoxActive`
    to check if another messageBox modal response is still pending.

    Because an answer is required to continue after a modal messageBox is opened,
    some actions such as shutting down are prevented while NVDA is in a possibly uncertain state.

Le 04/06/2022 à 17:38, Paulber19 (paulber19) a écrit :


Ce n'est pas ce que je constate quand je tape help(gui.messageBox):
J'obtiens.
Help on function myMessageBox in module globalPlugins.NVDAExtensionGlobalPlugin.utils.messageBox:myMessageBox(message: str, caption: str = b'Message', style: int = 5, parent: Union[wx._core.Window, NoneType] = None) -> int    Display a message dialog.    This should be used for all message dialogs rather than using C{wx.MessageDialog} and C{wx.MessageBox} directly.    @param message: The message text.    @param caption: The caption (title) of the dialog.    @param style: Same as for wx.MessageBox.    @param parent: The parent window.    @return: Same as for wx.MessageBox.
Amitiés.
Paul.
Le 04/06/2022 16:50, yannick a écrit :

merci Cyril.

Tiens je viens  tout juste de me rendre compte de quelque chose :

je suis en train de lire le module gui.

j'ai demandé l'aide de gui.messageBox,

généralement on ne lie jamais les premières lignes par paresse.

et bien j'ai vu que l'extension de Paul a remplacé l'original, ce qui fait que toute l'aide n'était pas incluse ...

Le 04/06/2022 à 15:21, cyrille.bougot2 (cyrille.bougot2) a écrit :

Non.

Si tu redéfinis _/get/_name pour une classe fille, on ne parle pas de monkey patch.

Par contre, si tu redéfinis _/get/_name comme suit, c’est du monkey patching :

### Début code

import NVDAObjects

from logHandler import log

original_get_name = NVDAObjects.NVDAObject._get_name

def new_get_name(self) -> str:

log.debug("J'appelle _get_name!")

original_get_name(self)

NVDAObjects.NVDAObject._get_name = new_get_name

### Fin code

A+

Cyrille

*De :*scriptnvda-bounce@xxxxxxxxxxxxx <scriptnvda-bounce@xxxxxxxxxxxxx> *De la part de* yannick
*Envoyé :* samedi 4 juin 2022 12:23
*À :* scriptnvda@xxxxxxxxxxxxx
*Objet :* [script nvda] Re: [script nvda] RE: [script nvda] Re: [script-NVDA] Extension Conjugaison (implémentation de l'aide contextuelle)

salut Cyril.
lorsque je redéfini la méthode _get_name, on ne parle pas de monkey patch n'est ce pas ?
(j'ai d'autre question, mais je dois poser une par une et laisser décanter )

Le 04/06/2022 à 11:38, cyrille.bougot2 (cyrille.bougot2) a écrit :

    Salut

    « monkey patch » ne s’oppose pas à « extension » en soi.

    En fait plusieurs extensions NVDA et NVDA lui-même utilisent le
    monkey patching.

    Le monkey patching est une solution consistant à remplacer une
    fonction par une autre. Ce n’est pas très propre, car ça peut
    avoir des effets de bord indésirables. Mais c’est utile
    lorsqu’il n’y a pas d’autre solution. Les effets indésirables
    peuvent survenir lorsque une même fonction est monkey patchée
    par deux extensions différentes.

    Le monkey patching dans les extensions de NVDA patchent
    généralement des fonctions de NVDA lui-même.

    Le monkey patching dans NVDA lui-même patche des fonctions de
    bibliothèques python qu’il utilise (ex : ctypes)

    Les solutions plus propres que du monkey patching sont tout ce
    qui est prévu par NVDA et Python pour modifier le comportement
    de base de NVDA : class overlay + héritage, points d’extension, etc.

    Le monkey patching n’a rien à voir avec l’aide contextuelle.
    C’est juste que Abdel l’a utilisé pour modifier le système de
    base de l’aide contextuelle de NVDA. Mais ça peut s’appliquer à
    n’importe quelle fonction. Si tu veux d’autres exemples, dans
    mes extensions :

      * Dans Windows Magnifier, je patch scriptHandler.findScript et
        ui.message
      * Dans NVDA Debug & Test Toolbox, je patche plusieurs
        fonctions également, notamment speech.speak

    A+

    Cyrille

    *De :* scriptnvda-bounce@xxxxxxxxxxxxx
    <mailto:scriptnvda-bounce@xxxxxxxxxxxxx>
    <scriptnvda-bounce@xxxxxxxxxxxxx>
    <mailto:scriptnvda-bounce@xxxxxxxxxxxxx> *De la part de* yannick
    *Envoyé :* samedi 4 juin 2022 10:44
    *À :* scriptnvda@xxxxxxxxxxxxx <mailto:scriptnvda@xxxxxxxxxxxxx>
    *Objet :* [script nvda] Re: [script-NVDA] Extension Conjugaison
    (implémentation de l'aide contextuelle)

    bonjour je ne sais pas si Abdel est sur cette nouvelle liste,
    mais bien entendu la question est ouverte à toutes et tous.

    il s'agit de l'aide contextuelle.

    selon wikipédia, le fait d'écrire un monkey patch consiste à
    injecter du code directement dans un autre programme.

    D'après ce que je comprends,contrairement aux extensions rien
    n'est balisé, rien n'est prévu, sinon on n'aurait pas parlé de
    monkey patch .

    Bien entendu  je remercie Abdel pour  les explications, mais je
    me pose une question :

    l'utilisation par Abdel du terme monkey patch est elle destinée
    à toutes les versions de NVDA ou aux versions de NVDA qui n'ont
    pas l'aide contextuelle ?

    merci !

    Le 10/09/2021 à 08:53, Abdel a écrit :

        Salut les amis,

        Je vais essayer d'expliquer comment j'ai implémenté le
        monkey patch de la fonction "gui.contextHelp.showHelp".

        Dans le module "__init__.py" de l'extension, à la ligne 31,
        j'ai sauvegardé la valeur par défaut de cette fonction.

        Je l'ai introduite dans une condition, pour bien assuré la
        rétrocompatibilité avec les versions de NVDA antérieures à
        2021.1, qui n'utilisent pas "gui.contextHelp" :

            if hasattr (gui, 'contextHelp'):

                saveShowHelp = gui.contextHelp.showHelp



        J'ai donc prévu d'utiliser l'aide contextuelle dans les 2
        situations suivantes :

          * Lorsque l'utilisateur ouvre le dialogue de conjugaison
            en réalisant le raccourci-clavier "Contrôle + F5" ou en
            passant par les menus;
          * Lorsque l'utilisateur accède à la catégorie
            "Conjugaison" dans le panneau des paramètres.


        Pour la seconde situation, l'implémentation était plus
        simple, il fallait juste ajouter l'attribut "helpId =
        'conjugaisonSettings'" dans la sous-classe héritant de
        "gui.settingsDialogs.SettingPanel".

        L'attribut "helpId" est déjà implémenté dans la classe mère
        dans "nvda-2021.1" et plus.

        Cependant, il fallait prévoir le retour à la valeur initiale
        de la fonction "gui.contextHelp.showHelp" dans les autres
        situations !

        Parmi ces situations :

          * Si l'utilisateur valide sur "OK" ou "Annuler" après
            avoir saisi un verbe dans la boîte de dialogue de choix
            de verbe à conjuguer; (L'implémentation est dans la
            fonction "callback" de la méthode "onConjugationDialog ").
          * Si l'utilisateur change de catégorie dans le panneau des
            paramètres. (L'implémentation est présente dans la
            fonction "event_gainFocus").



        Bien entendu, j'aurais préféré ne pas recourir au "monkey
        patch", bien que je sais très bien que c'est une pratique
        autorisée.

        Voili voilou, je vous souhaite une agréable fin de semaine.

        Cordialement,
        Abdel.

        _._,_._,_

        ------------------------------------------------------------------------

        Groups.io Links:

        You receive all messages sent to this group.

        View/Reply Online (#320)
        <https://groups.io/g/script-NVDA/message/320> | Reply To
        Group
        
<mailto:script-NVDA@xxxxxxxxx?subject=Re:%20%3D%3FUTF-8%3FB%3FW3NjcmlwdC1OVkRBXSBFeHRlbnNpb24gQ29uanVnYWlzb24gKGltcGzDqW1lbnRhdGlvbiBkZSBsJ2FpZGUgY29udGV4dHVlbGxlKQ%3D%3D%3F%3D>
        | Reply To Sender
        
<mailto:abdelkrim.bensaid@xxxxxxx?subject=Private:%20Re:%20%3D%3FUTF-8%3FB%3FW3NjcmlwdC1OVkRBXSBFeHRlbnNpb24gQ29uanVnYWlzb24gKGltcGzDqW1lbnRhdGlvbiBkZSBsJ2FpZGUgY29udGV4dHVlbGxlKQ%3D%3D%3F%3D>
        | Mute This Topic <https://groups.io/mt/85503991/5120334> |
        New Topic <https://groups.io/g/script-NVDA/post>
        Your Subscription
        <https://groups.io/g/script-NVDA/editsub/5120334> | Contact
        Group Owner <mailto:script-NVDA+owner@xxxxxxxxx> |
        Unsubscribe
        <https://groups.io/g/script-NVDA/leave/9576903/5120334/583712717/xyzzy>
        [philaos31@xxxxxxx <mailto:philaos31@xxxxxxx>]

        _._,_._,_


Other related posts:

  • » [script nvda] Re: [script nvda] Re: [script nvda] Re: [script nvda] RE: [script nvda] Re: [script nvda] RE: [script nvda] Re: [script-NVDA] Extension Conjugaison (implémentation de l'aide contextuelle) - yannick