deskbar-applet hotness

Deskbar Applet

Recently Nigel Tao posted on desktop-devel the announce of deskbar-applet, which was intended as a browser-like keyword-driven url bar. You type a web address, or an email address, or a file name, or some keyword then the arguments, an it shows a popup with possible choices from there, like “Search google for foo”.

See this screencast to see the original idea.

I offered to help and we moved the code to gnome CVS under the “deskbar-applet” cvs module, see instructions at the end of the post to get and try it.

Features

We then worked to integrate it a bit more in the desktop, so here are some highlights:

Type a filename in your home dir, like ~/Report.pdf or foo/bar.txt, and you can open that file with the associated applications. Also works with directories.


Type an email address or website name, and you can write a new mail, or surf the website with associated apps.



Type some terms and it will search through all available programs (the .desktop files). Try for example “text” and you are presented with gvim and gedit, type music and you get rhythmbox, muine banshee and other apps like that, you can then launch the program


Terms are also matched against mozilla/firefox/epiphany bookmarks, so if you have a bookmark for Entagged Website, typing entagged will offer you to launch the browser to that address.

deskbar-applet will also use your smart bookmarks wisely. type a search term (“steve” for example), you are then presented a list of smart bookmarks to use with the entered term. I have a Gnome Bugs bookmark in epiphany, that i use with bug numbers, i can enter a number in deskbar-applet and select the “Search Gnome Bugs for 10000” entry and be there. Same with google for example. This stuff will soon work with firefox, allowing to use its search engines.

More a gadget: type a gtk bookmark (the ones shown in the file selector) and you can open nautilus in it

And you can also get rid of mini-commander applet, since typing a program name allows you to open it directly

TODO

Some things that are left to do:

  • Use galago python bindings (which are coming, according to ChipX86) to autocomplete emails by name and addresses, and also integrate with gaim contacts, allowing to send IM’s by typing the name.
  • Use beagle, when available to do some background querying of typed terms
  • React to filesystem changes through gnome-vfs monitoring to add on-the-fly newly installed programs
  • Support for recent files
  • A sane way to handle caching and presenting a good (not too long) list of matches
  • More in the TODO file in the archive/CVS

We would really appreciate any contribution: ideas or backends, core code, etc.

Also worth mentioning is the fact that the startup isn’t threaded and takes some time because it must index all the interesting files each time. This has to be improved of course.

Try it !

I updated the tarball a couple of hours ago wwith an updated version which fixes lots of small bugs, like missing file existance checks and data sanity, redownload if you got an old version.

CVS

Deskbar-applet can be checked out with:

cvs -d:pserver:anoncvs@anoncvs.gnome.org:/cvs/gnome co deskbar-applet

Tarball

Grab the 0.5 tarball here.

Gentoo

For gentoo users there is an ebuild in BreakMyGentoo.

Building and running

It requires python 2.3 and the 2.12 version of gnome-python and gnome-python-extras. Then:

./configure; make; sudo make install

You can also test it uninstalled by running the ./deskbar/deskbar-applet -w in the source directory, this will create the search bar in a standalone window.

