Updated 2009-11-21 10:36:50 by jnc

The Tcllib contains a package to safely manage plugins to applications called plugin.

You can find the documentation at:


Anyone care to post a simple example? --- jnc 2007-09-19

AK same day - The page::pluginmgr in the page module of Tcllib uses the pluginmgr.

Ok, with the help of AK I was able to get a simple example together... The example is nothing more than a Hello World, with a twist... We can say hello/goodbye in multiple manners. The two plugins I created are Simple and Slang.

1. Create two plugins: You can place plugins in multiple locations, but for my example I made a directory ~/.example/plugin ... That is where I placed the plugin code.

~/.example/plugin/simple.tcl
  proc hello {name} {
    return "Hello $name."
  }

  proc goodbye {name} {
      return "Goodbye $name."
  }

  package provide example::plugin::simple 0.1

~/.example/plugin/slang.tcl
  proc hello {name} {
      return "What's up $name?"
  }

  proc goodbye {name} {
      return "Well, $name. See ya later!"
  }

  package provide example::plugin::slang 0.1

~/.example/plugin/pkgIndex.tcl
  package ifneeded example::plugin::simple 0.1 [list source [file join $dir simple.tcl]]
  package ifneeded example::plugin::slang  0.1 [list source [file join $dir slang.tcl]]

2. Create our program to use the plugins. This you can place anywhere, I always keep a directory for learning, ~/develop/learning/example.tcl is my file.
  package require pluginmgr

  set plugApi { hello goodbye }

  pluginmgr plug -pattern example::plugin::* -api $plugApi
  pluginmgr::paths plug example

  plug load simple
  puts "Simple: [plug do hello John]"
  puts "Simple: [plug do goodbye John]"

  plug load slang
  puts "Slang:  [plug do hello John]"
  puts "Slang:  [plug do goodbye John]"

3. Now run your code!.
  $ tclsh example.tcl
  Simple: Hello John.
  Simple: Goodbye John.
  Slang:  What's Up John?
  Slang:  Well, John, see ya later!

--- jnc 2007-09-19