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

  • From: "cyrille.bougot2" <dmarc-noreply@xxxxxxxxxxxxx> ("cyrille.bougot2")
  • To: "'script NVDA'" <scriptnvda@xxxxxxxxxxxxx>
  • Date: Sat, 4 Jun 2022 11:38:40 +0200

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 <scriptnvda-bounce@xxxxxxxxxxxxx> De la 
part de yannick
Envoyé : samedi 4 juin 2022 10:44
À : 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] Extension Conjugaison (implémentation de l'aide contextuelle) - cyrille.bougot2