Accueil





Fonction de désinstallation propre d'un script



Cette procédure de désinstallation est prévue pour des scripts utilisant un namespace, ce qui est la seule façon "propre" de faire un script.

Votre script ainsi pourvu sera désinstallé automatiquement avant chaque rehash / restart, ou à chaque fois que vous le rechargerez au moyen de la commande .tcl source scripts/nom_de_votre_script.tcl

Cela vous permettra de modifier des choses dans le code de votre script, et de le recharger aussi proprement que si vous aviez redémarré votre Eggdrop.

Cela vous permettra également de désinstaller simplement votre script en tapant .tcl ::YOURNAMESPACE::uninstall

Si votre script n'utilise pas de timers ou d'utimers, vous pouvez enlever les lignes correspondantes dans la procédure uninstall afin de ne pas encombrer inutilement votre code.
Si votre script ne déclare pas de package au moyen de package provide YOURSCRIPTNAME, vous pouvez enlever la ligne package forget YOURSCRIPTNAME.
Si votre script n'utilise pas de packs de langue (msgcat), vous pouvez enlever les lignes correspondantes.


A placer avant toute autre ligne de code dans votre script
if {[::tcl::info::commands ::YOURNAMESPACE::uninstall] eq "::YOURNAMESPACE::uninstall"} { ::YOURNAMESPACE::uninstall }


Procédure à placer de préférence avant toute autre procédure dans votre script
############################################################################### # Procédure de désinstallation : le script se désinstalle totalement avant # chaque rehash ou à chaque relecture au moyen de la commande "source" ou autre. ############################################################################### proc ::YOURNAMESPACE::uninstall {args} { putlog "Désallocation des ressources de YOURSCRIPTNAME..." # Suppression des binds. foreach binding [lsearch -inline -all -regexp [binds *[set ns [::tcl::string::range [namespace current] 2 end]]*] " \{?(::)?$ns"] { unbind [lindex $binding 0] [lindex $binding 1] [lindex $binding 2] [lindex $binding 4] } # Arrêt des timers en cours. foreach running_timer [timers] { if { [::tcl::string::match "*[namespace current]::*" [lindex $running_timer 1]] } { killtimer [lindex $running_timer 2] } } # Arrêt des utimers en cours. foreach running_utimer [utimers] { if { [::tcl::string::match "*[namespace current]::*" [lindex $running_utimer 1]] } { killutimer [lindex $running_utimer 2] } } # On décharge les packs de langue. if { [::tcl::dict::exists $::msgcat::Msgs [::msgcat::mclocale] [namespace current]] } { ::tcl::dict::unset ::msgcat::Msgs [::msgcat::mclocale] [namespace current] } namespace delete ::YOURNAMESPACE # Suppression de la déclaration de package. package forget YOURSCRIPTNAME }


Bind
bind evnt - prerehash ::YOURNAMESPACE::uninstall

©2005-2016 Menz Agitat