【问题标题】:Ruby curses colors红宝石诅咒颜色
【发布时间】:2011-11-11 19:19:06
【问题描述】:

如何使用 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

最终,我需要颜色:

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

【问题讨论】:

  • 仅供参考,stdlib 中的 curses 已弃用,应尝试 ncurses - github.com/eclubb/ncurses-ruby,其中有适当的文档
  • @basicxman,是什么让你说标准库的诅咒已被弃用?
  • libruby curses 确实没有适当的文档,我只能在 SO 上找到/获得答案
  • 不,不要使用 ncurses。使用诅咒。它根本没有被弃用,如果您使用 ncurses 创建 GUI,您的用户必须先下载并安装 ncurses gem,然后才能使用它。虽然 ncurses 更好,但差异可以忽略不计,不值得。只需使用 curses,并使用 ncurses 文档来处理事情。
  • Curses 包已弃用。它是 ruby​​ 核心库,而 ncurses 包不是。通常 cursesncurses 是同一个东西,因为 curses 是通用名称(或 API)而 ncurses 是特定的实现其中。此外,ruby 的 curses 包实际上是使用 ncurses 系统库。这也证明它没有被弃用。有些人只是将系统库的名称与通用的东西和 ruby​​ 包联系在一起。

标签: ruby curses


【解决方案1】:

在 ruby​​ 源代码中有 curses 用法的示例,请参阅,例如here.

您的代码可能类似于:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多