Hi Arthur, > I understand that some people may miss the undo feature, as it's so > common in others tools. I've given it a lot of thought when designing > edit. As you pointed out, undo-ing is tightly linked to the data > structures, so leaving it aside had major implications on the > developement. > > Undo-ing is clearly a non-trivial feature. Most operations are not > injective, meaning one cannot deduce the previous content only from > the new, modified content. Thus implementing undo-ing recquires > storing and managing more content. How much complexity it adds very > much depends on the data structures. > > vis[0] (after a quick inspection) seems to have found a good balance > between simplicity and compatibility with features such as undo-ing. > I felt that going the undo path would result in a cheap and > non-innovative vis imitation. > > Besides, I found out I was saving so frequently in vim that undo-ing > was most of the time equivalent to reloading. Going without undo-ing > was not a real issue for me. > > So I took edit as an opportunity to explore how much complexity can be > stripped off by not implementing the undo feature. There are very few > defined structures. Content is simply stored line by line in a doubly > linked list, as UTF-8 strings: > > typedef struct Line { // doubly linked list of lines > struct Line *prev, *next; > int line_nb; // between 1 and nb_lines > int ml, dl; // length in memory, on screen > char *chars; // content (UTF-8, NULL-ended > string) > } Line; > > So that's for the the explanation, but to be honest your mail > triggered me to think of undo-ing again. As I don't intend to change > the central data structures, undo-ing won't be as good as in vis, but > I have a few ideas... I'll come back to you if I have some news.
Well, I really get the idea and the opportunity to have an editor without editing history, and that could actually be a good way to train for it too. I was rather looking for confirmation, that wasn't really a feature-request. I think that my most recurrent use-case of undoing is for testing text replacement, sometimes getting the correct RegEx need a couple tries for complex ones. But again, those problem can also be solved with some discipline and I wouldn't want to trigger a corruption of the current model if you like how it is already! Thanks for your consideration though, cheers! > > > > >