<div dir="auto">(fwiw, i've had lots of "why isn't this more like vim?" complaints, and this specific backspace behavior was one of them. i didn't know about this myself either. like MS Word i suspect vim is one of those products where everyone only uses 5%, but we all use a different 5%...)</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Mar 7, 2024, 12:23 Jarno Mäkipää <<a href="mailto:jmakip87@gmail.com" target="_blank" rel="noreferrer">jmakip87@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, Mar 7, 2024 at 6:32 AM Oliver Webb via Toybox<br>
<<a href="mailto:toybox@lists.landley.net" rel="noreferrer noreferrer" target="_blank">toybox@lists.landley.net</a>> wrote:<br>
><br>
> Looking at vi.c again, (I _know_ I can write code better then I did in October, and<br>
> since the cleanup pass hasn't happened yet I thought I'd start improving things now)<br>
> noticed there was no support for merging lines when doing a backspace at the start<br>
> of a line (e.g. deleting blank lines by pressing backspace) So I added that. There<br>
> is a bug where it will delete the last character of the line you are merging into,<br>
> Still. That behavior is considerably better than nothing (And dunno how to debug it,<br>
> vi_join isn't doing it's job for some reason) so I added it into the patch.<br>
<br>
Well I am unsure what backspace should do on vi, I dont remember why I<br>
even added it. If i look vi man page there is no mention of backspace<br>
existing. I dont personally backspace except while typing on insert<br>
mode or ex mode and only the data I am about to insert not the data<br>
already inside buffer. Perhaps I added backspace delete for buffer<br>
stuff since someone request it on mailinglist, but cant find who,<br>
when, and why.<br>
<br>
If looking other vi clones by just using them, and comparing backspace behavior<br>
<br>
nvi does the thing how i originally intended, backspace can only be<br>
used to cut your typo out of your ongoing insert, not to delete stuff<br>
from buffer. and it does not move your cursor backward inside buffer<br>
<br>
vim on :set compatible; behaves almost same as nvi. it does not delete<br>
stuff from buffer but it allows you to move cursor left while in<br>
normal mode, but only up until newline<br>
<br>
vim on :set nocompatible deletes stuff from buffer if in insert mode,<br>
and goes backward on normal mode, but jumps into previous line<br>
<br>
busybox vi, has bit similar behavior as vim in compatible mode, but it<br>
has its own weirdness too (I backspaced around, press undo 2 times and<br>
it inserted some garbage into my open buffer. )<br>
<br>
Feel free to fix it up, some other features are simpler since you can<br>
just read the man page and make it behave accordingly, but backspace<br>
is maybe not very trivial one since its either you follow heirloom vi,<br>
or make some educated assumption how average person would want to use<br>
it. To me this patch is not necessarily fixing it, but making it<br>
behave the way you want, maybe more vim way?<br>
<br>
About join lines function I dont see any issues with original version,<br>
its doing what it supposed to do, searching newline and taking it out,<br>
(with some buffer management magic called piece table method, here is<br>
some info if you interested on how it works<br>
<a href="https://www.cs.unm.edu/~crowley/papers/sds.pdf" rel="noreferrer noreferrer noreferrer" target="_blank">https://www.cs.unm.edu/~crowley/papers/sds.pdf</a>)<br>
<br>
My original idea was to make vi as simple as possible: move with<br>
simple motions, delete, yank and push and insert few words with insert<br>
mode. Kinda rescue editor, in 1000 lines of code and leave it to Rob<br>
to clean up, (or yank out and rewrite.) Then people started using it,<br>
at least as rescue editor, so some quality of life patches came in,<br>
and now its near 2000 lines.<br>
<br>
<br>
br<br>
Jarno<br>
<br>
<br>
><br>
> As far as ex commands go, this patch removes the function get_endline, and replaces it with directly<br>
> probing the buffer. Which is much faster then redrawing the page 2 times.<br>
><br>
> Other then that, This replaces a couple of variable names and removes a unnecessary goto<br>
><br>
> -   Oliver Webb <<a href="mailto:aquahobbyist@proton.me" rel="noreferrer noreferrer" target="_blank">aquahobbyist@proton.me</a>><br>
> _______________________________________________<br>
> Toybox mailing list<br>
> <a href="mailto:Toybox@lists.landley.net" rel="noreferrer noreferrer" target="_blank">Toybox@lists.landley.net</a><br>
> <a href="http://lists.landley.net/listinfo.cgi/toybox-landley.net" rel="noreferrer noreferrer noreferrer" target="_blank">http://lists.landley.net/listinfo.cgi/toybox-landley.net</a><br>
_______________________________________________<br>
Toybox mailing list<br>
<a href="mailto:Toybox@lists.landley.net" rel="noreferrer noreferrer" target="_blank">Toybox@lists.landley.net</a><br>
<a href="http://lists.landley.net/listinfo.cgi/toybox-landley.net" rel="noreferrer noreferrer noreferrer" target="_blank">http://lists.landley.net/listinfo.cgi/toybox-landley.net</a><br>
</blockquote></div>