红宝石curses颜色

7
我可以帮您进行翻译。以下是关于如何使用Ruby默认的Curses库获取颜色的内容:

如何使用Ruby默认的Curses库获取颜色?

例如:

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

工作得非常好。在浅灰色背景上呈现出漂亮的黑色。但是这个:
#!/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"

显示:

你好!

^[[0m^[[30;47m你好!^[[0m

最终,我需要为此添加颜色:

如何在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
FYI,stdlib 中的 curses 已被弃用,应尝试使用 ncurses - https://github.com/eclubb/ncurses-ruby/,它有适当的文档说明。 - basicxman
1
@basicxman,你为什么说stdlib的curses已经过时了? - cam
4
不,不要使用ncurses。 使用curses。它根本没有被弃用,如果你使用ncurses创建GUI,则用户必须下载并安装ncurses gem才能使用它。尽管ncurses更好,但差异微不足道,不值得。只需使用curses,并使用ncurses文档来掌握事物。 - Starkers
现在curses已经被弃用了,我想放一个链接到https://github.com/sup-heliotrope/ncursesw-ruby,这是我所看到的最活跃的ncurses版本(免责声明:我目前是其中一个维护者)。 - gauteh
2
Curses包并没有被弃用。而它是Ruby核心库,而ncurses包则不是。通常cursesncurses是同一样东西,因为curses是通用名称(或API),ncurses是其特定实现。此外,Ruby的curses包实际上使用了ncurses系统库。这也证明了它并没有被弃用。有些人只是将系统库的名称与一般事物和Ruby包混淆了。 - catpnosis
显示剩余2条评论
1个回答

10

在 Ruby 的源代码中有使用 curses 的示例,例如在这里

你的代码可能类似于:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接