## ## Example script that watches all VMD Tcl callbacks and prints ## messages as events occur ## set mytracedmollist {} proc printtrace {varname args} { upvar #0 $varname var puts "$varname was updated to be \"$var\"" } proc printtracem {varname mol rw} { puts "$varname was updated for molecule $mol" } proc printtracemolid {varname args} { puts "$varname($mol) updated...." } proc enabletrace_molid { molid } { set mcblist { ::vmd_frame ::vmd_molecule ::vmd_initialize_structure ::vmd_timestep ::vmd_trajectory_read } foreach mcb $mcblist { set str [format "%s(%d)" $mcb $molid] puts "adding trace on: $str" eval "trace variable $str w printtracemolid" } } proc disabletrace_molid { molid } { set mcblist { ::vmd_frame ::vmd_molecule ::vmd_initialize_structure ::vmd_timestep ::vmd_trajectory_read } foreach mcb $mcblist { set str [format "%s(%d)" $mcb $molid] puts "removing trace on: $str" eval "trace vdelete $str w printtracemolid" } # foreach mcb $mcblist { # eval "trace variable $mcb([molinfo top]) w printtracem" # } } proc updatetrace_molschanged { } { global mytracedmollist # delete any existing traces foreach molid $mytracedmollist { disabletrace_molid $molid } # update mollist set mytracedmollist [molinfo list] foreach molid $mytracedmollist { enabletrace_molid $molid } } proc enabletrace {} { global vmd_molecule set cblist { ::vmd_quit ::vmd_logfile ::vmd_pick_shift_state ::vmd_pick_mol ::vmd_pick_atom ::vmd_pick_client ::vmd_pick_mol_silent ::vmd_pick_atom_silent ::vmd_pick_graphics ::vmd_pick_selection ::vmd_pick_value ::vmd_mouse_mode ::vmd_mouse_submode } set mcblist { ::vmd_frame ::vmd_molecule ::vmd_initialize_structure ::vmd_timestep ::vmd_trajectory_read } foreach cb $cblist { puts "adding trace on: $cb" eval "trace variable $cb w printtrace" } foreach mcb $mcblist { puts "adding trace on: $mcb" eval "trace variable $mcb w printtracem" } } proc disabletrace {} { set cblist { ::vmd_quit ::vmd_logfile ::vmd_pick_shift_state ::vmd_pick_mol ::vmd_pick_atom ::vmd_pick_client ::vmd_pick_mol_silent ::vmd_pick_atom_silent ::vmd_pick_graphics ::vmd_pick_selection ::vmd_pick_value ::vmd_mouse_mode ::vmd_mouse_submode } set mcblist { ::vmd_frame ::vmd_molecule ::vmd_initialize_structure ::vmd_timestep ::vmd_trajectory_read } foreach cb $cblist { eval "trace vdelete $cb w printtrace" } foreach mcb $mcblist { eval "trace vdelete $mcb w printtracem" } } enabletrace #updatetrace_molschanged