How about Emacs? ;-) It's very available, has a history of 30 years, it's totally programmable and customizable, has a horde of editing modes for whatever kind of programming language you can imagine, can edit remote files, and it's pretty light nowadays, compared to monster IDSs such as Eclipse. I would be amazed if there aren't some collaboration features already created. ;-)
And, something similar is now available on the Web: www.ymacs.org ;-)
I consider Emacs to be one of the best editors around, but still wholly inadequate.
My complaints, roughly in order of the requirements I described in the post:
- I personally hate the keybindings, and I suspect they contribute to RSI. This may be purely an aesthetic issue, but the vi shortcuts suit my taste and the Emacs keybindings simply do not. Yes, I know there are ways to work around that, but the larger Emacs ecosystem assumes you will be using the default keybindings, and doing otherwise carries a cost.
- Also on the subject of UI, Emacs is not approachable and does not have a gentle learning curve from "Notepad-mode" through to power user. "Anyone I might collaborate with must find the text editor I use to be a productive and enjoyable tool" sets a high bar which Emacs does not meet.
- It doesn't meet my requirements for collaboration. If I am editing a buffer in Emacs and want to collaborate on that file in real-time, my best bet is to copy and paste it into Etherpad or something like it. That's probably not going to change anytime soon since many other people don't even have Emacs installed. Web browsers on the other hand are ubiquitous.
- Emacs doesn't meet my requirements for saving history. Of course this can be done with an external revision control system such as git, which I use, but I see no reason why this should not be something my editor takes care of for me, silently and continuously.
- Emacs has some excellent parsing facilities; in particular James Clark's nxml-mode makes working with XML almost tolerable, and is the main reason I still use Emacs for some tasks.
- Emacs is not quite as ubiquitous as I would like, though of course it is fairly popular amongst programmers, particularly among experts. Something that works in a browser would be much more convenient.
Emacs meets my other requirements (participation, existence, availability, accessibility (with Emacspeak in particular this is quite excellent), longevity, and licensing). Unfortunately, bringing Emacs up to the rest of my requirements seems to me to be more trouble than starting over.
Ymacs, on the other hand, looks promising.
— "I personally hate the keybindings, and I suspect they contribute to RSI"
I love the key bindings, actually, but indeed they probably contribute to RSI (having random pains in my wrists myself). However, I think this happens because I'm extremely productive and manage to press a lot of keys — it's probably true that a tool that makes you work slower will not *seem* to contribute to RSI, but working with a keyboard 10 hours a day for 20 years will unavoidably lead to that, even if you're on Notepad...
— "Emacs is not approachable and does not have a gentle learning curve from "Notepad-mode" through to power user."
Not sure why you think that.. The one thing that beginners don't find obvious is how to exit (when they start Emacs in a console). Other than this, you can use Emacs just like you use Notepad, and there's no need to learn anything unless you want to become more productive.
My wife wrote a 80 paper thesis in Emacs after only about 30 minutes of training from my side. She reckoned, in the end, that it would have taken a lot more time, and the result would have been uglier, if she did that with Open Office.
— "«Anyone I might collaborate with must find the text editor I use to be a productive and enjoyable tool» sets a high bar which Emacs does not meet."
Expecting that everyone else will be able to use a tool as well as you can only mean two things: (1) you think everyone is as smart (or as dumb) as you are, or (2) that tool is the lowest common denominator. You shouldn't wish for any of these. If a tool is great, and if you can use it, then by all means use it and don't wait for it to gain popularity. History shows us that the greatest tools are not popular, and this includes programming languages, operating systems and of course, editors.
— "It doesn't meet my requirements for collaboration. If I am editing a buffer in Emacs and want to collaborate on that file in real-time, my best bet is to copy and paste it into Etherpad or something like it."
I'm working on something like that for Ymacs, actually. :-) But I'm pretty sure that there should be a similar add-on for Emacs.. Probably not popular, though. ;-) I'll look for it.
Anyway, thanks for your reply! :)
It's been my experience that vi's keybindings are as fast to use as Emacs', but they seem better from an RSI perspective because of the reduced use of chords. Anyway, I don't want to have to choose a tool based on whether or not I happen to like the keybindings or not. I want the tool to conform to my preferences, not the other way around.
Notepad doesn't have any unnecessary features, and for beginners that is a feature. Emacs is intimidating and has a lot of modes. It requires more experience and skill to use a table saw than a table knife, but we are just talking about bits here; there is no reason we should have to choose between power and approachability. Ideally 'notepad mode' would be the default, and features would be added only when the user wants to add them.
For people who don't write code for a living or who aren't writing an 80-page thesis, learning Emacs is simply not worth the added power it brings, and it's a shame that we have to have to classes of tool instead of just a range of modes to accommodate different users. Imagine if we had different browsers with incompatible UIs for power users and normal people.
"A productive and enjoyable tool":
"Expecting that everyone else will be able to use a tool as well as you [...]"
I actually don't expect that at all, which is why the above is so important. What I require is that the tool be useful and approachable to all, regardless of their level of expertise.
At each stage in your use of the tool, you should be able to put in, say, 5 minutes learning a new feature, and get a return on investment of your time as you use that feature. Depending on how frequently you use a text editor, you can learn the features that help you and ignore the rest. There should always be a gentle slope up in terms of choosing to spend more time learning the tool or choosing to just get work done with what you already know. Emacs and vi are like scaling a cliff in this respect.
I'm glad to hear your working on this for Ymacs and will look forward to seeing what you come up with!