It's almost 2017 and vi and EMACS are still the only two editors that matter. Who could have expected that when they were both first released just over 40 years ago?
- Gestures might not make sense in many locations (tiny cubes with limited space, for instance), or prove problematic for Deaf individuals (learning, effectively, another signed language). That said, I totally want to select text, make a yanking motion with my hands, and have it get put onto the clipboard.
- Eye tracking would be an immediate no-go in any sort of closed facility
- Voice input is also a no-go in closed areas, and would be extremely annoying in cube farms - far more distracting than they already are.
I'm sure gesture tracking would probably not be too hard, using any of a number of VR input devices now on the market. Eye tracking would be harder, as I'm not aware of any consumer-level eye-tracking technologies out there. You could certainly have head-tracking pretty easily, though.
Now integrating this in a way that would actually be fluid, natural, and useful is another story, though. Also, I'm personally not sure how many big body movements I want to be doing while using my computer (unless I'm trying to exercise, play a game, draw, conduct music, or lose weight).
Ideally, I'd want to be as motionless as possible while being as comfortable as possible and while having maximum flexibility and efficiency of input. Keyboards are pretty good for that.
I'm a vim-guy. I've been using vimoutliner (https://github.com/vimoutliner/vimoutliner) for my todo lists, since I put my notes inside my todo lists. With vimoutliner, you can make any line have a checkbox [_], and it understands that a top-level is done only if all of its children are done.
I tried vimoutliner (and some other org-mode clones in vim) shortly after I switched to emacs and learned to use org-mode, and found that these clones weren't anywhere near as powerful as org. As far as I know, there really is no substitute.
Its true that org mode is useful for organising various stuff, but it can also do other things, literate programming. it also lets you work with multiple programming languages at the same time. I think that is more powerful than even the jupyter notebooks.
http://orgmode.org/worg/org-contrib/babel/intro.html
Yes, super jealous of org mode. For my literate programming I try to follow the Vim philosophy of delegating to external tools: http://akkartik.name/post/wart-layers. My approach adds some new capabilities, but it's not nearly as nice an experience.
I'm somewhat drawn to helpers like this, but what ends up being a pollutant for me is the system within a system paradigm. With emacs I have the same problem. I enjoy the UNIX philosophy where one program should do one thing and interesting things come from composing them. I'd love for similar helpers, as I've called them, to be implemented as cli tools. You would then call them from vim for example. Interactivity would be sacrificed, but I don't value it lot. This probably makes me a purist or some other -ist.
I just use vim-markdown (which provides basic to-do list features and nice handling of bullets, indent, etc.) and some shell functions. One is `note`, which when passed a title, creates a markdown file in my notes directory with the date and that title and then pops it into vim. The other is `notes`, which uses fzf to provide a fuzzy finder of all the notes in my notes directory, and then opens the selected one.
I used to be a BIG spacemacs guy because I liked org so much, but I found that TaskWarrior does task tracking better, TimeWarrior does time tracking better (especially with the taskwarrior <-> timewarrior hook, it's magic!) and Vim does outlining only slightly worse but benefits from all the other optimizations I have in my vimrc.
Next thing I'm going to add is a shell function that uses pandoc to convert my notes files into HTML on demand.
Just a matter of what you want your tool to do, and how much you're willing to put up with. Do you really want a meetup for your editor? Are you willing to change operating systems just to make it easier to install your editor? Versus the "nightmare" of having to download something? (I can't tell if the author is being sarcastic or not in complaining about something that could be scripted.) Do you want to edit text, or play Tetris? Do you want to live inside your editor, or is it just one piece in a larger puzzle? Do you like to endlessly fiddle with your configuration, or get work done?
I'm not saying either one is right. To me, it's kind of like Android vs. iPhone. Some are annoyed that they can't change the font weight on the wireless settings screen on iPhone. Some just want to connect to the network. Some want a Swiss army knife, some just want a sharp blade. The same argument has gone on for thirty years, but we collectively pretend we've brought something new to the table every time the subject comes up.
I've not used spacemacs, but I use emacs on Windows. What issues have you faced, in particular? I typically just download the latest build from the project itself, uncompress it, and run "runemacs.exe".
The hardest part is figuring out where emacs thinks your home directory is (for me it's c:\users\<username>\appdata\roaming) to place your config files in (well, I have a config file there that loads my actual config file in a more sane location).
The biggest issue was building emacs. I couldn't find a clear binary distribution that didn't set-off all my malware radar(hello sourceforge!) so getting mingw32 to play nice and build took much more effort than it should have.
MinGW/GitBash include Vim by default so there it makes the setup process a no-brainer.
This is where I've gone for my binaries, and I've never had an issue (for windows, on OS X and Linux I just use the appropriate package manager I use for everything else).
I'm loving spacemacs, but I can already see that I will do exactly this eventually. Evil is fantastic (because vim is fantastic) but I've been a power-user for long enough to have a strong opinion over exactly what I want.
So you get my point, then? Or maybe not. (To be more clear, my personal experience with emacs is irrelevant. I was referring to the author's experience in my original comment.)
I don't think he was saying that Emacs is hard to install on Ubuntu. (It's not.) OP said earlier in the post that he switched to Arch because Ubuntu doesn't package a version of Emacs new enough to satisfy the requirements on the latest version of Spacemacs, which wants Emacs 24.4, which in turn is only available from the repo if you're running Ubuntu 16.x. Building Emacs 24.4 from source seems to me like it would be easier than switching distros, but apparently OP feels differently, and more power to him.
The comparison between Arch and Ubuntu appeared rather to be on the basis of FSF blessedness:
> (the FSF probably wouldn’t like that I’m using Arch Linux, but it’s certainly better than Ubuntu)
> wants Emacs 24.4, which in turn is only available from the repo if you're running Ubuntu 16.x.
This is not an emacs problem, it is much bigger than that.
Ubuntu, and Debian (unless you are on unstable) ship with ancient versions of many things. This shows how inefficient the package maintainer system is. Lets see if snappy (or some competing technology) manages to fix that.
The same argument you're making has been used to argue against switching to vim. Some people who want to "just get work done" with their editor only ever learn and use notepad or nano.
That could be the right choice for them, if their needs are very modest and don't do much editing. For most others, especially developers and other power users, that's just not good enough.
I'm a power user. I virtually live in my editor. No editor can be powerful enough for me, and both vim and emacs have their strengths and weaknesses, so I like to use the right tool for the job. vim and emacs are really the two most powerful editors on the planet, and it pays to know how to use both, if you can commit the time. For me the time commitment has been worth it. It has made me much more productive and has greatly expanded the horizon of what is possible.
To this day, I'm pretty sure Emacs is the best development environment for dynamic languages (save maybe the LispM or the Smalltalk IDE, but that's another story), because it really embraces the REPL, something that seems to be against the trend with most IDEs.
I finally wrote my own editor so that I'd have something that works exactly the way that I want an editor to work. I don't need a built-in e-mail reader or ELIZA clone or scripting language, just really good interaction with UNIX text processing commands.
You should open source it. I find it interesting that there is so little exploration of how an editor should work outside of the emacs and vim models. It is like those are the only two possible ways.
I ultimately did the same. I doubt anyone else will ever use it, but it was fun to create and it suits me (almost) perfectly. There's something comfortable about knowing every detail of the environment I spend most of my day using; it has every feature I use regularly and none of the ones I don't.
Interesting that you are also a Dvorak user. I originally learned to type on a Dvorak keyboard, and have only ever been able to hunt-and-peck on QWERTY. I imagine that vim's interface might seem like less of an incomprehensible, memory-dependent maze if one's fingers were accustomed to QWERTY. I tried to learn it once, with a little cheat sheet taped to my monitor, but I've never been any good at rote memorization, so I didn't really get anywhere with it and went back to nano.
I switched to Colemak last year, and decided not to do any remapping. After a few weeks, I had no problems using Vim with the new layout. It helps that Colemak doesn't completely rearrange the keyboard.
Now my problem is that using Vim with any layout other than Colemak (read: QWERTY) is awkward.
I've used vim (vi and some other vi colones before that) for over 25 years, and switched mostly to emacs (with evil) about 6 years ago or so.
One of the main reasons I switched was because I fell in love with Scheme (and Lisp before that), and loved the idea of an editor that was fully integrated with Lisp, was scripted in Lisp, was mostly even written in Lisp, and had powerful Lisp-editing modes like Slime. It is possible to script vim through Scheme, but 99% of vim's scripts are written in vimscript, and that's really what the vim ecosystem is designed around. So emacs was a clear winner here.
I also liked the idea of having email, web browsing, RSS news reading, IRC, Usenet, the shell, and more fully integrated in to the editor. Ideally, every app would be integrated in to my editor, and I'd love to command them all from within there. This is more or less what emacs promised.
org-mode was another big draw. It seemed cool, and I wanted to find out if it was really as big a deal as everyone said. It is. All my note-taking is now in org, and I intend to move my browser bookmarks to it too. I've since tried various org-mode clones in vim, and they're not nearly as good.
Finally, what really won me over was evil-mode, which allowed me to keep my decades of vim muscle memory and preference for modal editing.
I spent several months, spending 10 hours a day to customize emacs the way I liked it, and to bring it mostly up to parity with my vim config (which was thousands and thousands of lines long), along with customizing some emacs extensions that had no vim equivalent (like emacs-w3m, which is an embedded web browser, which is still super handy despite not working with javascript). It took that long despite me knowing Common Lisp and Scheme before switching to emacs, which made learning Elisp a breeze compared to the extra effort it would take someone coming from vim who didn't know any Lisp.
And still, even after all that work, I haven't gotten around to learning and customizing many of the things I really want to use emacs for, like email, IRC, RSS, Slime, and the various other extensions made for editing Lisp and Scheme.
So I found the switch to be a ton of work, which was worth it for me, since I'm still using emacs instead of vim, and don't intend to switch back. But others who are considering a switch from vim to emacs should also be prepared to do a lot of work customizing emacs to your liking. It's a never-ending process, really, just as it is with vim.
Even though I've switched to emacs as my primary editor, I still use both. Each have their strengths and weaknesses, and I still love vim (which comes in handy in certain situations where emacs just isn't cutting it for me).
"If you wanted to modify this in a traditional terminal emulator, you would probably use the up arrow to retrieve the last command, use the left arrow (or Ctrl-Home) to get to the beginning of line to modify ‘rn’, then use the right arrow (perhaps in combination with Ctrl) to modify the second instance of folder 1."
Not so. You can just type "set -o vi" in your shell, and do pretty much what the OP does in emacs. So wanting to do this kind of editing in the shell is not really a very good reason to switch to emacs. There are much better reasons for doing that.
Though if I'm not wrong you only get to edit current command line. The emacs shell buffer allows random editing, i.e. you can run regex search/replace on the output of a couple commands ago, then run it again through grep, or clean up your shell buffer and save it to a file.
I don't think that will work in zsh, which doesn't use readline. But "set -o vi" will work in both bash and zsh (and possibly other shells as well, though I haven't checked).
There's no harm in doing both, though -- and that's exactly what I do.
I see no mention of the emacs daemon [1] which I've found very useful in resource constrained environments (ie. tiny VMs or underpowered chromebooks). That's especially true if you bring out the big guns like Spacemacs.
Is emacs really that resource hungry? I started using emacs for writing C code on a machine with 1MB of memory.
I feel that these complaints come mostly from people that have installed a ridiculous number of very inefficient plugins to make emacs look like something else. Spaceemacs in particular is big & slow (and IMO ugly on most devices).
No you're right it's not resource hungry: if you have an empty (or sane) ~/.emacs and ~/.emacs.d then it is completly fine. However if you have the habit of opening a new instance from the command line for a given file rather that go back to your already openned emacs instance, like I do, it will add up rather quickly (and the buffers won't be shared accross these multiple instances).
With spacemacs it becomes particularly problematic (especially in regards to start up times), and I think that's where the emacs daemon truly shines.
(edit: also no complaints here; I just feel this daemon is great and wanted to share the sentiment; it also felt relevant as AFAIK vim has no such feature)
GNUs is notoriously hard to figure out how to config (though once I got it configured I've never had to mess it up again) but is the primary email client for people who want to directly grab their email in emacs instead of using a third party email sync and then reading it in emacs.
ERC is built in, pretty good for IRC, very easy to use, and very configurable. There are other IRC clients as well.
There are RSS readers in emacs as well but I don't currently use them. I think elfeed is the cool one to use nowadays.
Being a long time Vim user, and having dabbled in Emacs just a teeny weeny bit, I'm convinced that "Emacs is a wonderful operating system, lacking only a decent editor"!
That's why you can use vim in emacs. Since I've been using spacemacs, I don't miss vim anymore. Use the best editor together with the best operating system!
> The Vim/Emacs debate is often heated, but from what I can tell, Emacs users are more passionate. There are a number of Emacs meetups around the country where users share their setup and demonstrate useful tricks.
That's just because Vim users are actually getting work done rather than going to help sessions for their configuration.
I tried the conversion to Emacs using Spacemacs, but it repeatedly froze up on me, something deep inside locked in a tight loop, turning my laptop into a space heater. No custom plugins, using only a smattering of Spacemacs provided modes.
I went back and tried it again some two major versions later, with the same problem. I eventually narrowed it down to the Go major mode, but I didn't have the perseverance to continue. Not when the same Go integrations were working just fine in Vim.
Oh, yeah, and it still bugs me that Evil mode treats C-] word boundaries differently than Emacs M-. (which actually matches how Vim's word boundaries work by default).
This is my professional career. After two hours of digging into both emacs and evil to try and find the appropriate word boundary combination I realized I had better things to do with my time than fix a broken editor.
It was breaking the word barrier on underscores, which effectively made it useless (to me, needless to say) for writing Python code, since I use tags for navigating code regularly.
In practice I've found this to be truer in vim. Emacs might make just about everything possible, but for the things I want to change, vim makes those changes practical.
I gave spacemacs a serious try, a month of solid usage, but I just couldn't get it to work how I wanted, and then a couple more weeks of just emacs/viper. It's in the uncanny valley where it behaves like vim but only superficially and sometimes. The default home screen for instance, only maps hjkl, none of you're custom bindings will work. Open up the package manager and you need to know emacs, not vim.
Then there are other things about emacs/spacemacs that are alien. When opening a tab, spacemacs want's to have a conversation about what to name it, vim just opens a tab. There are little things like this everywhere, emacs expects interactivity, vim just executes commands.
In the end I went back to vim and with version 8 it now has all the programming versatility I need.
I discovered spacemacs literally days ago, and had this exact experience almost word-for-word. Interesting that this article should appear now. Loving spacemacs so far, I actually prefer its keybindings to vim's, even though the space-prefixed style was what kept me away from it when I first discovered it.
Funny, I'm a huge Lisper, yet I don't use Emacs. Conversely, I met people who would live and die by Emacs, who didn't know any Lisp, Emacs or otherwise.
I'm worried that if I started using Emacs, I'd start hacking the Elisp (which I'd be terribly good at), and hate the lack of lexical scope, etc.
I had some nice exchanges with Stefan; we discussed the implementation of generalized places not long ago:
In TXR Lisp I implemented places in quite a different way from CL SETF expanders; from Stefan's comments I was informed that Emacs' "gv.el" is doing it in a similar way to my approach.
103 comments
[ 3.0 ms ] story [ 197 ms ] threadhttp://chrisdone.com/posts/god-mode
Why does Hacker News censor topics about real issues in the tech industry?
Why is Sam Altman a Peter Thiel apologist while saying that politics aren't welcome here?
Why does Sam Altman think that ethical issues are divorced from technology?
What we really need is a 21st century editor construction kit with Minority Report gestures, eye tracking, and voice input, as well as the keyboard.
- Gestures might not make sense in many locations (tiny cubes with limited space, for instance), or prove problematic for Deaf individuals (learning, effectively, another signed language). That said, I totally want to select text, make a yanking motion with my hands, and have it get put onto the clipboard. - Eye tracking would be an immediate no-go in any sort of closed facility - Voice input is also a no-go in closed areas, and would be extremely annoying in cube farms - far more distracting than they already are.
And for vim (inspired by [2]): [3]
I'm sure gesture tracking would probably not be too hard, using any of a number of VR input devices now on the market. Eye tracking would be harder, as I'm not aware of any consumer-level eye-tracking technologies out there. You could certainly have head-tracking pretty easily, though.
Now integrating this in a way that would actually be fluid, natural, and useful is another story, though. Also, I'm personally not sure how many big body movements I want to be doing while using my computer (unless I'm trying to exercise, play a game, draw, conduct music, or lose weight).
Ideally, I'd want to be as motionless as possible while being as comfortable as possible and while having maximum flexibility and efficiency of input. Keyboards are pretty good for that.
[1] - https://www.youtube.com/watch?v=77zPOyMmMPQ
[2] - https://www.youtube.com/watch?v=8SkdfdXWYaI
[3] - https://www.youtube.com/watch?v=TEBMlXRjhZY
VoiceCode is a $300 product. http://voicecode.io
Is it worth the money?
It's an 80% solution for org mode, but it's the 80% I care about.
I used to be a BIG spacemacs guy because I liked org so much, but I found that TaskWarrior does task tracking better, TimeWarrior does time tracking better (especially with the taskwarrior <-> timewarrior hook, it's magic!) and Vim does outlining only slightly worse but benefits from all the other optimizations I have in my vimrc.
Next thing I'm going to add is a shell function that uses pandoc to convert my notes files into HTML on demand.
I'm not saying either one is right. To me, it's kind of like Android vs. iPhone. Some are annoyed that they can't change the font weight on the wireless settings screen on iPhone. Some just want to connect to the network. Some want a Swiss army knife, some just want a sharp blade. The same argument has gone on for thirty years, but we collectively pretend we've brought something new to the table every time the subject comes up.
spacemacs may not be considered as GNU Emacs. spacemacs can often break when any of the dependency package break.
Also many people who began life with spacemacs usually switch to vanilla emacs + packages later to get more control on what they do.
The hardest part is figuring out where emacs thinks your home directory is (for me it's c:\users\<username>\appdata\roaming) to place your config files in (well, I have a config file there that loads my actual config file in a more sane location).
MinGW/GitBash include Vim by default so there it makes the setup process a no-brainer.
This is where I've gone for my binaries, and I've never had an issue (for windows, on OS X and Linux I just use the appropriate package manager I use for everything else).
Or Ubuntu, according to the author of the post.
The comparison between Arch and Ubuntu appeared rather to be on the basis of FSF blessedness:
> (the FSF probably wouldn’t like that I’m using Arch Linux, but it’s certainly better than Ubuntu)
which would make sense, considering that Ubuntu gets quite a lot more stick than Arch on the relevant FSF page: https://www.gnu.org/distros/common-distros.en.html
This is not an emacs problem, it is much bigger than that. Ubuntu, and Debian (unless you are on unstable) ship with ancient versions of many things. This shows how inefficient the package maintainer system is. Lets see if snappy (or some competing technology) manages to fix that.
I'm not a developer (I do data analysis), but compiling Emacs from source on Ubuntu (after running build-dep emacs24) has never caused me problems.
But hey, I'm sure Arch is awesome, and if I had more time I'd totally be running it.
That could be the right choice for them, if their needs are very modest and don't do much editing. For most others, especially developers and other power users, that's just not good enough.
I'm a power user. I virtually live in my editor. No editor can be powerful enough for me, and both vim and emacs have their strengths and weaknesses, so I like to use the right tool for the job. vim and emacs are really the two most powerful editors on the planet, and it pays to know how to use both, if you can commit the time. For me the time commitment has been worth it. It has made me much more productive and has greatly expanded the horizon of what is possible.
https://github.com/pklausler/aoeui
aoeui ~ qwerty (but on a different row)
(Incidentally, I am _also_ a Dvorak user! How many of us Dvorak-users-with-homegrown-editors are there?)
Interesting that you are also a Dvorak user. I originally learned to type on a Dvorak keyboard, and have only ever been able to hunt-and-peck on QWERTY. I imagine that vim's interface might seem like less of an incomprehensible, memory-dependent maze if one's fingers were accustomed to QWERTY. I tried to learn it once, with a little cheat sheet taped to my monitor, but I've never been any good at rote memorization, so I didn't really get anywhere with it and went back to nano.
Now my problem is that using Vim with any layout other than Colemak (read: QWERTY) is awkward.
And yes, I've used Emacs and written elisp to try and do the same - it just wasn't friendly enough for me.
One of the main reasons I switched was because I fell in love with Scheme (and Lisp before that), and loved the idea of an editor that was fully integrated with Lisp, was scripted in Lisp, was mostly even written in Lisp, and had powerful Lisp-editing modes like Slime. It is possible to script vim through Scheme, but 99% of vim's scripts are written in vimscript, and that's really what the vim ecosystem is designed around. So emacs was a clear winner here.
I also liked the idea of having email, web browsing, RSS news reading, IRC, Usenet, the shell, and more fully integrated in to the editor. Ideally, every app would be integrated in to my editor, and I'd love to command them all from within there. This is more or less what emacs promised.
org-mode was another big draw. It seemed cool, and I wanted to find out if it was really as big a deal as everyone said. It is. All my note-taking is now in org, and I intend to move my browser bookmarks to it too. I've since tried various org-mode clones in vim, and they're not nearly as good.
Finally, what really won me over was evil-mode, which allowed me to keep my decades of vim muscle memory and preference for modal editing.
I spent several months, spending 10 hours a day to customize emacs the way I liked it, and to bring it mostly up to parity with my vim config (which was thousands and thousands of lines long), along with customizing some emacs extensions that had no vim equivalent (like emacs-w3m, which is an embedded web browser, which is still super handy despite not working with javascript). It took that long despite me knowing Common Lisp and Scheme before switching to emacs, which made learning Elisp a breeze compared to the extra effort it would take someone coming from vim who didn't know any Lisp.
And still, even after all that work, I haven't gotten around to learning and customizing many of the things I really want to use emacs for, like email, IRC, RSS, Slime, and the various other extensions made for editing Lisp and Scheme.
So I found the switch to be a ton of work, which was worth it for me, since I'm still using emacs instead of vim, and don't intend to switch back. But others who are considering a switch from vim to emacs should also be prepared to do a lot of work customizing emacs to your liking. It's a never-ending process, really, just as it is with vim.
Even though I've switched to emacs as my primary editor, I still use both. Each have their strengths and weaknesses, and I still love vim (which comes in handy in certain situations where emacs just isn't cutting it for me).
Not so. You can just type "set -o vi" in your shell, and do pretty much what the OP does in emacs. So wanting to do this kind of editing in the shell is not really a very good reason to switch to emacs. There are much better reasons for doing that.
I use the following instead, applies to bash and all other programs using readline.
There's no harm in doing both, though -- and that's exactly what I do.
[1] https://wiki.archlinux.org/index.php/Emacs#As_a_daemon
I feel that these complaints come mostly from people that have installed a ridiculous number of very inefficient plugins to make emacs look like something else. Spaceemacs in particular is big & slow (and IMO ugly on most devices).
With spacemacs it becomes particularly problematic (especially in regards to start up times), and I think that's where the emacs daemon truly shines.
(edit: also no complaints here; I just feel this daemon is great and wanted to share the sentiment; it also felt relevant as AFAIK vim has no such feature)
Any recommendations on guides integrating email/IRC/RSS into an Emacs workflow?
ERC is built in, pretty good for IRC, very easy to use, and very configurable. There are other IRC clients as well.
There are RSS readers in emacs as well but I don't currently use them. I think elfeed is the cool one to use nowadays.
That's just because Vim users are actually getting work done rather than going to help sessions for their configuration.
I went back and tried it again some two major versions later, with the same problem. I eventually narrowed it down to the Go major mode, but I didn't have the perseverance to continue. Not when the same Go integrations were working just fine in Vim.
Oh, yeah, and it still bugs me that Evil mode treats C-] word boundaries differently than Emacs M-. (which actually matches how Vim's word boundaries work by default).
This is Emacs, not vi: If you don't like something, you can just change it.
That's more than "subtly different".
Then there are other things about emacs/spacemacs that are alien. When opening a tab, spacemacs want's to have a conversation about what to name it, vim just opens a tab. There are little things like this everywhere, emacs expects interactivity, vim just executes commands.
In the end I went back to vim and with version 8 it now has all the programming versatility I need.
(Developers who flout important conventions of this sort should be punished with disuse of their projects.)
I'm worried that if I started using Emacs, I'd start hacking the Elisp (which I'd be terribly good at), and hate the lack of lexical scope, etc.
I had some nice exchanges with Stefan; we discussed the implementation of generalized places not long ago:
https://groups.google.com/forum/#!msg/comp.lang.lisp/5By5NL4...
In TXR Lisp I implemented places in quite a different way from CL SETF expanders; from Stefan's comments I was informed that Emacs' "gv.el" is doing it in a similar way to my approach.
emacs has lexical scope these days:-)
https://www.emacswiki.org/emacs/LexicalBinding
elisp still isn't nearly as good as Common Lisp, but it at least has lexical scope now.