Ni
Ni will be a programmer's code editor written from scratch in Python. The idea is to get the core functionality done clean and right. This should then be easily extendable and it should be an excellent platform to base other editors from or to just try out new ideas. On top of this I'll build different editor GUIs. Initially GTK and curses GUIs are planned, later maybe QT, MacOSX, etc.
For now the editor will be unicode and utf-8 only and won't support word-wrap.
WHAT'S WRONG WITH EMACS?[edit]
I never quite got into Emacs. I tried many times, but I just don't get it. The keyboard bindings are confusing to people who aren't long-time Emacs users, the Emacs way takes a long time to get used to, etc. It is just not something you can pick up and start using immediately.
Emacs seems to have a core written in C and it uses it's own version of Lisp. Personally, I don't feel like extending an editor in either of these languages. Emacs is big and bloated. I get the feeling that there's a lot of legacy cruft in there. On some level this makes sense - the codebase is very old and a lot of things predate current technologies, libraries and frameworks. I'm sure a lot of stuff in there is simply not needed. Correct me if I'm wrong on this one, but I don't think the regular expressions are even Perl-compatible. I also prefer the JEdit style way of doing find and replace, for example.
Also, it is difficult for someone like me to try and jump in there and rip things out or clean things up.
I'm not mad about the way it handles multiple documents. Actually.. I'm not mad about the way _most_ editors handle multiple open documents/buffers.
What is good about Emacs is that it runs in command-line mode and also in graphical environments. Also, a lot of modes, scripts, plugins, etc exist for it and it has a huge following. Syntax highlighting is also impressive.
[edit]
WHAT'S WRONG WITH VIM?
VIM seems to be quite tied to the fact that it is a modal editor and that's _so_ last century :) Actually.. I quite like VIM. I use it to edit config files all the time. I think I am relatively fluent in VIM, so I can probably give a better review here than for Emacs.
Again, VIM is written in C. Yes you can extend it with outher languages, but this is not really what I'm after. Again, the regular expressions and find/replace is not up to today's standards. Also don't like the way multiple open buffers/documents get handled.
[edit]
WHAT'S WRONG WITH JEDIT?
I really like JEdit. I feel it is highly underrated. The main reason why the free software / opensource world never really adopted it is probably because it is written in Java. I think even now that Java was made free that's still a handicap, because 1) Java is a relatively big dependency just to run one app and 2) Java doesn't really integrate into GNOME or KDE desktops. (not like GVIM or Emacs really does either, but still.
The fact that JEdit is written in Java always bugged me. Minor things just don't fit well into a GNOME environment, for example and I'm not so sure if this is really solvable. It is relatively resource hungry and it already contains a lot of stuff I don't need. I really would have liked if it was more GTK/GNOME-like and I'm sure Windows, MacOSX and KDE people probably feel the same about their environments.
Every time I install JEdit I find myself removing the toolbar and the buffer switcher, enabling line numbering, changing the tab/indent settings, installing the buffer list and editor scheme plugins, etc. The rest I never touch.
There are a few things I would like to change in JEdit, but I don't really feel like learning Java (again). Also, it feels like there's no real community around JEdit. I don't quite know how to explain it, but maybe it is just because the website doesn't really get updated. There is no name or face to it, I guess and I feel a bit afraid to jump in there and start working on it ;P
I really like the keybindings, the editor scheme plugin and themes and the find/replace and hypersearch dialog. I feel like the "Buffer List" plugin could do with some work, but it is already by far better than a tabbed interface or the way buffer switching works in VIM and Emacs.
Ni will draw a lot of inspiration from JEdit.
[edit]
WHAT'S WRONG WITH ECLIPSE AND OTHER IDES?
I've never been a fan of IDEs. I guess it makes more sense if you're programming in C/C++ or Java where you basically need it, but users of more modern languages like Python or Ruby probably don't need it. I prefer my apps to do one thing and do it extremely well and that's editing code.
Eclipse is also very big and bloated. I want something that's written in such a way that it is very easy to slap another interface onto it. For example - Some people like GTK, others like QT. Some people like popup/modal dialogs, others prefer editors that don't have any of that and can be used without ever taking their hands off the keyboard. I want to be able to easily experiment with these different alternatives while still sharing the same common core and plugins.
[edit]
WHY NOT JUST BASE THINGS OFF GTKSOURCEVIEW?
GtkSourceView _is_ basically an editor and it is tied to GTK forever. It works the wrong way around. I want to abstract things in such a way that the basic logic is mostly contained in pure/normal/reusably Python classes/objects and you bolt a GUI toolkit's interface onto it.
Similar reason why I don't just work on GEdit.
[edit]
WHY PYTHON?
I know and like Python :) Python already runs almost everywhere. There are more and more implementations of Python popping up. Python has a large amount of libraries and bindings and I'm even hearing of bridges that will allow you to hook up other languages with Python. I think it is much better at working with text and abstracting things than C can ever be and it is immediately useful.
[edit]
WHAT FEATURES ARE PLANNED?
For now, just loading/saving documents, multiple documents open at the same time, navigating around using cursor keys, home, end, page-up, page-down and the same keys while holding down control, selecting text, copy-paste, delete, backspace, indent, unindent, undo, redo, find/replace JEdit style. Just the basic, core stuff. Then I'll add syntax highlighting and different language modes. I'll build a curses and GTK interface on top of this and make things like key bindings very configurable.
After that I'll recap and start playing around with things, but I think that's basically the main features everyone needs for now. Will probably start working on a plugin architecture.
I think after I made curses and GTK interfaces, the rest will be easy. By then the differences between events and the way the screen gets updated will probably be abstracted / handled sufficiently so that the next toolkit will be easy to implement. I suspect for the GTK interface I'll have to draw text manually onto some low-level widget, because GtkTextView / GtkSourceView will not do. Probably using Cairo and Pango?
[edit]
WHY THE NAME NI?
From Monty Python and the Holy Grail's Knights that say Ni. Or for "New and Improved". A joke around vi. Something like that.
No comments:
Post a Comment