blob: b44e162fe75fa3ccb6d4aa71179c6781e8581f66 (
plain)
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
|
# this is a plugin for Pd 0.43 that adds the ability to associate Pd patches
# with filetypes like .wav, .ogg, etc.
package provide file_associations 0.1
namespace eval ::file_associations:: {
namespace export pdtk_post
}
proc ::file_associations::load_file_associations {} {
set ::associationsdir "[pwd]/../associations"
# TODO this should search the whole path for 'associations' in order to
# support user-installed associations, not only included ones
puts stderr "find_file_associations $::associationsdir"
if { ! [file isdirectory $::associationsdir]} { return }
foreach filename [glob -directory $::associationsdir -nocomplain -types {f} -- *.pd] {
set extension [file rootname [file tail $filename]]
puts "\tAssociating $filename to $extension"
lset ::filetypes 0 1 [concat [lindex $::filetypes 0 1] ".$extension"]
set ::filetypes [lappend ::filetypes \
[list "[string toupper $extension] files" ".$extension"]]
}
}
proc ::file_associations::menu_open {} {
pdtk_post "using menu_open from file_associations.tcl"
if { ! [file isdirectory $::pd_menucommands::menu_open_dir]} {
set ::pd_menucommands::menu_open_dir $::env(HOME)
}
set files [tk_getOpenFile -defaultextension .pd \
-multiple true \
-filetypes $::filetypes \
-initialdir $::pd_menucommands::menu_open_dir]
if {$files ne ""} {
foreach filename $files {
set extension [lindex [split $filename .] end]
if {$extension == "pd"} {
puts "open_file $filename"
open_file $filename
} else {
set assocpatchfile [open [file join $::associationsdir "$extension.pd"]]
set patchcontents [regsub -all -- "\\\$FILENAME" [read $assocpatchfile] $filename]
close $assocpatchfile
pdsend "pd filename [file tail $filename].pd \
[enquote_path $::pd_menucommands::menu_open_dir]"
pdsend $patchcontents
pdsend "#X pop 1"
}
}
set ::pd_menucommands::menu_open_dir [file dirname $filename]
}
}
#::file_associations::load_file_associations
# TODO insert code to override built-in menu_open proc
|