By workspace, I mean - I need to save the state of my open buffers (possibly in a user specified workspace file) and quickly switch to another set of open buffers, e.g. to continue working on files related to another project.
Is there an Emacs plugin which allows this? Which one would you recommend?
If you are using Linux/Gnome3, you can try this extension: https://extensions.gnome.org/extension/361/emacs-manager/ This extension will allow you to work on different projects simultaneously by managing multiple emacs daemons, and save/restore state of buffers.
desktop.el will be helpful in your situation.
It can (copied from its introduction page) from the emacs packages buffer:
Save the Desktop, i.e., - some global variables - the list of buffers with associated files. For each buffer also - the major mode - the default directory - the point - the mark & mark-active - buffer-read-only - some local variables
HIROSE Yuuji's revive.el has worked nicely for me for quite some time. I use the standard configuration presented in the comments in revive.el. The documentation is well written and revive is very easy to use and configure. In particular, revive.el has better support than some for reviving configurations that are a bit more complex. It is particularly nice if you combine it with the HIROSE Yuuji's windows.el. They are made to work together. windows.el makes it possible to recall window splits, etc. revive.el is built with an eye toward extensibility toward deeper mode integration for particular setups. But for my uses, I have found it to be quite nice out of the box, though I think I'll next tweak it to revive w3m windows which I currently don't have setup (Update: I do now: see bottom).
Here is my revive config. I include some helpful comments, first for windows.el and then revive.el inline:
There are variants of this that others like revive-plus.el and a slightly modified clone on github, but I prefer the original.
Update Monday, January 12, 2015: Now I can restore w3m in revive (see revive.el docs for details and in particular look at examples in revive:major-mode-command-alist-default):
Notice you are telling revive the name of the w3m buffer. Even if you have multiple tabs, only the first one need be enumerated as above.
Here is the w3m variable I have set to restore all tabs from the previous session:
I use a combination of save-visited-files and workgroups. In fact, workgroups will probably do most of what you want by itself.
My config:
Personally, I've been using `persp-mode':