/usr/lib/puredata/tcl/wheredoesthisgo.tcl is in puredata-gui 0.48.1-3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | package provide wheredoesthisgo 0.1
# a place to temporarily store things until they find a home or go away
proc open_file {filename} {
set directory [file normalize [file dirname $filename]]
set basename [file tail $filename]
if { ! [file exists $filename]} {
::pdwindow::post [format [_ "Ignoring '%s': doesn't exist"] $filename]
# remove from recent files
::pd_guiprefs::update_recentfiles $filename true
return
}
if {[regexp -nocase -- "\.(pd|pat|mxt)$" $filename]} {
::pdtk_canvas::started_loading_file [format "%s/%s" $basename $filename]
pdsend "pd open [enquote_path $basename] [enquote_path $directory]"
# now this is done in pd_guiprefs
::pd_guiprefs::update_recentfiles $filename
} else {
::pdwindow::post [format [_ "Ignoring '%s': doesn't look like a Pd-file"] $filename]
}
}
# ------------------------------------------------------------------------------
# procs for panels (openpanel, savepanel)
proc pdtk_openpanel {target localdir} {
if {! [file isdirectory $localdir]} {
if { ! [file isdirectory $::fileopendir]} {
set ::fileopendir $::env(HOME)
}
set localdir $::fileopendir
}
set filename [tk_getOpenFile -initialdir $localdir]
if {$filename ne ""} {
set ::fileopendir [file dirname $filename]
pdsend "$target callback [enquote_path $filename]"
}
}
proc pdtk_savepanel {target localdir} {
if {! [file isdirectory $localdir]} {
if { ! [file isdirectory $::filenewdir]} {
set ::filenewdir $::env(HOME)
}
set localdir $::filenewdir
}
set filename [tk_getSaveFile -initialdir $localdir]
if {$filename ne ""} {
pdsend "$target callback [enquote_path $filename]"
}
}
# ------------------------------------------------------------------------------
# path helpers
# adds to the sys_searchpath user search paths directly
proc add_to_searchpaths {path {save true}} {
# try not to add duplicates
foreach searchpath $::sys_searchpath {
set dir [string trimright $searchpath [file separator]]
if {"$dir" eq "$path"} {
return
}
}
# tell pd about the new path
if {$save} {set save 1} else {set save 0}
pdsend "pd add-to-path [pdtk_encodedialog ${path}] $save"
# append to search paths as this won't be
# updated from the pd core until a restart
lappend ::sys_searchpath "$path"
}
# ------------------------------------------------------------------------------
# window info (name, path, parents, children, etc.)
proc lookup_windowname {mytoplevel} {
set window [array get ::windowname $mytoplevel]
if { $window ne ""} {
return [lindex $window 1]
} else {
return ERROR
}
}
proc tkcanvas_name {mytoplevel} {
return "$mytoplevel.c"
}
# ------------------------------------------------------------------------------
# window helpers
# position one window over another
proc position_over_window {child parent} {
if {![winfo exists $parent]} {return}
# use internal tk::PlaceWindow http://wiki.tcl.tk/534
# so fallback if not available
if {[catch {tk::PlaceWindow $child widget $parent}]} {
set x [expr [winfo x $parent] + ([winfo width $parent] / 2) - ([winfo reqwidth $child] / 2)]
set y [expr [winfo y $parent] + ([winfo height $parent] / 2) - ([winfo reqheight $child] / 2)]
wm geometry $child "+${x}+${y}"
}
}
# ------------------------------------------------------------------------------
# quoting functions
# enquote a string for find, path, and startup dialog panels, to be decoded by
# sys_decodedialog()
proc pdtk_encodedialog {x} {
concat +[string map {" " "+_" "$" "+d" ";" "+s" "," "+c" "+" "++"} $x]
}
# encode a list with pdtk_encodedialog
proc pdtk_encode { listdata } {
set outlist {}
foreach this_path $listdata {
if {0==[string match "" $this_path]} {
lappend outlist [pdtk_encodedialog $this_path]
}
}
return $outlist
}
# TODO enquote a filename to send it to pd, " isn't handled properly tho...
proc enquote_path {message} {
string map {"," "\\," ";" "\\;" " " "\\ "} $message
}
#enquote a string to send it to Pd. Blow off semi and comma; alias spaces
#we also blow off "{", "}", "\" because they'll just cause bad trouble later.
proc unspace_text {x} {
set y [string map {" " "_" ";" "" "," "" "{" "" "}" "" "\\" ""} $x]
if {$y eq ""} {set y "empty"}
concat $y
}
# ------------------------------------------------------------------------------
# watchdog functions
proc pdtk_watchdog {} {
pdsend "pd watchdog"
after 2000 {pdtk_watchdog}
}
proc pdtk_ping {} {
pdsend "pd ping"
}
|