Re: need "windowlist" info externally, not interactively

Amadeusz Sławiński <[email protected]>
Newsgroups gmane.comp.gnu.screen.user
Message-ID <[email protected]>
On Mon, 19 Oct 2015 20:47:34 +0200
Axel Beckert <[email protected]> wrote:

> Hi,
> 
> On Sun, Oct 18, 2015 at 11:13:07PM +0000, Anonymous wrote:
> > A shell script needs to be able to add a window, and know in advance
> > what window number is still available.  It will then do some
> > stuffing.
> > 
> > ATM it's quite messy and complex.  The script attempts to randomly
> > create a title then use that as a handle, but then it must
> > eventually rename the window to something sensible.  Sometimes it
> > screws up and clobbers an existing window.
> 
> Which screen commandline parameters do you use for that? I'd expect
> something like "screen -X screen 63 somecommand". (Would run
> "somecommand" in a window with number 63 unless that number is already
> in use.)
> 
> > I need a more sensible option.  E.g. I need to be able to do
> > something like "screen -x user/session -windowlist", and simply get
> > a dump of windows, which the script can then parse.
> 
> Have you tried "screen -Q windows"? Unfortunately it seems to be
> truncated to the width of the screen session's bottom line. Luckily it
> seems truncated at the beginning, i.e. you always see the highest
> number:
> 
> Get the highest window number:
> 
> $ screen -Q windows | sed -e
> 's/^.*[^0-9]\([0-9][0-9]*\)[^0-9]*\$[^$]*$/\1/' 10
> $
> 
> Run "mc" in a window with one window number higher than the highest
> one (i.e. always a predetermined window number):
> 
> $ screen -X screen $(($(screen -Q windows | sed -e
> 's/^.*[^0-9]\([0-9][0-9]*\)[^0-9]*\$[^$]*$/\1/')+1)) mc
> 
> (needs bash or zsh for $((expression)) to work)
> 
> Or separated to reuse the window number elsewhere:
> 
> $ windownumber=$(($(screen -Q windows | sed -e
> 's/^.*[^0-9]\([0-9][0-9]*\)[^0-9]*\$[^$]*$/\1/')+1)) $ echo Window
> will be created with number $windownumber $ screen -X screen
> $windownumber mc
> 
> HTH.
> 
> 		Kind regards, Axel

Hey,

Just to add, on new versions (from 4.3.0) it is also possible to do
something like: screen -Q windows "%n %t\n"
to list window titles, it should return window numbers and titles on
separate lines

Like:
$ screen -S test -Q windows "%n %t\n"
0 zsh
1 zsh
2 zsh

You can use it to determine first free "missing number"
for example in 
$ screen -S test -Q windows "%n %t\n"
0 zsh
2 zsh
next window will be 1

or use in combination with 'collapse' command (also introduced in 4.3.0)

and then use wc -l to get window number

$ ./screen -Q windows "%n %t\n"
0 zsh
2 zsh
$ ./screen -X collapse
$ ./screen -Q windows "%n %t\n"
0 zsh
1 zsh
$ ./screen -Q windows "%n\n" | wc -l
2
$ windownumber=$(./screen -Q windows "%n\n" | wc -l)
$ echo $windownumber

Best Regards,
Amadeusz
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.