About Snaked
Snaked (snake editor) is light and minimalist editor inspired by
Scribes, mainly targeting python developers, it’s
generic enough to please other kind of users too.
Motivation
Why did I start this project? I was looking for a good python editor for a long time, tried
many IDEs but nothing fit my needs: fast, quick project navigation, flexible
code assist tuning, easy to extend.
- PyDev. Almost ideal solution. But very hard to extend.
- Netbeans. It’s only a toy. Poor editing capabilities. Very poor auto
completion.
- PyCharm. Single project edition only. Too bad, I too often edit modules from
several projects simultaneously.
- Vim + ropevim. May be this is funny, but it is very slow, especially on my
netbook with syntax highlight and bracket matching enabled. It’s also hard to
extend. However, I love vim, really, it’s editing experience is cool and I use
it for all my non coding tasks.
- Emacs + ropemacs. It is completely new environment to me. Will take too long to learn.
- WingIDE. Very good auto completion. Other features are terribly
implemented.
Some words about Scribes. This editor impress me. It shows how one have to
design editors (from UI point of view). Moreover, I started to develop plugins fitting my
needs. For extending I could use my existing PyGtk experience. It’s like my dream
come true, but few reasons forced me to start hacking Snaked.
- Scribes internal architecture. Many little classes with spread out behaviour
responsibility. Message passing is based on GObject signals, that’s a pain
when you try to figure out how some features are implemented.
- Overall code style. Ignoring PEP 8. Groundless using of private attributes. Almost
no white spaces in the code. Scribes sources are hard to read. The gtk
main loop invocation is pointless. Objects are manually destroyed. There is
too much boilerplate code and tons of copy/pasting.
- Strange author’s opinion about plugins and their dependencies distribution.
After estimating the line count of a light gtksourceview
wrapper of my own, I decided to write Snaked.
Goals
- As little code base as possible. GtkSourceView gives enough features. Editor
core should only implement editor and project abstractions, provide
plugin system.
Preferences dialogs implemented for editor settings, shortcut
configuration and to choose active plugins from available extensions list.
- Clean and maintainable code and design.
- Tabs! I’m using awesome tiling wm, so Scribes lack of tabs is not a problem
for me. But most users complain about it.
- Speed. All development will be made on some Atom Netbook. Scribes is too slow on
this hardware.
- Memory footprint. Scribes internals are too complicated to trace because of “spaghetti” object
references and editor leaks like bloody shit. Weakrefs will save the world.
- Flexible plug-in system based on standard python packaging methods.
What does minimalist mean?
First of all it is an absence of user interface noise. During file edit you only
need to see text view. Toolbar, menubar, statusbar or project browser are
useless. Hence main Snaked principle – you see what you need to see.
In the second hand you don’t need some feature already provided by another tool. For
example, a project browser (to look at project’s structure or to do file operations)
will never be implemented, because File Managers are intended for such tasks.
And third minor claim: there are no widgets designed for mouse-only control.
For example tab close buttons, toolbars and so on.
However, minimalist doesn’t mean feature poor. I have a bunch of ideas
increasing developer’s productivity which are waiting to be implemented. If you
also have suggestions I’ll be glad to listen to them.