[wingide-users] Re: Are there any hardcore vim/emacs user who have converted to wing?

Mitchell L Model MLMConsulting at Comcast.net
Wed Dec 30 08:13:14 MST 2009

> Date: Thu, 17 Dec 2009 03:16:21 -0800 (PST)
> From: ryan heniser <heniser at yahoo.com>
> Subject: [wingide-users] Are there any hardcore vim/emacs user who
> 	have	converted to wing?
> To: wingide-users at wingware.com
> Message-ID: <752266.56426.qm at web52808.mail.re2.yahoo.com>
> Content-Type: text/plain; charset=us-ascii
> I'm a hardcore vim user. It's taken me years to memorize the  
> keystrokes and get my vim just right. But, auto complete in vim on  
> python code is not the best and the svn & cvs integration requires  
> yet another dozen key strokes to memorize.
> I'm about to give wing ide a test drive. I'd love to hear from any  
> other x hardcore vim/emacs users who have made the switch.

I am an Emacs super-wizard. I've used it extensively for 30 years. I  
worked in the Lisp world for a long time and write enormous amounts of  
ELisp functions. I am also a keybinding maniac, one of those people  
who can remember combinations like control-alt-shift-leftelbow. I bind  
everything I use more than once a month. I also write ELisp macros for  
just about anything I do more than a few times.

Strangely, I am also a Mac fanatic, having used them since I bought my  
first 128K Mac in 1984, and a lot of my professional life involves  
software development tools and user interfaces, so I am well aware of  
the archaic aspects of Emacs in that respect.

I write a lot of code in a lot of languages for courses I write and  
teach (both academic and professional) and for the two books I've  
published, a C++ Data Structures book and a just-published O'Reilly  
book called Bioinformatics Programming Using Python. I also write a  
lot of code to automate my own work -- like in Emacs, but on a larger  
scale. I use several different keystroke-macro sort of programs on my  
Mac (these days its QuicKeys and Butler, with some help from Mac's  
System Preferences keybinding capabilities). I write a lot of  
AppleScript code. I'm saying all this because of the context it  
establishes, and I'll get to Wing in a moment.

I use Emacs for almost all my programming primarily because I write  
many small pieces of code or programs and the overhead and mental  
burden of using an IDE like Wing or Eclipse or any of the others isn't  
worth it for these purposes. However, when, as currently, I am working  
on a significant Python project, I am using Wing. The advantages of an  
INTEGRATED development environment should be obvious, but even there,  
Emacs isn't so bad. Where IDEs fall short is primarily in their  
limited editing facilities and their imposition of an "order of  
things" -- keybindings, menu contents, window component organization,  
etc. Assuming an IDE provides the tools one wants and does so in a way  
one finds comfortable, what for me are the subsurface capabilities  
needed for an IDE to be a powerful tool for an engaged professional  
rather than something that is obviously useful but not sufficiently  
comfortable or adjustable to use:

1. Change and add keybindings
2. Define additional commands based on existing commands
3. Modify menus (importance varies with the IDE and the kind of work  
being done)
4. Work well with major external packages such as cross-platform GUI  
toolkits, web frameworks, content management systems, etc.
5. Sufficient "awareness" (built-in API or commands in a scripting  
language) of the components of a program, at all levels: package,  
module, definition, statement, expression, identifier, etc.  
(corresponding to a text editor's awareness of documents, sections,  
paragraphs, sentences, words, etc.), with commands such as move  
forward/backward, select, delete, evaluate, etc. for each.
6. True integration of source and debugger so that one can evaluate  
source code from inside the debugger (a very powerful development  
style few languages and IDEs support is to put a break at a point in  
your code where you don't understand the state of things or what you  
want to do there, get into the debugger, look at the values of the  
local variables, etc. and try out pieces of code right there, adding  
them to your source code, then continuing).
7. Compatibility in look and feel, clipboard behavior, menus,  
keybindings, etc. with the host platform.

Emacs is spectacular in most of these areas. (It takes a while to  
figure out how to use an interactive Python window in conjunction with  
pdb and your Python code, but Emacs has a cross-language uniform  
interpreter/debugger interface that makes the effort worthwhile -- or  
very small if you are already using it for another language.) That  
doesn't mean that moderate Emacs users take advantage of all of this,  
of course.

So, what about Wing? Wing is exceptionally strong in all of these  
areas, except that it's a little weak on 5 and, on a Mac, 7 (because  
it runs under X11 and there isn't much else left that needs to). What  
I do a lot is look for a Wing command that does what I know how to do  
in Emacs, and because it has a somewhat similar model, I often find  
it. When I don't I can script it. (It is well worth getting over the  
small hurdle of learning how to add commands to your environment.)  
Wing even distinguishes between keyboard and keypad keys (e.g.,  
command-0 and command-keypad-0) -- it doesn't impose very limiting  
restrictions on what keystrokes can be bound. Most importantly for  
people moving from another editor are the keyboard compatibility modes  
-- you can tell it to use vi or Emacs (or even Brief and a few other  
blasts from the past) bindings. Or native bindings. My biggest trouble  
right now is that I keep switching between Emacs and Mac OS X, and I  
am going to resolve that by just binding a large set of my own keys.  
(You don't have to use the preferences dialog for that -- you can  
simply edit your .wingide/preferences file: once you've done a few  
through the dialog, you'll see how that works.)

So to add to my list above, there really should be:

0. Supports the transition from other well-known editors by providing  
compatibility modes

And a warning: switching editors or IDEs or GUI toolkits or operatings  
systems, etc., is NEVER comfortable. One of the worst feelings a  
professional software developer can have is to move into a new  
language, new GUI library, new OS (even new version of the same OS),  
new IDEm and especially, new editor. You just feel like a clumsy  
idiot, and it's hard not to criticize the new world you have entered.  
It may be better, worse, or the same -- most likely it's a mixture --  
but you can't tell until you've gotten somewhat comfortable in it. And  
during the transition, whenever you come across a barrier that you  
"can't believe" -- something huge that appears to be missing,  
something you can't do, something you have to do, whatever -- ASK  
rather than just writing off the new environment. (You'll see some of  
my questions to this list and to other mailing lists I occasionally  
post questions to phrased something like "What am I missing here? I  
want to do this thing that seems really basic or important, and I just  
can't see how to do it. Surely it is there somewhere."

Oh, one more thing about Wing: you don't have to give up your external  
editor! It watches files in your current project and updates them as  
soon as they are saved from somewhere else. I move fast, and if I  
can't see how to do something in Wing and don't feel like taking the  
time at the moment to work it out, or need to do something that I'm  
pretty sure Emacs would do better, I just pop over to Emacs and edit  
the files there, then go back to Wing to continue working. Best of  
both worlds and a good way to make the transition. (See section 4.15  
of the documentation and the Files|Reload pane of the preferences  
dialog.) (The reloading process also works for generated files -- for  
instance, I am using Qt's Qt Designer to layout complicated GUIs then  
generating the corresponding Python code with PyQt's pyuicc4. If I  
have the generated file open in Wing, it changes as soon as I generate  
the new version. Very important.)

I am sure that once I dispatch this message I will think of more to  
say, or things I shouldn't have said, but informally, this is about

More information about the wingide-users mailing list