Hi John and Jeff,
Just now i made a quick attempt to handle all kind of methods in tkcon.tcl (i started with the newest version from the cvs repository http://tkcon.sourceforge.net/). The code tgries to be least invasive, there are almost certainly more elegant ways to handle this, however, it seems to work pretty well with procs, instprocs (as well with instprocs from mixins). See the following script, where i have added the lines with the <TAB> keys.
======= (scripts) 4 % package require XOTcl 1.3.6 (scripts) 5 % namespace import ::xotcl::* (scripts) 6 % Class create M -instproc foo {} {puts hi} ::M (scripts) 7 % Object o ::o (scripts) 8 % o set<TAB> self set (scripts) 8 % o set x 1 1 (scripts) 9 % o mixin M foo forward (scripts) 10 % o fo<TAB> =======
just replace ::tkcon::ExpandProcname with the proc below.
Jeff, I am not too happy about the way expandOrder is evaluated, but this might be a misleading impression of a new user. frequently, the expansion of pathnames overrules the proc expansion. how about doing the pathname expansion (optionally) when the path starts with one of "./~"?
all the best -gustaf
===================================================== proc ::tkcon::ExpandProcname str { # in a first step, get the cmd to check, if we should handle subcommands set cmd [::tkcon::CmdGet $::tkcon::PRIV(console)] # if there are two cmds, and xotcl is loaded, do the xotcl magic if {[llength $cmd]==2 && [EvalAttached [list info exists ::xotcl::version]]} { set o [lindex $cmd 0] set sub [lindex $cmd 1] set match [EvalAttached [list $o info methods $sub*]] } else { # standard behavior set match [EvalAttached [list info commands $str*]] if {[llength $match] == 0} { set ns [EvalAttached \ "namespace children [namespace current] [list $str*]"] if {[llength $ns]==1} { set match [EvalAttached [list info commands ${ns}::*]] } else { set match $ns } } } if {[llength $match] > 1} { regsub -all {([^\]) } [ExpandBestMatch $match $str] {\1\ } str set match [linsert $match 0 $str] } else { regsub -all {([^\]) } $match {\1\ } match } return $match } =====================================================