In Search of The Perfect EditorPosted Sat, Apr 12, 2008 in:
I’ve been searching for the perfect editor ever since I started programming. I’ve found many along the way which have worked to get the job done, but I’ve never really found “The One True Editor.”
Yes, I have used Emacs, and no, it is not it. There are many things I enjoy about Emacs, but there are many things I dislike, and recently Emacs got to the point for me where the bad outweighed the good. I could write a whole post on why I’ve forsaken Emacs, but I’m not going to.
I’ve found a couple of editors which meet my minimum requirements of being small, simple, and easily extendable. They also have some cool features built in, which always helps.
Minimum Profit is “A text editor for programmers” which comes with some pretty good default settings and features.
You can do everything from the keyboard, which is a must for me. Even more importantly, you can remap keys to anything you’d like, and even add custom functionality through a built-in scripting language.
Most of the editor itself is written in this scripting language, so there’s a ready source of examples for how to do things. It also makes it really easy to modify the editor to your liking. You can pull out entire pieces of the editor and replace them with your own.
I’ve already written scripts to change the behavior of most of the common editing keys. From what I’ve seen on the mailing lists, the creator is also quite open to taking contributions to the project, so I may even suggest some of my new behavior to be added into the project defaults.
Minimum Profit wasn’t my only candidate for preferred text editor, but it’s winning out at the moment, partly due to the fact that it doesn’t have too many dependencies (only Cursesw and/or GTK+, that’s it!). I couldn’t get the main dependency for my second choice to even compile on my home machine, so that stopped me from being able to fiddle with it in my free time and kind of sealed the deal for MP.
It doesn’t have all of the features in my list below, but it has the most important ones of being ultimately configurable and not forcing me to use the mouse.
Scribes shows a lot of promise. It’s written in Python, which automatically puts it higher in my list, and it has a plugin system for extending it. Most importantly, it can be used completely from the keyboard.
Unfortunately, it also has a downside: It has too many dependencies.
- Yelp 2.12
- D-Bus 0.7 (Python bindings)
- PyGTK 2.10
- GNOME Python Desktop 2.12
- GNOME Python Extras 2.12
That’s not too long of a list, or so it seems at first. Until you realize that this basically means you need to have most of GNOME installed to run this editor. I don’t want to install GNOME, I don’t use GNOME, I don’t use full desktop environments, I just use a window manager (more on that below).
More unfortunately, my current distro of choice, [Gobo], doesn’t come with GNOME support by default. Sure, there are GNOME packages, but they aren’t very well supported and don’t have the proper dependency lists, which requires me to figure out what all of their real dependencies are, and with GNOME, you have to be sure to get compatible versions of everything, which isn’t always clear.
In short, it’s a huge pain in the ass and makes me not want to even try this editor, which is sad, since it has some really nice features like bookmarks and snippets. It doesn’t have everything I want, but it has a plugin interface and I bet I could have added the necessary features without too much trouble.
The moral of the story here is that I shouldn’t have to install an entire desktop environment just to run a text editor. It’s ridiculous.
The perfect Editor
Right now, I’ve got an idea in my head about what features the perfect editor would have.
The perfect editor would have the following attributes:
- I should not have to use the mouse ever.
- I should not have to move the palms of my hands to do anything (i.e. I shouldn’t have to use the arrow keys).
- I should be able to remap the keystrokes pertaining to any command, including moving the cursor.
- There should be an easy-to-use and easy-to-find interface for remapping keyboard shortcuts. I’ll settle for this being a config file which I can edit, as long as the syntax is clear and I can use it to do anything I want.
- I should be able to run any command by name if I can’t remember the keyboard shortcut.
- I should be able to easily find out the keyboard shortcut for any command.
- There should be a list of available commands easily accessible. And searchable.
- I should be able to add commands/plugins using any programming language I feel like using.
- There should be syntax highlighting for any language I use.
- Where there isn’t syntax highlighting built-in, it should be dead simple to add syntax highlighting, perhaps via some sort of grammar definition (like ANTLR or something)
- There should be ctags support allowing me to jump to the definition of a function or variable, and showing me the parameter list of a function when I’m calling it.
- Ideally nothing would pop up a new window unless explicitly requested (configuration is probably okay to pop up a new window)
- There should be a quick file open dialog (which shouldn’t pop up a new window), with tab completion.
Now, the features listed above are things I always like to have when I’m programming, but I’m almost positive that I’m missing a few of the essential features of the perfect editor.
Why am I missing them? Because they haven’t been created yet, or I’ve not heard of them, at least.
That’s one of the problems with software. Maybe one of the reasons that some software keeps sucking despite massive improvements is that there’s a better, more intuitive way to do it, but nobody has discovered it yet.
I’m going to stick with Minimum Profit for the time being, adding all of the features that I feel it needs the most, and a few new ones for experimentation. Who knows? Maybe I’ll stumble upon the way to make the perfect editor.