(Sorry this took so long to respond to, the email sat in my drafts as I got 
preoccupied with other stuff)
On Friday, March 8th, 2024 at 02:47, Jarno Mäkipää <jmaki...@gmail.com> wrote:
> if you want backspace to jump into previous line, you should not call
> ex commands dispatcher in middle of normal mode.

run_vi_cmd() is the vi command dispatcher (hjkl, gg/G, i/I/a/A, standard normal 
mode stuff).
And run_ex_cmd() is the ex command dispatcher (:s///g, :g//, :w, :q!). This 
patch calls the 
vi command one, not the ex one.

I don't enjoy calling either whenever unnecessary, I only so do when I can't 
get the things
run_vi_cmd() is multiplexing to work on their own. vi_join doesn't work and I 
don't know
why, I'll have to re-read run_vi_cmd() eventually and figure out why things it 
multiplex
break on direct calls

I'm not terribly familiar with how the buffer management of vi.c works, My main 
interest
has always been to get a small set of ex commands in, along with fixing 
whatever segfaults/
lack of functionality I find along the way. I found the run_vi_cmd 
infrastructure and assumed
I could build off that for ex commands instead of rewriting the micromanagement 
of buffer characters
myself. But things like vi_go() don't work on their own without run_vi_cmd(), 
and reading through
both doesn't give me much insight to me on why. I'll dive into it more with 
debug printf-ing eventually.

I'll take your advice on how to make backspace-ing jump over lines. And will 
probably
replace the existing run_vi_cmd logic with the direct logic in a future patch 
to vi.c
(I still don't know the "proper" way to submit fixes for pending patches, which 
has
existed since my first patches for ts.c in September. Submitting a patch to do
another commit on top of the old patch to fix whatever is bad seems reasonable? 
But
then again it doesn't seem more "correct" than making another, better version 
of the
old patch that can be applied to a unmodified codebase and just re-submitting 
that)

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

Thank you for this by the way.

> If someone needs them, I think
> first thing to do is implement better ex command parsing and
> dispatching, original version was intended only to parse write and
> quit commands.

Right now it's a large if/else staircase with loop (2addr) processing at the 
end.
It doesn't have the infrastructure for the whole 
[2addr]cmd[buffer][count][flags]
(Which has so many exceptions and special cases that just processing them 
individually
when they do show up individually is often more simple)

Advanced ex command magic stopped being used as often when people got used
to vi and it's improvements, 99% of the time I see/run a ex command that isn't
writing or quitting, it's ":%s/pattern/replacement/g", ":g/pattern/command", or
some close variant of that. Because they provide things that vi normal mode 
doesn't
and can't easily.

> (the 90% vi user case, rest of 9% not knowing how to
> quit and 1% needing something else)

I use vim for batch processing on files frequently, which involves a lot
of ":%s/pattern/replacement/g" and ":g/pattern/COMMAND". It may only be 1%
in your workflow, but replacing names/converting comments/processing large
blocks of similar statements is made a lot more convenient by things like
the s[ubsitute] command in my experience.

- Oliver Webb aquahobby...@proton.me

_______________________________________________
Toybox mailing list
Toybox@lists.landley.net
http://lists.landley.net/listinfo.cgi/toybox-landley.net

Reply via email to