[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

ENV values

Frank Hofmann

8/30/2006 7:16:00 AM

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. ;)

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-....

4 Answers

Paul Lutus

8/30/2006 8:17:00 AM

0

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.ara...

Thomas Beckett

8/30/2006 9:36:00 AM

0

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. ;)
>
> 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-....
>
>

If you dont mind depending on ncurses then will something like this work?
you will need the ncurses-ruby package
-----------------------------------------------
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

Frank Hofmann

8/30/2006 10:37:00 AM

0

Hi Paul, hi Tom,

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

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-....

Michael Fellinger

8/31/2006 2:11:00 AM

0

On Wednesday 30 August 2006 19:37, Frank Hofmann wrote:
> Hi Paul, hi Tom,
>
> thanks for your hints. :)
> The ncurses solution didn't work, WINDOW method isn't known.
> But no problem, I'm glad about every idea. :)
>
> In the meanwhile I've solved the problem by using `stty`.
>
> ===---===---===---===---===---===
> #!/usr/bin/ruby -w
> c = `stty size`.chomp
> c =~ /\s/
> lines, columns = $`, $'
> ===---===---===---===---===---===

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

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

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

MfG
manveru

>
> Frank