I was using regex-builder to make something, but it still looked like this:
1
|
|
Leaning-toothpicks syndrome is kicking my ass. What if I write a regex using S-expressions? Wouldn’t that be the bee’s knees?
Well, one thing I can do use use the rx
macro, but re-builder
doesn’t seem to want to work with it. I call (reb-change-syntax)
to select ‘rx’ but it only performs a search sometimes? And often finds no matches?
Debugging from this impetus I get to stepping through reb-update-overlays
but I can’t inspect the value of local variables in either edebug
or debug
for some weird reason. (Because of -*- lexical-binding:t -*-
in the file.)
New yak frame: how to inspect vars in lexically bound code? It’s probably impossible, though there was an incomplete thread about it a couple years ago.
Well, I guess I’ll debug it by adding messages.
Now, I find that when I use (rx (one-or-more "/"))
, that macro should expand to "/+"
but but the regexp we search for is actually "\\(?:/\\+\\)"
which doesn’t look like a proper regex. What is reb-target-binding
doing? Pulling the binding from the target buffer. What’s reb-cook-regexp
doing? Calling rx-to-string
on the result of an rx
macro. Which it shouldn’t?
Oh, I was typing
1
|
|
in the buffer like a sucker (idk, that’s what you would write in Elisp?). Turns out I need to type
1
|
|
So how do I do a longer regex????? Use and
/seq
. It should be called progn
, shouldn’t it? Turns out I should write in regexp-builder like
1
|
|
So now I write regexps in regexp-builder like:
1 2 3 4 5 |
|
and then paste the (seq ...)
into an (rx ...)
macro when I’m done.
Well, there’s one more problem. Sometimes I can type a correct regexp and it won’t update (it actually removes all highlights). Seems to have something to do with regexp-builder behaving inappropriately when an edit doesn’t change the compiled form of the regexp. But I can then call (reb-force-update)
and it does, that’ll work for now.