46 Responses to “deskbar-applet hotness”

  1. Christian Neumair says:

    Wow, It’s amazing. Great job Nigel!

  2. ebassi says:

    great job!

    as for the recent files code: I’m writing a recent documents viewer applet with the recentchooser code in libegg (which will eventually go in the next release of gtk+); the recent-files code is going to be deprecated as soon as the API is finalized and all the pieces are set – so, be warned… 🙂

  3. Sven Neumann says:

    Somehow the idea reminds me of the GNOME Launch Box and I think I prefer the concept the Imendio people have chosen here. The panel seems like the wrong place for such a thing.

  4. Nigel Tao says:

    GNOME Launch Box opens only *applications*, but the Deskbar can open URLs, web searches, e-mail addresses, file and web bookmarks, Beagle, and, oh yeah, (thanks to Raphaël) as of 0.5, applications. These days, I open (web) locations much more often than applications – and even for things on my computer, I don’t open the Evince application to open my PDF, I just open my PDF file. That doesn’t mean that GNOME Launch Box doesn’t rock. 🙂

    The panel seems like the right place for me because 1) it’s visible, and 2) it’s always visible, no matter how many other documents or applications I have running at the same time. If I’m reading an e-mail and want to search for something mentioned, it’s as easy as mouse-drag to select the words, copy, slam mouse to the top of screen, click, paste, enter. (Having a global keybinding is a TODO)

    Finally, CVS is the definitive place for the code, but for the record, the GnomeFiles page is at http://www.gnomefiles.org/app.php?soft_id=780

  5. Alaska Subedi says:

    The deskbar-applet crashes if ~/.gtk-bookmarks file doesn’t already exists. Since deskbar-applet is not in the bugzilla the bug report is here. Just need to add:

    if os.path.exists(“~/.gtk-bookmarks”):

    at line 45 of ../deskbar/handlers/gtkbookmarks.py 🙂

  6. Burgerboy says:

    Great idea, would be interesting to be able to replace the run dialog with this.

  7. Nigel Tao says:

    Alaska: Thanks for the bug report – it is fixed in CVS. I have asked for deskbar-applet to be added to bugzilla.gnome.org.

  8. No bugzilla yet, so here’s a patch that lets you use set() in python 2.3 (it’s built-in from python 2.4 onwards)

    — mozilla.py.orig 2005-10-03 13:56:04.000000000 +0200
    +++ mozilla.py 2005-10-03 13:56:06.000000000 +0200
    @@ -6,6 +6,11 @@
    import deskbar, deskbar.indexer
    import handler

    +try:
    + set()
    +except NameError:
    + from sets import Set as set
    +
    PRIORITY = 50

    class MozillaMatch(handler.Match):

  9. This time from the correct root directory 🙂

    — deskbar/handlers/mozilla.py.orig 2005-10-03 13:56:04.000000000 +0200
    +++ deskbar/handlers/mozilla.py 2005-10-03 13:56:06.000000000 +0200
    @@ -6,6 +6,11 @@
    import deskbar, deskbar.indexer
    import handler

    +try:
    + set()
    +except NameError:
    + from sets import Set as set
    +
    PRIORITY = 50

    class MozillaMatch(handler.Match):

  10. Wow, this might be cool enough to persuade me to finally move my panel to the top of the screen 😉

    How about an “I’m feeling lucky” option, except instead of calling it that, have it actually go and fetch the top google hit for what you’ve typed in realtime and say “Open the web page ” with a Google icon? I’d use that all the time I think – in fact I practically *do* use that all the time since it corresponds to the default action in Firefox’s url bar. Having visual feedback to confirm that you’re actually going to end up where you think you are would make a killer feature even more killer.

  11. Justin says:

    you should look at GNOME Launch Box again, it does more than open applications.

    and quicksilver which it is based on.. http://docs.blacktree.com/quicksilver/what_is_quicksilver

    I think the quicksilver approach better matches how most people use unix, like how you can find a file, but rather than open it use the mail to option to specify an email address.

  12. Pavlos says:

    What about slocate integration?

    Beagle would be great when it will be available but I think background searching with slocate is very useful in the meantime. And will always be useful as a fallback option for systems without beagle/mono.

  13. A gnomer says:

    How about behaving similar to smart bookmarks?
    I have seen that it has a capability of smart bookmarks.

    What I mean is something slightly different, if possible – writing abiword report.txt would run “/usr/bin/abiword /home/user/todo/today/report.txt” (assuming there’s only one report.txt). Could it be done?

    BTW, does it seem strange to anybody that great improvements (and I am serious this is a great improvement) in the GNOME desktop are a lot like souped up terminals?

  14. kikidonk says:

    Pavlos: This is already accessible normally if you type search xxx, it will use gnome-find, which in turn should handle the slocate thing, normally

    A gnomer: This works, you can type an executable name and args, it is launched as if it was what you typed in the command line. There is no tab completion, though.

    Wouter: thanks for the patch it’s committed in CVS !

  15. HK says:

    I love the screen shots! But I am trying to install on opensuse and get this error:
    Running installed deskbar, using normal PYTHONPATH
    Traceback (most recent call last):
    File “./deskbar-applet”, line 31, in ?
    import deskbar.applet
    ImportError: No module named deskbar.applet
    any ideas?

  16. Lars Strojny says:

    Great job! Would be nice to replace the run-dialog, and nautilus’ with it. e.g. typing would focus the applet or use a mocked-up run-dialog. Also integrating with revelation would be a good idea. In my utopia, all the similiar “enter text”-applets would be just one.

  17. Anonymous says:

    HK: that seems like your installation didn’t work properly.
    Normally it should install python files in /usr/lib/python2.3/site-packages/deskbar/* or 2.4 if you are using python 2.4

  18. […] Il tutto con una semplicità disarmante. La nuova versione, la 0.5, è stata presentata con uno screencast che ne illustra tutte le nuove potenzialità e ne fa capire la potenza. […]

  19. […] Via: kikidonk (con más screenshots) […]

  20. Sven Neumann says:

    I’d really prefer to have such things in a nicely layouted dialog window that I can open using a global keyboard shortcut than having to squeeze it into the panel.

  21. kikidonk says:

    Sven: this isn’t excluded, i’m sure we could provide both, given time, it’s just that we started that way because we like it better like that. The core code isn’t really tied to any presentation model..

    As always, patches are welcome 🙂

  22. sebest says:

    I agree with Sven, i used quicksilver a lot on MacOsX, and the global keyboard shortcut is really a must have 😉

    Another great feature of quicksilver, (that may be outside the scope of deskbar-applet) is that you can combine actions.
    like you type a file name and then it dynamically propose the applications that can handle it.
    It can also propose actions related to an application.
    Eg: you type “firefox” , you can select actions like “close”, “create a new tab”

    Would it be possible with the deskbar-applet, to see the output of cli programs?
    eg: ‘ps aux | grep httpd’ and see the output of this command

    btw thanx for this neat project!

  23. sebest: Should be possible using the vte python bindings. But it’s hard (if not impossible) to tell whether an application is a console one or a graphical one (maybe waiting for it to finish and checking if it wrote anything to stdout or stderr would do the job).

  24. Wouter, wouldn’t it be possible to simply pipe its stdout and stderr to a program which does nothing until input is received, but if input is received throws up a terminal and sends the output there? (and also do something magic with stdin so you could then interact with that terminal too)

  25. jc-denton says:

    cool, quicksilver on macosx is one of my favorite apps. At the moment i use fbrun on linux which is as basic as “Run..” on windows.. so it’s really cool to see that a simliar app is developed for linux.

  26. kikidonk says:

    sebest: Using actions like osx isn’t really possible unless you do some nasty stuff like special-casing each program.. Maybe in a distant future 🙂

    sebest, stuart: Detecting output, the way you say it isn’t good, just see how much programs write debug output to stdin even if they are GUI oriented. What is imaginable is to have a special shortcut meaning “Execute and show output”. Adding this to the TODO

  27. kikidonk: sounds like an excellent motivator for application authors to stop spewing crap to stdout. Anybody who regularly launches graphical apps from a terminal already hates these programs.

    Perhaps make it a gconf-only-settable configuration option so that advanced users (who are the only kind of people terribly likely to be trying to launch commandline programs and wanting to see the output) can turn it on. I know I’d want it (and be annoyed to have to take special action each time), but I also know that 95% of people wouldn’t.

  28. kikidonk says:

    Stuart: Adding it to the TODO list 🙂

  29. Jens says:

    Hi, I just installed 0.5

    Somehow I miss the preferences dialog one can see in the screencast and other screenshots?
    I have the input field in a panel and a right-click on the icon leads to “Deskbar Prefs”. But the only thing I see is a “Width” setting?

    Where is the setup for the searches and the other stuff?

    thanks
    Jens

  30. […] neuestes Objekt: das deskbar-applet. Ein simples Eingabefeld im Gnome-Panel, das irgendwie alles durchsuchen kann Dateien, Programme, Emails etc. auf dem eigenen Rechner ebenso wie Suchmaschinenen im Web anfragen. […]

  31. kikidonk says:

    That preference panel has been removed, it extracts search engines from epiphany/mozilla/firefox browser at least in theory and in CVS.

  32. gbil says:

    Here is an error from the cvs version regarding smart bookmarks:

    Error:MozillaSmartBookmarksDirParser:Cannot load image:list index out of range
    Error:_parse_search:No way to extract a

  33. asubedi says:

    Hey, I tried building from cvs sources but it always bombs out when I do ./autogen.sh saying:

    deskbar/Makefile.am:1: required directory deskbar/evolution does not exist
    deskbar/Makefile.am:1: required directory deskbar/keybinder does not exist
    deskbar/iconentry/Makefile.am: installing `./depcomp’
    configure.ac:94: required file `deskbar/evolution/Makefile.in’ not found
    configure.ac:94: required file `deskbar/keybinder/Makefile.in’ not found

    Can you make a fresh tarball and release it?

  34. kikidonk says:

    You have some missing directories, i suggest running cvs update -dP in the cvs checkout.

    Otherwise there is a CVS snapshot here http://raphael.slinckx.net/files/deskbar-applet-0.7.0.tar.gz

  35. JedTheHead says:

    Great applet! Thanks for your efforts!

    Is there a shortcut key to get to it? I’m hoping there is and that I have just missed it somehow….

    Thanks!

  36. kikidonk says:

    In the 0.6 tarball the shortcut is alt-f3, before there wasn’t any, you can change it in gconf, key /apps/deskbar-applet/keybinding

  37. ric says:

    ONE OF THE GREATEST THINGS IN GNOME SINCE SPATIAL NAUTILUS!!!! THANKS VERY MUCH!

  38. anonymous coward says:

    i hate spatial nautilus

    though, i do really like deskbar applet

    thanxalot, playing around with the suggestions, like z@w -> “Launch Tetravex”

    🙂

  39. NKIKI says:

    Hey whats Steve Ballmer’s email address?

    Also with Plan 9/Inferno you can tell if a application is a console one or a GUI. We should start the swap Unix really is showing it’s time.

  40. Anonymous says:

    i think this is an extreamly promising project. I just cant wait until i can search for files from it (spotlight OSX)

  41. Anders Aagaard says:

    This is absolutly brilliant man, love it. One suggestion, setup something to prioritize things differently.

    So I can for example have “search imdb” way lower prioritized than search google, and being able to write “google deskbar” or “imdb deskbar” and have it pick the right thing to do would be awsome too. That’d make it about 10 times as practical for me I think.

  42. Anders Aagaard says:

    realized I had an old version, tried cvs… I love it I love it I love it I love it, this is so great 🙂

  43. nate says:

    You know it’s a great idea and all, but…

    With that ‘screencast’ link, couldn’t you choose a format that everybody in your audiance can use? I mean that this is open source and free software and all that, yet a format that is completely closed is used to show it off. If you choose to distribute your blog as a Microsoft word format it wouldn’t be that bad since I can view .doc files on my ppc computer, but with flash it’s completely worthless to me.

    Not that I am paticularlly upset or think that you should change, it’s just been a long night and it’s annoying to that people that should know better, don’t.

  44. dusti says:

    This is excellent! I have been looking for a LaunchBar (mac) and SlickRun (win) like prog for use on my Ubuntu machines for some time now. I look forward to seeing Deskbar prosper and grow, best of luck!

    Question/Suggestion:
    Perhaps I have missed it in my searches, but is there functionality to map user configurable abbreviations/commands? Say for example, I want to always launch firefox by typing “ff” into the Deskbar input field?

    Keep up the good work,
    D.

  45. It’s not included, but it would be fairly easy to do as a custom handler.
    You can look for custom plugins example in the deskbar website http://raphael.slinckx.net/dekbar
    The web searches also implements something alike..

  46. John Peterson says:

    I like Deskbar, but as several have stated before me, it tends to be too much work to have to page down to the action you’d like to do. There are two things I think that would make this less painful. First, make the last action (e.g. “Search Google”) the default for next time. Not only that, but sort the actions so that the most recently used are on top. Second, once the user has moved focus to the action list, make incremental matching possible, so that they can start typing in the name of the action they’d like to perform and have it highlight within a few keystrokes. I’d also like the option to keep the list of actions hidden unless I request for it (by pressing the up or down arrow), but this is a personal thing and not as functionally important as the first thing.