--- cvs-local.orig/dirdiff
+++ cvs-local/dirdiff
@@ -563,7 +563,7 @@
 	    if {$d1 == $d2} continue
 	    set any 1
 	    $base.p.$sub1 add command -label "$d2" \
-		    -command "makepatch \"$d1\" \"$d2\""
+		    -command [list makepatch $d1 $d2]
 	}
 	if {$any} {
 	    $base.p add cascade -label "$d1 ->" -menu $base.p.$sub1
@@ -579,7 +579,7 @@
     set i 0
     foreach d $dirs {
 	if {!$dirreadonly($i)} {
-	    $base.t add command -label $d -command "touchfiles \"$d\""
+	    $base.t add command -label $d -command [list touchfiles $d]
 	}
 	incr i
     }
@@ -677,7 +677,7 @@
     set i 0
     foreach d $dirs {
 	.bar.options add checkbutton -label "Read-only $d" \
-		-variable dirreadonly($i) -command "readonlychange $i"
+		-variable dirreadonly($i) -command [list readonlychange $i]
 	incr i
     }
 
@@ -1153,7 +1153,7 @@
 	if {$xi != ""} {
 	    set x [lindex $dirs $xi]
 	    $diffbut add command -label "Show $x" \
-		    -command "showfile \"$x\" \"$selfile\""
+		    -command [list showfile $x $selfile]
 	}
     } elseif {$numgroups > 1} {
 	if {$numgroups > 2} {
@@ -1163,7 +1163,7 @@
 		lappend x [lindex $dirs $i]
 	    }
 	    $diffbut add command -label "$numgroups-way diff" \
-		-command "diffn {$x} {$selfile}"
+		-command [list diffn $x $selfile]
 	}
 	for {set gn 1} {$gn < $numgroups} {incr gn} {
 	    set yi [lindex $groupelts($gn) 0]
@@ -1184,7 +1184,7 @@
 		set xi [lindex $groupelts($go) 0]
 		if {$xi == ""} continue
 		set x [lindex $dirs $xi]
-		set cmd "diff2 \"$x\" \"$y\" \"$selfile\""
+		set cmd [list diff2 $x $y $selfile]
 		if {$numgroups <= 3} {
 		    if {$compound_ok} {
 			$diffbut add command -label "$x vs. $y" \
@@ -1283,7 +1283,7 @@
                 set cl2 [lindex $bgcolors($ng) $age]
                 if {$im2 == "ex"} {set im2 ""}
 		set y [lindex $dirs $dst]
-		set cmd "copyselfile \"$src\" \"$dst\" \"$selfile\" 0"
+		set cmd [list copyselfile $src $dst $selfile 0]
 		if {$any == 1} {
 		    if {$compound_ok} {
 			$copybut add command -label "$x -> $y" \
@@ -1346,7 +1346,7 @@
                 set im2 [lindex $agecolors($ng) $age]
                 set cl2 [lindex $bgcolors($ng) $age]
 		set y [lindex $dirs $dst]
-		set cmd "copyselfile \"$src\" \"$dst\" \"$selfile\" 1"
+		set cmd [list copyselfile $src $dst $selfile 1]
 		if {$any == 1} {
 		    if {$compound_ok} {
 			$copybut add command -label "$x -> $y" \
@@ -1392,10 +1392,10 @@
                 if {$compound_ok} {
 		    $copybut add command -label "Remove from $x" \
                         -image ex -compound left \
-			-command "removeselfile \"$dst\" \"$selfile\""
+			-command [list removeselfile $dst $selfile]
                 } else {
 		    $copybut add command -label "Remove from $x" \
-			-command "removeselfile \"$dst\" \"$selfile\""
+			-command [list removeselfile $dst $selfile]
                 }
 	    }
 	}
@@ -1415,7 +1415,7 @@
 		if {$dirreadonly($d)} continue
 		set y [lindex $dirs $d]
 		$copybut add command -label "$x -> $y" \
-			-command "copyselfile \"$s\" \"$d\" \"$selfile\" 0"
+			-command [list copyselfile $s $d $selfile 0]
 	    }
 	}
 	set needsep 1
@@ -1429,10 +1429,10 @@
             if {$compound_ok} {
 	        $copybut add command -label "Remove from $x" \
                     -image ex -compound left \
-		    -command "removeselfile \"$s\" \"$selfile\""
+		    -command [list removeselfile $s $selfile]
             } else {
 	        $copybut add command -label "Remove from $x" \
-		    -command "removeselfile \"$s\" \"$selfile\""
+		    -command [list removeselfile $s $selfile]
             }
 	}
     }
@@ -1469,7 +1469,7 @@
 
     # Show the file in an external viewer
     if { [llength $showprogram] > 0} {
-       eval "exec $showprogram \"$fn\" &"
+       exec $showprogram $fn &
        return
     }
     # Or make our own viewer
@@ -1569,7 +1569,7 @@
     set diffopts "-U $ctxlines $diffiflag $diffwflag $diffbflag $diffBflag $diffdflag"
 
     if { [llength $diffprogram] > 0} {
-       eval "exec $diffprogram \"$path1\" \"$path2\" &"
+       exec $diffprogram $path1 $path2 &
        return
     }
     # If we used an external diff program, its options are used.  If we didn't,
@@ -1750,7 +1750,7 @@
 	    if {$gx == $g && !$dirreadonly($k)} {
 		set f [lindex $dirs $k]
 		$mergebut.m add command -label "update $f" \
-		    -command "diffmerge $i \"$f\""
+		    -command [list diffmerge $i $f]
 		set path [joinname $f $difffile]
 		set diffmtime($path) [file mtime $path]
 	    }
@@ -1770,7 +1770,7 @@
 	    if {$gx == $g && !$dirreadonly($k)} {
 		set f [lindex $dirs $k]
 		$mpatchbut.m add command -label "for $f" \
-		    -command "diffmpatch $i \"$f\""
+		    -command [list diffmpatch $i $f]
 	    }
 	    incr k
 	}
