45 votos

Cómo obtener el ancho de la ventana de terminal en Rubí

Has notado que si ejecuta rastrillo -T en carriles de la lista de descripciones de rastrillo se truncan por la anchura de la ventana de terminal. Así que debe haber una manera de hacerlo en Ruby y utilizarlo.

Estoy imprimiendo algo de Ascii-art en la pantalla y no lo quiero estar roto. por lo tanto necesito saber el ancho del terminal en tiempo de ejecución alguna forma.

¿Alguna Idea de cómo hacerlo?

45voto

Ralf Puntos 3732

He encontrado que en Ubuntu, ninguno de los otros métodos que se especifican aquí (ENV['COLUMNS'], tput columns o hirb) dar el resultado correcto, si el terminal es de tamaño mientras que el Rubí de la aplicación se está ejecutando. Este no es un problema para los scripts, pero es un tema para consolas interactivas, tales como la irb.

El ruby-terminfo gema es la mejor solución que he de encontrar hasta el momento para dar las dimensiones correctas después de un cambio de tamaño, pero requiere que se instale un adicional de gema, y es específica de unix.

La joya de uso es simple:

require 'terminfo'
p TermInfo.screen_size        # [lines, columns]

TermInfo utiliza internamente TIOCGWINSZ ioctl para el tamaño de la pantalla.

Alternativamente, como se ha mencionado por user83510, highline del system_extensions también funciona:

require 'highline'
HighLine::SystemExtensions.terminal_size # [columns, lines]

Interally, highline utiliza stty size en Unix, y otras implementaciones de ncurses y Windows.

Escuchar para que los cambios del tamaño del terminal (en lugar de la votación), podemos atrapar el SIGWINCH de la señal:

require 'terminfo'
Signal.trap('SIGWINCH', proc { puts TermInfo.screen_size.inspect })

Esto es especialmente útil para aplicaciones que utilizan Readline, tales como el irb:

Signal.trap('SIGWINCH', proc { Readline.set_screen_size(TermInfo.screen_size[0], TermInfo.screen_size[1]) })

43voto

Brian Gianforcaro Puntos 11985

Su es un comando común de unix:

tput cols

Que vuelva el ancho del terminal.

9voto

user83510 Puntos 3885

Si quieres el código para trabajar en plataformas, aquí es lo que uso: http://github.com/cldwalker/hirb/blob/master/lib/hirb/util.rb#L61-71

También revisa el archivo system_extensions en highline

5voto

Tom Chapin Puntos 336

Ruby realmente viene con una Built-in clase llamada "Maldiciones", que le permite hacer todo tipo de cosas con la ventana de terminal.

Por ejemplo, usted puede hacer esto:

require 'curses'

Curses.init_screen()

puts Curses.lines # Gives you the height of terminal window
puts Curses.cols # Gives you the width of terminal window

Para más información: http://ruby-doc.org/stdlib-1.9.3/libdoc/curses/rdoc/Curses/Window.html

3voto

Ethan Gunderson Puntos 2254

ENV ['columnas'] le dará el número de columnas en el terminal.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X