When do you switch the (virtual) desktop? When you are interrupted and have to do something else: you switch to another free desktop to start working on a new task. So, why not support the concept of tasks? Sure, you could create a desktops for each task you are working on (as someone on this page already desribed, the panel switcher could grow quite large…), but it won’t prevent your mailprogram to open an html link in an already running browser window on another desktop. Thats not what you want. You don’t even want to see all of your emails in the context for the task you are working on. And you don’t want to see all the people online in Gaim. And you don’t want to see all your notes and todos. Maybe, you even want to shade out appointments in your calendar that are not related to the task at hand. You can very well organize on one desktop when working on a single task … running an application and switching to the documentation with good old alt-tab or even let the windowmanager automatically split/tile multiselected windows (just the way you multiselect files witch ctrl + left click – then rightclick on the titlebar to open a popupmenu). Now, boom, your buddy pops in with his great idea and he needs some input so you start googling, reading and searching, starting an editor and hack at it. If you were lucky you switched to another desktop. Basically, you started a new task. Imagine the task remembering the searches you did (beagle), locallly storing any pages you read the emails you sent and the people you talked to on IM. Maybe even the documents you opened. Imagine sending the whole task to your buddy after you managed to convince him he should carry on alone on his OWN computer because you’d like to get on with your own ramblings …
RDF might cone in handy: create relations between two objects. Or maybe even easier: tagging two objects creates a new relation with that tag as relation between them. Or a context menu / shortcut with an “Add to task …” command. Whatever is selected + added will be remembered by the task.
Switching between tasks and context would be a simple desktop switch. Gnome has a lot of features that already support this. the tasks could, early on, simply remember the complete desktop layout with panel location, started applets, application window positions etc. The first thing could be a panel applet that re-/stores, backups and sends the configuration of the currently active (current desktop, currently selected) task (via gconf?). Of course, it would have to be possible to have different panel / applet layouts on different desktops … not sure if that is currently possible.
I’m just trying to give some inspiration here. People want to get things done, and they use a lot of different tools for it. At least mail, instant-messaging, a calendar and some main application. Imagine moving tasks to someone else: simply by sending him a “taskfile” he will see the important contacts in gaim, have the contacts added to evolotion / a more general contacts database, have the relevant applications starters in the top panel, with the needed documents transferred and updated as recently used in the task.
The atoms that Gnome should be able to relate to each other would be contacts, emails, desktop configuration settings and documents / files (well if everything was its own file we would only need that …). That way applications could try to fetch some kind of “context/task environment” and act accordingly, by hiding unuseful information and storing actions in a local repository. Another approach might be to make everything taggable and then let the user define filters based on these tags, though I think having to tag each applet would be overkill … anyway, its late and I needed to get this of my head.