Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Support multiple plugins. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
55d06d0197be87e6a43701e479d0686f |
User & Date: | peter 2017-12-02 02:54:19.647 |
Context
2017-12-04
| ||
21:51 | Use newer packages. check-in: 57967f90ad user: peter tags: trunk | |
2017-12-02
| ||
02:54 | Support multiple plugins. check-in: 55d06d0197 user: peter tags: trunk | |
01:18 | Changed default pivot to 10. Include GUI choice for 1. check-in: 417dbf4903 user: peter tags: trunk | |
Changes
Changes to Changes.
1 2 3 4 5 6 7 8 | 2017-12-02 Changed default pivot to 10. Include GUI choice for 1. 2017-12-01 Added GUI for multiple plugins. No function yet. Released 2.7.4 | > | 1 2 3 4 5 6 7 8 9 | 2017-12-02 Support multiple plugins. Changed default pivot to 10. Include GUI choice for 1. 2017-12-01 Added GUI for multiple plugins. No function yet. Released 2.7.4 |
︙ | ︙ |
Changes to src/eskil.tcl.
︙ | ︙ | |||
1326 1327 1328 1329 1330 1331 1332 | if {$i >= 0} { incr i lset ::eskil(argv) $i $::eskil($top,separatorview) } else { lappend ::eskil(argv) -sep $::eskil($top,separatorview) } # Prepare plugin | | | | 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 | if {$i >= 0} { incr i lset ::eskil(argv) $i $::eskil($top,separatorview) } else { lappend ::eskil(argv) -sep $::eskil($top,separatorview) } # Prepare plugin if {$::eskil($top,plugin,1) ne "" && \ [dict get $::eskil($top,pluginpinfo,1) file]} { preparePlugin $top set ::eskil($top,cleanup) "plugin $::eskil($top,cleanup)" } } # Clean up after a diff proc cleanupFiles {top} { |
︙ | ︙ | |||
2950 2951 2952 2953 2954 2955 2956 | set ::eskil($top,ancestorFile) "" set ::eskil($top,separator) "" set ::eskil($top,separatorview) "" set ::eskil($top,conflictFile) "" set ::eskil($top,limitlines) 0 set ::eskil($top,gz) 0 set ::eskil($top,maxwidth) 0 | | | 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 | set ::eskil($top,ancestorFile) "" set ::eskil($top,separator) "" set ::eskil($top,separatorview) "" set ::eskil($top,conflictFile) "" set ::eskil($top,limitlines) 0 set ::eskil($top,gz) 0 set ::eskil($top,maxwidth) 0 set ::eskil($top,plugin,1) "" # Copy the collected options from command line foreach {item val} $::eskil(defaultopts) { set ::eskil($top,$item) $val } } |
︙ | ︙ |
Changes to src/plugin.tcl.
︙ | ︙ | |||
199 200 201 202 203 204 205 | set descr [dict get $info descr] puts "Plugin [format %-*s $w \"$plugin\"] : $descr" } } proc preparePlugin {top} { disallowEdit $top | > > > > > > | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | > | > > | | | | | > | > > | | | > > > > | 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 | set descr [dict get $info descr] puts "Plugin [format %-*s $w \"$plugin\"] : $descr" } } proc preparePlugin {top} { disallowEdit $top set in1 $::eskil($top,leftFile) set in2 $::eskil($top,rightFile) foreach item [array names ::eskil $top,pluginname,*] { set n [lindex [split $item ","] end] set allow [dict get $::eskil($top,pluginpinfo,$n) allow] # Pass ::argv to plugin set pArgv $::eskil(argv) if {[info exists ::eskil($top,pluginargv,$n)]} { lappend pArgv {*}$::eskil($top,pluginargv,$n) } $::eskil($top,plugin,$n) eval [list set ::argv $pArgv] # Pass ::Pref to plugin $::eskil($top,plugin,$n) eval [list array set ::Pref [array get ::Pref]] # Pass File info to plugin $::eskil($top,plugin,$n) eval [list set ::File(left) $::eskil($top,leftFile)] $::eskil($top,plugin,$n) eval [list set ::File(right) $::eskil($top,rightFile)] set out1 [tmpFile] set out2 [tmpFile] set chi [open $in1 r] set cho [open $out1 w] set chi2 [open $in2 r] set cho2 [open $out2 w] interp share {} $chi $::eskil($top,plugin,$n) interp share {} $cho $::eskil($top,plugin,$n) interp share {} $chi2 $::eskil($top,plugin,$n) interp share {} $cho2 $::eskil($top,plugin,$n) set cmd1 [list PreProcess left $chi $cho] set cmd2 [list PreProcess right $chi2 $cho2] if {[info commands yield] ne ""} { # When in 8.6, this is done in coroutines allowing each call # to yield and to alternate between them until done set c1 __plugin_cr1$top set c2 __plugin_cr2$top set cmd1 [linsert $cmd1 0 coroutine $c1] set cmd2 [linsert $cmd2 0 coroutine $c2] set usenew1 [$::eskil($top,plugin,$n) eval $cmd1] set usenew2 [$::eskil($top,plugin,$n) eval $cmd2] interp alias {} pnw $::eskil($top,plugin,$n) namespace which while {[pnw $c1] ne {} || [pnw $c2] ne {}} { if {[pnw $c1] ne {}} { set usenew1 [$::eskil($top,plugin,$n) eval $c1] } if {[pnw $c2] ne {}} { set usenew2 [$::eskil($top,plugin,$n) eval $c2] } } } else { set usenew1 [$::eskil($top,plugin,$n) eval $cmd1] set usenew2 [$::eskil($top,plugin,$n) eval $cmd2] } if {$allow} { $::eskil($top,plugin,$n) eval close $chi $::eskil($top,plugin,$n) eval close $cho $::eskil($top,plugin,$n) eval close $chi2 $::eskil($top,plugin,$n) eval close $cho2 } else { $::eskil($top,plugin,$n) invokehidden close $chi $::eskil($top,plugin,$n) invokehidden close $cho $::eskil($top,plugin,$n) invokehidden close $chi2 $::eskil($top,plugin,$n) invokehidden close $cho2 } close $chi close $cho close $chi2 close $cho2 if {$usenew1} { # The file after processing should be used both # for comparison and for displaying. if {![info exists ::eskil($top,leftFileBak)]} { set ::eskil($top,leftFileBak) $::eskil($top,leftFile) } unset -nocomplain ::eskil($top,leftFileDiff) set ::eskil($top,leftFile) $out1 } else { set ::eskil($top,leftFileDiff) $out1 } if {$usenew2} { if {![info exists ::eskil($top,rightFileBak)]} { set ::eskil($top,rightFileBak) $::eskil($top,rightFile) } unset -nocomplain ::eskil($top,rightFileDiff) set ::eskil($top,rightFile) $out2 } else { set ::eskil($top,rightFileDiff) $out2 } # For next plugin, if any set in1 $out1 set in2 $out2 } } proc cleanupPlugin {top} { if {[info exists ::eskil($top,leftFileBak)]} { set ::eskil($top,leftFile) $::eskil($top,leftFileBak) } |
︙ | ︙ | |||
534 535 536 537 538 539 540 | if {$n >= $t} { unset ::eskil($top,pluginname,$n) set ::eskil($top,plugininfo,$n) "" set ::eskil($top,pluginallow,$n) 0 } } | | > > | | | | | | | | | | | | | | | | | | | | | | > | 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 | if {$n >= $t} { unset ::eskil($top,pluginname,$n) set ::eskil($top,plugininfo,$n) "" set ::eskil($top,pluginallow,$n) 0 } } # Handle all plugins foreach item [array names ::eskil $top,pluginname,*] { set n [lindex [split $item ","] end] if {$::eskil($top,pluginname,$n) ne ""} { set pinterp [createPluginInterp $::eskil($top,pluginname,$n) \ $::eskil($top,plugininfo,$n) \ $::eskil($top,pluginallow,$n) pinfo] } else { set pinterp "" set pinfo "" } set ::eskil($top,plugin,$n) $pinterp set ::eskil($top,pluginpinfo,$n) $pinfo set ::eskil($top,pluginargv,$n) {} foreach {name flag doc} $::eskil($top,edit,opts,$n) { if {$flag} { if {[info exists ::eskil($top,edit,$name,$n)] && \ $::eskil($top,edit,$name,$n)} { lappend ::eskil($top,pluginargv,$n) $name } } else { if {[info exists ::eskil($top,edit,$name,$n)] && \ $::eskil($top,edit,$name,$n) ne ""} { lappend ::eskil($top,pluginargv,$n) $name \ $::eskil($top,edit,$name,$n) } } } } } # Put Tcl code in a text widget, with some syntax highlighting proc TextViewTcl {t data} { |
︙ | ︙ |
Changes to src/startup.tcl.
︙ | ︙ | |||
81 82 83 84 85 86 87 | close $ch } # Get all other source files InitReSource # Diff functionality is in the DiffUtil package. | | | 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 | close $ch } # Get all other source files InitReSource # Diff functionality is in the DiffUtil package. package require DiffUtil 0.4 # Help DiffUtil to find a diff executable, if needed catch {DiffUtil::LocateDiffExe $::eskil(thisScript)} # Create font for PDF if {$::Pref(printFont) eq ""} { set fontfile $::eskil(thisDir)/embedfont.ttf } else { |
︙ | ︙ | |||
921 922 923 924 925 926 927 | set pinterp [createPluginInterp $plugin $plugininfo $pluginallow pinfo] if {$pinterp eq ""} { # This should not happen since the validator should handle it puts "Bad plugin: $plugin" printPlugins exit } | > | | | 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 | set pinterp [createPluginInterp $plugin $plugininfo $pluginallow pinfo] if {$pinterp eq ""} { # This should not happen since the validator should handle it puts "Bad plugin: $plugin" printPlugins exit } # TBD: Support multiple plugins on command line. set opts(plugin,1) $pinterp set opts(pluginname,1) $plugin set opts(pluginallow,1) $pluginallow set opts(plugininfo,1) $plugininfo set opts(pluginpinfo,1) $pinfo } # Store the command line given opts set ::eskil(defaultopts) [array get opts] # Do we start in clip diff mode? if {$doclip} { |
︙ | ︙ |