ENV values

Hi all,

I'm working on an ssh script where I'd like to read out console
dimensions to adjust the output window - the default value of 80x24
isn't that good. :wink:

So I thought it should work by simply reading out the environment
variables $COLUMNS and $LINES (Linux system). The results in irb were
what I needed:

路路路

===---===---===---===---===---===
irb(main):001:0> ENV['COLUMNS']
=> "99"
irb(main):002:0> ENV['LINES']
=> "32"
===---===---===---===---===---===

But in a ruby script these things didn't work anymore. A really simple
script:

===---===---===---===---===---===
#!/usr/bin/ruby -w

puts ENV['USER']
puts ENV['LINES']
===---===---===---===---===---===

This gave me the output:
frank
nil

Ok, that didn't work like I've expected it, so here is another way:

===---===---===---===---===---===
irb(main):001:0> lines = `echo $LINES`
=> "32\n"
irb(main):002:0> puts lines
32
=> nil
===---===---===---===---===---===

Now as ruby script:

===---===---===---===---===---===
!/usr/bin/ruby -w

lines = `echo $LINES`
puts lines
===---===---===---===---===---===

Well, also no success. :-/ It gave me only a blank line.

Does anyone have an idea what I could do to get column & line numbers of
the console window?

Thanks...

Frank

--
Posted via http://www.ruby-forum.com/.

Frank Hofmann wrote:

/ ...

Does anyone have an idea what I could do to get column & line numbers of
the console window?

Ruby doesn't know about the "console window" that spawned it. The console
window is the parent process of the Ruby process, and the child process
doesn't inherit all of the parent's environment variables. One reason for
this is that you can change the console window size as Ruby runs, but Ruby
can't get the window size changes from its parent.

So, because they cannot be relied on to be correct in the child process,
these two values are simply dropped from the ENV list.

Try this experiment in a Linux desktop environment with an open Konsole or
other command window:

$ while true; do echo "$LINES,$COLUMNS"; usleep 100; done

Now change the window size as the above code line runs. See the numbers
change? Ruby cannot keep track of these changes in its parent.

路路路

--
Paul Lutus
http://www.arachnoid.com

If you dont mind depending on ncurses then will something like this work?
you will need the ncurses-ruby package

路路路

On 8/30/06, Frank Hofmann <nospam@lunox.org> wrote:

Hi all,

I'm working on an ssh script where I'd like to read out console
dimensions to adjust the output window - the default value of 80x24
isn't that good. :wink:

So I thought it should work by simply reading out the environment
variables $COLUMNS and $LINES (Linux system). The results in irb were
what I needed:

===---===---===---===---===---===
irb(main):001:0> ENV['COLUMNS']
=> "99"
irb(main):002:0> ENV['LINES']
=> "32"
===---===---===---===---===---===

But in a ruby script these things didn't work anymore. A really simple
script:

===---===---===---===---===---===
#!/usr/bin/ruby -w

puts ENV['USER']
puts ENV['LINES']
===---===---===---===---===---===

This gave me the output:
frank
nil

Ok, that didn't work like I've expected it, so here is another way:

===---===---===---===---===---===
irb(main):001:0> lines = `echo $LINES`
=> "32\n"
irb(main):002:0> puts lines
32
=> nil
===---===---===---===---===---===

Now as ruby script:

===---===---===---===---===---===
!/usr/bin/ruby -w

lines = `echo $LINES`
puts lines
===---===---===---===---===---===

Well, also no success. :-/ It gave me only a blank line.

Does anyone have an idea what I could do to get column & line numbers of
the console window?

Thanks...

Frank

--
Posted via http://www.ruby-forum.com/.

-----------------------------------------------
require "ncurses.rb"

win = Ncurses.WINDOW.new()
win.getmaxyx(y=[], x=[])
win.delwin()
----------------------------------------------
This should open ncurses mode, get its dimensions - which are handled
correctly and then drop you back out of ncurses.

Note that I havent tried it at all, am a complete newb to Ruby and
found the bits via google, but for 4 lines its worth a try.

Tom

Hi Paul, hi Tom,

thanks for your hints. :slight_smile:
The ncurses solution didn't work, WINDOW method isn't known.
But no problem, I'm glad about every idea. :slight_smile:

In the meanwhile I've solved the problem by using `stty`.

路路路

===---===---===---===---===---===
#!/usr/bin/ruby -w
c = `stty size`.chomp
c =~ /\s/
lines, columns = $`, $'
===---===---===---===---===---===

Frank

--
Posted via http://www.ruby-forum.com/.

or, to make it a little bit more readable (no offend, but yours looks like
perl :wink:

路路路

On Wednesday 30 August 2006 19:37, Frank Hofmann wrote:

Hi Paul, hi Tom,

thanks for your hints. :slight_smile:
The ncurses solution didn't work, WINDOW method isn't known.
But no problem, I'm glad about every idea. :slight_smile:

In the meanwhile I've solved the problem by using `stty`.

===---===---===---===---===---===
#!/usr/bin/ruby -w
c = `stty size`.chomp
c =~ /\s/
lines, columns = $`, $'
===---===---===---===---===---===

===---===---===---===---===---===
lines, columns = `stty size`.chomp.split
# ["81", "226"]
===---===---===---===---===---===

thanks for finding that out btw, i love it :slight_smile:

MfG
manveru

Frank