I attached a version of acmebrowse that doesn't require tmux. I removed
readme from the script - you can still find it in a previous message.
Only pipes are used. Below is a generalized version that could be
adapted for other programs:
> #!/bin/rc
>
> . 9.rc
> . $PLAN9/lib/acme.rc
>
> fn event {
> switch($1$2){
> case E* # write to body or tag
> case F* # generated by ourselves; ignore
> case K* # type away we do not care
> case Mi # mouse: text inserted in tag
> case MI # mouse: text inserted in body
> case Md # mouse: text deleted from tag
> case MD # mouse: text deleted from body
> winwriteevent $*
> case Mx MX # button 2 in tag or body
> echo $9
> case Ml ML # button 3 in tag or body
> echo /$9/
> }
> }
>
> newwindow
> _AT_{wineventloop} | edbrowse | winwrite body
wineventloop is exucuted in a subshell and the output is piped into
edbrowse (simple echo is used within a loop). This approach has few
advantages. Buffering issues are avoided as in case of fifos or
redirection to a file:
$ tail -f input | edbrowse
$ echo "some command" >> input
Blocking the reads from edbrowse stdout is unnecessary, since it is
piped all the time into acme window. Yet the content of a window can be
erased if need using:
> echo -n , | winwrite addr
> winctl 'dot=addr'
> winwrite data
Blocking in acmebrowse is used now for a different purpose: jumping to
the top of a window. If you don't mind the cursor ending at a bottom of
content, you can get away without "kill $apid/wait" approach.
Window name in acme matches now the filename/URL opened in edbrowse. I
find it more useful than the name of a script.
As if PCRE wasn't a mess enough, edbrowse doesn't use them it in a
straight way. Some behavior was changed to match ed more closly. I
decided that the best way to sanitize them is to turn special characters
into dots:
$ echo $regexp | tr '^$[]+*?\/' '.'
This avoids the escape hell, when you want to repeat a search.
I'm pretty satisfied with the script. Other than that the naming of
functions/commands could be improved I guess.
--
Paul Onyschuk
Received on Tue Jul 29 2014 - 12:30:57 CEST