@@ -3424,7 +3424,7 @@
     $w.bar.edit.m add command -label Copy -command "tk_textCopy $w.t"
     $w.bar.edit.m add command -label Paste -command "tk_textPaste $w.t"
     $w.bar.edit.m add command -label Find \
-	    -command "difffind :merge:$di:$fi $w.t"
+	    -command [list difffind :merge:$di:$fi $w.t]
     pack $w.bar.edit -side left
     frame $w.f -relief sunk -border 2
     entry $w.f.filename
@@ -3533,7 +3533,7 @@
     $w.bar.edit.m add command -label Copy -command "tk_textCopy $w.t"
     $w.bar.edit.m add command -label Paste -command "tk_textPaste $w.t"
     $w.bar.edit.m add command -label Find \
-	    -command "difffind :mpatch:$fi $w.t"
+	    -command [list difffind :mpatch:$fi $w.t]
     pack $w.bar.edit -side left
     frame $w.f -relief sunk -border 2
     entry $w.f.filename
@@ -3993,7 +3993,7 @@
        $w.bar.edit.m add command -label Copy -command "tk_textCopy $w.t"
        $w.bar.edit.m add command -label Paste -command "tk_textPaste $w.t"
        $w.bar.edit.m add command -label Find \
-	    -command "difffind :patch:$patchnum $w.t"
+	    -command [list difffind :patch:$patchnum $w.t]
        pack $w.bar.edit -side left
        frame $w.f -relief sunk -border 2
        label $w.f.l -text "Filename: "
@@ -4032,23 +4032,23 @@
 	set p1 [joinname $d1 $f]
 	set p2 [joinname $d2 $f]
 	if {[file exists $p1] && [file exists $p2]} {
-	    set fh [open "|diff $contextopt $p1 $p2" r]
+	    set fh [open [list |diff $contextopt $p1 $p2] r]
 	} elseif {[file exists $p1] && ! [file exists $p2]} {
-	    set fh [open "|diff $contextopt $p1 $nullfile" r]
+	    set fh [open [list |diff $contextopt $p1 $nullfile] r]
 	} elseif {! [file exists $p1] && [file exists $p2]} {
-	    set fh [open "|diff $contextopt $nullfile $p2" r]
+	    set fh [open [list |diff $contextopt $nullfile $p2] r]
 	} else {
             continue
 	}
 	fconfigure $fh -blocking 0
-	fileevent $fh readable "readpatch $fh $pnum $w $d1 $d2 $i \"$f\""
+	fileevent $fh readable [list readpatch $fh $pnum $w $d1 $d2 $i $f]
 	return
     }
     if {[string match ".*" $w]} {
        $w.t delete "end - 1c" end
     } else {
         close $w
-        eval "exec $showprogram \"$patch_outfile\" &"
+        exec $showprogram $patch_outfile &
         # Should we remove the tempfile here?  We don't have it if we used 
         # the internal viewer
     }