[Mono-list] GSilver: A linux app using mono similar to QuickSilver for mac

Michael Gorbach mgorbach at yahoo.com
Mon Jun 26 12:25:12 EDT 2006

Hello everyone,
I am new to the linux community and I would like to make an attempt to contribute some GPL software of my own. My idea is to create a framework for linux that would be similar to quicksilver for Mac. Originally this will probably be best run on gnome but I hope to create some expandable so interfaces can easily be built in the future. The goal of this post is to explain what I want this app to be and more importnatly to ask for your help on several issues (my dev experience is only in C# so far, and even in that area it is small). I will start by talking about what quicksilver is, the way i see it (and hence what gsilver will be, I hope)

Quicksilver is a framework that brings some of the power of the command line to the desktop through a three part interface. First, you choose the object you want to act on, such as an application, a contact, a file, a running process, a server in known_hosts, etc. Then you choose an action (run, open, copy, move, ssh to, ftp to, write email to, etc). For some actions, you can choose a third "object", i.e. a file to send in an attachment, a program to open a file with, a folder to copy a file to. All these concepts will be familiar to those that use the command line in linux/unix. Quicksilver makes this power accessible in a way that is simultaneously fast, elegant, and beautiful. It is accessed with a keyboard shortcut (something like alt-space). From there, you start typing to select an application, file, contact, etc. It is very intelligent about helping you get to your selected item with a minimum of typing, for example ff will get you to firefox. QS suggestions
 "actions" for each item. If the first action suggested is not what you are looking for, you press tab and start typing again to pull up your selected action. Optionally, something similar can be done for the third part (the object). I think a linux-based implementation of the quicksilver framework can go even further and be even more powerful than the mac version, because of the structure of unix/linux and the console abilities of its users.

The underlying architecture of quicksilver, as I understand it, is based on "collections" of items. There is a collection of applications, a collection of files, a collection of contacts, and so on. Certain actions are associated with collections, for example "run" is association with applications, "email to" or "call" or "IM" may be associated with contacts. They key is that collections of items and actions can be added easily through plugins. Supported could be implemented for things like thunderbird, gaim, ssh, compression (tar, gzip, etc.), scp/sftp, browser bookmarks, rss feeds, ... the list goes on and on. Plugins support can also be extended to the interface of the program itself.

I have started implementing this basic structure of "collections", "items", and "actions." Once some of this is done, I plan to try an make an interface using cairo-sharp that require alpha channel support (either with xgl or graphics driver extensions). Of course, other interfaces can be created (one for KDE, or command line, or one that doesn't require alpha).

There are several issues I have been dealing with in which I could really use some help:
1. Beagle or not?
Does it make sense to use beagle to do things like find applications (.desktop files i guess), document files, and many of the other things beagle indexers have been created for. My main concern is that beagle search is not fast enough, and does not have the architecture to support the needs of an app like quicksilver. Beagle was not designed as a launcher so it does not have things like instant response to new keys pressed, or the ability to remember shortcuts the user has used before (ff to launch firefox, for example). So far, I have not been using beagle but have implemented my own (for now crappy) indexers for .desktop files and known_hosts (these are the two catalogs I decided to start with).

2. Searching algorithms in the text
Quicksilver is free but not open source unfortunatly. Therefore I can not look at how they deal with searching through text like item names or actions names and pulling up the right one. I have noticed a few things about their implementation:
a. They have some sort of memory system that allows the catalog to remember your previous choices. If you type in ff the first time, firefox will show up but will not be the first thing on the list. If you then start firefox using "ff", firefox will be first on the list next time you type "ff".
b. They do not require the strings you type to be found consecutively in the word, so typing ff brings up firefox even if the two characters are not found together in the name.
c. Somehow, it seems that programs where more of your letters typed show up consecutively together seem to come up higher in the list than those where they are farther apart.
I have no real idea how to implement these algorithms, and even if I did I can't figure out how to merge the different ratings items get from criteria a, b, and c into an ordering. Also, there may be other criteria. If someone could suggest either implementation ideas or more ideas for criteria, that would be great.

3. Plugin architecture
I dont know much about building plugin-able software in .net. If there is some information availible that someone could like me to, that would be great.

4. If someone has any ideas on how to implement the "collections" "items" "actions" concepts in terms of classes and inheritance, while keeping the system extendable with plugins, those would also be very, very helpful.

Sorry for the long post, and I look forward to hearing from some of you soon.

Michael Gorbach

More information about the Mono-list mailing list