Hacker News new | past | comments | ask | show | jobs | submit login

I hadn't heard of rope data structures until I read about the xi editor (also written in Rust) a few years ago, but it looks like that's been discontinued.

https://github.com/xi-editor/xi-editor




The authors of Xi are currently working on Xilem, an experimental reactive UI framework for Rust: https://github.com/linebender/xilem

In the announcement post, they mention that work on Xi is considered "on hold" rather than strictly discontinued: https://raphlinus.github.io/rust/gui/2022/05/07/ui-architect...


Legendary-tier yak shaving.

"I want to build an editor, but first I must solve rendering 2D graphics purely on the GPU, invent a parallelizable path solver, and code a human perception-based color value manipulation library."


You have no idea.

I think we're at five or six levels of yaks by now.

(xi -> xilem -> masonry -> vello -> peniko -> color)


It's a lot of fun to follow, especially as its so different than my developmental expertise.

You can see the current projects (13 active) on https://linebender.org , and several members post interesting checkins in https://xi.zulipchat.com/


> first I must solve rendering 2D graphics purely on the GPU

To be fair, the original author of Xi ('raphlinus) has been working on GPU-side 2D rendering much longer than on Xi.


This is the path to Enlightenment (17).


They just had a release as well :-) It doesn't really seem to get much press anymore... Back in the 'early days' - wow! E! was something pretty special :-D


E15 or so was mindblowing at the time. It was living in a sci-fi movie.


Repo says "discontinued".


Yes, the xi repo is discontinued. They recommend the lapce editor as the spiritual successor:

https://github.com/lapce/lapce


I'd also recommend Helix [0] (which also uses the rope data structure [1]), that's a more widely used editor also written in Rust.

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

[1] https://github.com/helix-editor/helix/blob/master/docs/archi...


This looks pretty cool - except... modes like in vi are a no-go area; has anyone tried to modify the GUI (key bindings) to make it similar to Emacs or Notepad?

The extra keypress for switching between "i" (inserting text) "ESC" (moving cursor) "i"... would drive me insane (just not used to it, but used to very fast, friction-free typing/editing).


I'm curious, how do you avoid friction between inserting text and editing? Surely moving your hand to the mouse, arrow keys, or Ctrl key for an Emacs keybinding takes longer than pressing "i"?

I'll grant that Esc is further away, but it can be remapped.


I rebind ESC to caps lock, works wonders as it's right on the same keyboard row as the home keys.


There might be mods but it is fundamentally built around those vi like keybindings so you'll be fighting an uphill battle.


helix is a really really good text editor / terminal IDE

I'm seriously impressed by the level of quality out of the box


Thanks for posting. I discovered floem https://github.com/lapce/floem I’ve been looking for something like it


Zed uses something similar to ropes as well:

https://zed.dev/blog/zed-decoded-rope-sumtree


Zed's Sum Tree is my favorite datastructure ever and is the future of database indexes.


I think this is what Guy Steele called a "monoid-cached tree":

https://www.youtube.com/watch?v=ftcIcn8AmSY


Cool talk, thanks for sharing!


Zed seems to be a gui-oriented editor here: https://zed.dev/


You still need a backing data structure that holds the contents of your editor, and that's where you'd use a rope.


Is it even possible to write any text editor without some form of rope data structure?


Here's a paper reviewing the various choices, that is often mentioned in discussions around data structures for text editors:

https://www.cs.unm.edu/~crowley/papers/sds.pdf



MS Word used piece table, which led to the "fast save" feature - which saved only the newer pieces.


Gap buffers are the other classic option, and there are others too, e.g. piece tables.


Most certainly: gap buffers, piece tables, and line arrays are also popular choices.




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: