Hacker News new | ask | show | jobs
by kgadek 4067 days ago

  Q: Why Python?
  A: The only alternative would be Haskell, but I still have to learn that.
Wow, that would be interesting.
2 comments

Hi, I once tried that, but I ran into problems with lazyness. In particular my data structure was rather simple (famous gap data structure), but editing "large" files (>1000LOC) became rather unpleasant (too big input-feedback latency).

However I managed to build a _very_ basic proof-of-concept editor (no dependencies) in just a few hundreds lines of code which I could explain, but until now I was too shy to share it as it did not involve magic abstract Haskell-foo ... ;)

> I was too shy to share it as it did not involve magic abstract Haskell-foo

Please don't be, simple understandable Haskell code is very nice :)

Plus if there is a better way of doing it you get to find that out too.

That's a shame!

"Gets the job done in just a few hundred lines of easily-explained code" is a terrific standard to meet.

"Magic abstract Haskell-fu" cannot improve such a program very much.

Yi[0] is an editor written in Haskell.

[0]: https://github.com/yi-editor/yi

It's got an amazing (I'm not sure if that's in a good or bad way) system for reloading config. Config is code. Reconfiguration means recompiling. If you reload the config, you recompile yi and reexec it - file handles and other information is left laying around so you end up in exactly the same state as before. It's slightly scary from the programming side...
Xmonad does the same thing.
Emulates Vim quite nicely, too.
Not really, no. yi badly needs some more love.
Care to elaborate on where it falls down emulating vim?
Yi is really nice, overall. The code is clean too.

I don't remember all of the issues, but there are a ton of small things that make the editor unusable to me. I used it for a couple of weeks, and I spent some time working on these issues, but never had PR-worthy code. Here's what I can remember off the top of my head:

- Startup time is very slow because of the way configuration works. In my local copy, I made a version without runtime configuration, and that solved this problem. This conflicts pretty badly with the whole architecture, so I didn't make a PR.

- :n :N don't work. Opening multiple files from the command line doesn't work.

- :cq doesn't work. I fixed this, but my fix was a hack, so I didn't make a PR.

- Operating on regions with '{' and '}' is off by one line in some directions.

- You can't replace regions with shell commands. For example, using '!}sort' to sort a paragraph.

Cool! I guess my evaluation of Yi/vim emulation was more cosmetic than I thought :)