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>]
_._,_._,_