X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/e3624de63c799427fbd95fa5bbef9462f95912c6..3d8d47d7858ae0e043a28f348fe8aec444d0d35a:/IkiWiki/Plugin/external.pm diff --git a/IkiWiki/Plugin/external.pm b/IkiWiki/Plugin/external.pm index 204442c1e..4ce9c8bab 100644 --- a/IkiWiki/Plugin/external.pm +++ b/IkiWiki/Plugin/external.pm @@ -1,6 +1,6 @@ #!/usr/bin/perl # Support for external plugins written in other languages. -# Communication via XML RPC a pipe. +# Communication via XML RPC to a pipe. # See externaldemo for an example of a plugin that uses this. package IkiWiki::Plugin::external; @@ -202,8 +202,16 @@ sub inject ($@) { #{{{ my $sub = sub { IkiWiki::Plugin::external::rpc_call($plugin, $params{call}, @_) }; + $sub=memoize($sub) if $params{memoize}; + + # This will add it to the symbol table even if not present. + no warnings; eval qq{*$params{name}=\$sub}; - memoize($params{name}) if $params{memoize}; + use warnings; + + # This will ensure that everywhere it was exported to sees + # the injected version. + IkiWiki::inject(name => $params{name}, call => $sub); return 1; } #}}} @@ -217,8 +225,7 @@ sub hook ($@) { #{{{ delete $params{call}; IkiWiki::hook(%params, call => sub { - my $ret=IkiWiki::Plugin::external::rpc_call($plugin, $callback, @_); - return $ret; + IkiWiki::Plugin::external::rpc_call($plugin, $callback, @_); }); } #}}}