If you don't know or care about pagers and process management, you can stop 
reading now.

*Background:* I have a program that compile my code each time I modify it. 
It produces logs continuously on a terminal. 

I'm trying to write a go program to wrap this program so that each compile 
log is opened in a pager, and so that when a new compile starts, the pager 
for the previous compile is automatically closed. Essentially, I'm trying 
to change the program from doing (pseudo-shell)

while true; do
  awaitChange
  build
end

to:

while true; do
  awaitChange
  kill $!
  build | less &  # <--- except less should be in the foreground of the 
terminal
  to_kill=$!
end

There are wrinkles: I don't control the program that executes this loop. So 
I wrote a go program to process the input and separate it into a series of 
output buffers based on a regexp. I've gotten it to the point where I can 
start and kill less, and feed it the separated inputs. 

*My problem:* less is not behaving as it would if you ran it on the 
commandline. The arrow keys don't work, ^C either does nothing (on the 
first run of less) or interrupts the parent program, etc.

I believe my mistake is that I am not correctly putting less into the 
foreground. I also suspect that I'm not correctly moving my go program back 
into the foreground each time I kill the child less process. I'm wondering 
if anyone knows the magical incantation that is required to make this work 
properly. My current code is here (with the compiler replaced by a random 
number generator, since it is proprietary to the company I work for). I 
have marked with TODOs the things I think are not working correctly.

https://play.golang.org/p/Xv0y-Ln7aC

Any ideas what I'm doing wrong here?

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to