2011-09-07 2 views
5

Comment puis-je obtenir des couleurs avec la bibliothèque de curseurs par défaut de Ruby?Ruby maudit les couleurs

donc quelque chose comme:

puts "\e[0m\e[30;47mtest\e[0m" 

fonctionne très bien. Donne un joli noir sur fond gris clair. Mais ceci:

#!/usr/bin/env ruby 

require 'curses' 

Curses.noecho # do not show typed keys 
Curses.init_screen 
Curses.stdscr.keypad(true) # enable arrow keys (for pageup/down) 
Curses.stdscr.nodelay = 1 

Curses.clear 
Curses.setpos(0,0) 
Curses.addstr "Hello!" 
Curses.addstr "\e[0m\e[30;47mHello!\e[0m" 

Affiche:

Bonjour!

^[[0 m^[[30, 47mHello^[[0 m

En fin de compte, je besoin de couleurs pour cette:

How to capture a key press in Ruby?

require 'curses' 

Curses.noecho # do not show typed keys 
Curses.init_screen 
Curses.stdscr.keypad(true) # enable arrow keys (required for pageup/down) 

loop do 
    case Curses.getch 
    when Curses::Key::PPAGE 
    Curses.setpos(0,0) 
    Curses.addstr("Page Up") 
    when Curses::Key::NPAGE 
    Curses.setpos(0,0) 
    Curses.addstr("Page Dn") 
    end 
end 
+1

Pour votre information 'curses' du stdlib est dépréciée, devrait essayer' ncurses' - https://github.com/eclubb/ncurses-ruby/ qui a une bonne documentation – basicxman

+1

@basicxman, qu'est-ce qui vous fait dire que les sorts de stdlib sont obsolètes? – cam

+0

libruby 'curses' en effet n'a pas de documentation appropriée, je n'ai pu trouver/obtenir des réponses ici sur SO –

Répondre

9

Il y a des exemples de malédictions utilisation dans le code source ruby, voir, par exemple here.

Votre code pourrait être quelque chose comme:

require 'curses' 
include Curses 

Curses.noecho # do not show typed keys 
Curses.init_screen 
Curses.stdscr.keypad(true) # enable arrow keys (required for pageup/down) 
Curses.start_color 
# Determines the colors in the 'attron' below 
Curses.init_pair(COLOR_BLUE,COLOR_BLUE,COLOR_BLACK) 
Curses.init_pair(COLOR_RED,COLOR_RED,COLOR_BLACK) 

loop do 

    case Curses.getch 

    when Curses::Key::PPAGE 
    Curses.clear 
    Curses.setpos(0,0) 
    # Use colors defined color_init 
    Curses.attron(color_pair(COLOR_RED)|A_NORMAL){ 
     Curses.addstr("Page Up") 
    } 
    when Curses::Key::NPAGE 
    Curses.clear 
    Curses.setpos(0,0) 
    Curses.attron(color_pair(COLOR_BLUE)|A_NORMAL){ 
     Curses.addstr("Page Down") 
    } 
    end 
end 
Questions connexes