I have fallen in love with Enso, which is an application launcher and much more from Humanized, Inc. It has potential to do so much more than application launch ... it is a awesome productivity enhancer. It takes me a 3 seconds to do stuff that took half a minute. It is better than Launchy and the other products on the market. It is like Quicksilver for windows. I have decided to write my own plugins for Enso and within a few hours did so.
In order to write this extension I needed to find the extension API which was located here. Also you need to download the Enso Developer prototype ( still at version 0.1.1). Unfortunately there was no SOAP support at the moement, all I found was the Xml-Rpc procedures. So I looked for a Xml Rpc library written in .NET and found Cook computings open source implementation at http://www.xml-rpc.net/.
The first step was to create a class that could access all of Enso's exposed functions. The following class below is the proxy class for the Xml-Rpc support in Enso.
public interface IEnso: IXmlRpcProxy { [XmlRpcMethod("displayMessage")] bool DisplayMessage (string text); [XmlRpcMethod("getFileSelection")] string[] GetFileSelection(); [XmlRpcMethod("getUnicodeSelection")] string GetUnicodeSelection(); [XmlRpcMethod("insertUnicodeAtCursor")] void InsertUnicodeAtCursor(string text, string fromCommand); [XmlRpcMethod("registerCommand")] bool RegisterCommand(string url, string name, string description, string help, string postfixType); [XmlRpcMethod("setCommandValidPostfixes")] bool SetCommandValidPostfixes(string url, string name, string postfixes); [XmlRpcMethod("setUnicodeSelection")] bool SetUnicodeSelection(string text, string fromCommand); [XmlRpcMethod("unregisterCommand")] bool UnregisterCommand(string url, string name); }
Then I wrapped a nice class called 'EnsoControl' around the proxy. Now to make an extension ...
Now our extension must implement a method that is invoked by Enso when the command is typed by the user. The interface looks like the one below ..
public interface IEnsoExtension { [XmlRpcMethod("callCommand")] void callCommand(string name, string postfix); }
The extension needs to implement this method in our class.
Try seeing the sample class inside the extension framework zip file which provides a simple replacement command in Enso. Also I had to add an http handler ( details are in the Xml Rpc site) to server the XmlRpc calls.
You can download the source code for Download EnsoExtension.zip .
See the Enso sample replacement extension in action


As i can see in the solution located within the EnsoExtension.zip, it is a websearch-component.
But as in your example you/they don't specify how to register the component in Enso, i've tried just to copy the 2 dlls (EnsoExtension.dll and WebSearchExtension.dll) and the directory with the related xml-files.. with no luck.
I was hoping that its possible to let Enso do the handling with loading the extensions, instead of like how they did it in the python-samples, where they started the extension manual.
Posted by: Eric Larsen | February 17, 2008 at 05:23 PM
And by copied i mean into...
c:\Users\Eric\AppData\Local\HumanizedEnso\components
Posted by: Eric Larsen | February 17, 2008 at 05:38 PM
Enso works via xml http calls. There is web project inside the solution which actually hosts the xmlhttp service and there is also a aspx page that registers the plugin.
Also please make sure that you have downloaded the Enso developer extension, without that the code will not work.
Posted by: Shafqat Ahmed | February 18, 2008 at 09:05 AM