janet-utf8
xi-editor
janet-utf8 | xi-editor | |
---|---|---|
1 | 42 | |
16 | 19,811 | |
- | 0.1% | |
10.0 | 2.6 | |
over 2 years ago | 2 months ago | |
C | Rust | |
MIT License | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
janet-utf8
-
The Absolute Minimum Every Software Developer Must Know About Unicode in 2023
Regarding UTF-8 encoding:
“And a couple of important consequences:
- You CAN’T determine the length of the string by counting bytes.
- You CAN’T randomly jump into the middle of the string and start reading.
- You CAN’T get a substring by cutting at arbitrary byte offsets. You might cut off part of the character.”
One of the things I had to get used to when learning the programming language Janet is that strings are just plain byte sequences, unaware of any encoding. So when I call `length` on a string of one character that is represented by 2 bytes in UTF-8 (e.g. `ä`), the function returns 2 instead of 1. Similar issues occur when trying to take a substring, as mentioned by the author.
As much as I love the approach Janet took here (it feels clean and simple and works well with their built-in PEGs), it is a bit annoying to work with outside of the ASCII range. Fortunately, there are libraries that can deal with this issue (e.g. https://github.com/andrewchambers/janet-utf8), but I wish they would support conversion to/from UTF-8 out of the box, since I generally like Janet very much.
One interesting thing I learned from the article is that the first byte can always be determined from its prefix. I always wondered how you would recognize/separate a unicode character in a Janet string since it may have 1-4 bytes length, but I guess this is the answer.
xi-editor
-
Zed is now open source
Was confused until I realised I'd confused Zed, with Xi[1] which is also rust based, and which incidentally has a frontend called "Xim"..
Also there's a wiki-editor (like Tomboy[2]) called "Zim"[3].
[1] https://github.com/xi-editor/xi-editor
-
Text Editor: Data Structures
Project site linked from the GitHub[0] is https://xi-editor.io. Linked doc is a mirror of this[1], which was afaik originally written by Raph Linus.
[0]: https://github.com/xi-editor/xi-editor
[1]: https://xi-editor.io/docs/rope_science_01.html
-
The Absolute Minimum Every Software Developer Must Know About Unicode in 2023
> thing that gets deleted when you hit backspace
Is there a canonical source for this part, by the way? Xi copied the logic from Android[1] (as per the issue you linked downthread), and I vaguely remember that CLDR had something to say about this too, but I don’t know if there’s any sort of consensus here that’s actually written down anywhere.
[1] https://github.com/xi-editor/xi-editor/pull/837
- Google abandons work to move Assistant smart speakers to Fuchsia
-
What's is a rusty way to implement sharable trees?
This is pretty much how copy-on-write ropes work. Check out xi-rope, Ropey or crop, they're all built using B-trees and implement the behavior you described.
-
Helix (a Kakoune / Neovim inspired editor) 23.03
Helix is awesome, though once Lapce (spiritual successor to Xi editor) gets the Helix/Kakoune editing model, I may have to jump ship
-
Editors written in rust
Home (xi-editor.io)
-
How to share resources between instances of program?
Maybe take a look at the Xi editor (https://xi-editor.io/) (written in rust I think) that uses a client server architecture.
-
Suitable Rust GUI Library for Code Editor?
Have a look at what Lapce uses. The editor is coming along nicely, and iirc, they use the Xi editor as a plug-in.
-
CRDTs make multiplayer text editing part of Zed's DNA
Raph Levien posted a retrospective about using CRDT’s for collaborative editing in xi-editor here [1]. His conclusion is
“I come to the conclusion that the CRDT is not pulling its (considerable) weight. When I think about a future evolution of xi-editor, I see a much brighter future with a simpler, largely synchronous model, that still of course has enough revision tracking to get good results with asynchronous peers like the language server.”
[1]https://github.com/xi-editor/xi-editor/issues/1187#issuecomm...
What are some alternatives?
text - A spicy text library for C++ that has the explicit goal of enabling the entire ecosystem to share in proper forward progress towards a bright Unicode future.
helix - A post-modern modal text editor.
grapheme-splitter-lite - A light-weight Java library that breaks strings into user-perceived characters a.k.a. Grapheme Clusters for common cases.
alacritty - A cross-platform, OpenGL terminal emulator.
tonsky.me
iota - A terminal-based text editor written in Rust
hn-search - Hacker News Search
lapce - Lightning-fast and Powerful Code Editor written in Rust
Servo - Servo, the embeddable, independent, memory-safe, modular, parallel web rendering engine
kakoune.el - A very simple simulation of the kakoune editor inside of emacs.
rust-genetic-algorithm - A genetic algorithm for bechmark problems, written to learn Rust.
LunarVim - 🌙 LunarVim is an IDE layer for Neovim. Completely free and community driven.