Emacs has a stack for this. Jump to related definition with M-., jump back to where you were before with M-∗. One keystroke is not exactly "clumsy", IMHO.
I, like other posters, would be really psyched if you could have some kind of MVC opener which would automagically open all the code files using a certain view.
I just open all files in the project with `eproject-open-all-project-files`. Then I can iswitchb between them. (Of course, there are lots of extensions that don't require you to have the files open to easily navigate to them; eproject, anything, ido, etc.)
It's a pretty neat literate programming tool.
I would probably use it more if I wrote some scripts to autogen the outlines for entire codebases.
http://tibleiz.net/code-browser/
More powerful overall. It implements elastic tabstops too! Little unknown gem. good for outlining a book/paper also.
Vim (or Emacs) along with ctags == awesome. Go to any definition, open file if it was not yet open. Buffer stacks, split windows.
I also like using tabs, so I found the following mapping to make tag lookups open in a new tab instead of a new buffer:
map \gt :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
It has a few kinks, but it works well and I think it complements my \tt, \tn, \tp commands. (Tabnew, tabnext, tabprev.)I wouldn't like the UI directly as presented, but there's certainly a starting point there.
Really though, don't know what kind of programmer would accept line wrap on code. Urf.
I'd happily accept syntactically- and semantically-aware line wrap, if someone could do it and get it right. Combine that with elastic tabs that actually work, add a standard set of layout rules that gives good results, and provide bullets to shoot anyone who thinks coding standards should be about whether the space goes before or after that `*` when declaring a pointer, and I'm sold. :-)
Yes, that was something bugged me for a long time so I wrote an Emacs package to fix it. http://breadcrumbemacs.sourceforge.net/
CTRL-^ just toggles back and forth, with ctags you get one-keystroke movement up and down the function call stack, and you can jump to various buffers with ":b partial_filename", or ":b<number>" if you remember the specific number, or ":blast".