## ## Example script that watches all VMD Tcl callbacks and prints ## messages as events occur ## proc printtrace {varname args} { upvar #0 $varname var puts "CALLBACK: $varname was updated to be \"$var\"" } proc printtracem {varname mol rw} { puts "CALLBACK: $varname was updated for molecule $mol" } 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