跨平台Ruby方法清除终端屏幕

跨平台Ruby方法清除终端屏幕,ruby,linux,windows,macos,Ruby,Linux,Windows,Macos,我如何确保我的Ruby命令行程序将清除屏幕,而不管它是在Windows、MacOSX还是基于Linux的发行版上 如果我在Windows上,命令如下: system('cls') 而在Mac上的Linux上,则是: system('clear') 值得记住的是,清除程序中的屏幕可能是您想要的行为,但对于习惯于更UNIX风格环境的人来说,如果不是彻底激怒的话,也可能是令人恼火的事情:杀死他们的滚动历史记录是非常粗鲁的 Ruby和POSIX处理这一问题的方法是via(),这是一个跨平台的库,可以

我如何确保我的Ruby命令行程序将清除屏幕,而不管它是在Windows、MacOSX还是基于Linux的发行版上

如果我在Windows上,命令如下:

system('cls')
而在Mac上的Linux上,则是:

system('clear')

值得记住的是,清除程序中的屏幕可能是您想要的行为,但对于习惯于更UNIX风格环境的人来说,如果不是彻底激怒的话,也可能是令人恼火的事情:杀死他们的滚动历史记录是非常粗鲁的

Ruby和POSIX处理这一问题的方法是via(),这是一个跨平台的库,可以让您控制如何使用屏幕打印东西,非常适合构建终端风格的交互式应用程序

你最终会得到这样的结果:

#!/usr/bin/env ruby

require 'rubygems'
gem 'curses'
require 'curses'

Curses.init_screen

begin
  Curses.crmode

  # Do your calculations here, and to print:
  Curses.addstr("(program output)\n")

  Curses.addstr("Press any key to continue...")

  Curses.refresh

  Curses.getch

ensure
  Curses.close_screen
end

Curses不仅仅是一个“清屏”工具,你可以添加滚动、多个窗口、各种各样的东西,当你退出程序时,如果调用
close\u screen
,它会将你的终端恢复到与以前完全相同的状态。这就是为什么它位于
确保
块中,以避免在程序崩溃时把事情搞砸。

清除在哪个系统上终止回滚历史?取决于您的终端设置。在某些情况下,它只是强制在一整页的空白行。在任何情况下,调用
clear
都是非常粗鲁的。如果我想清除屏幕,我会按清除屏幕的快捷键,如
CTRL+L
#!/usr/bin/env ruby

require 'rubygems'
gem 'curses'
require 'curses'

Curses.init_screen

begin
  Curses.crmode

  # Do your calculations here, and to print:
  Curses.addstr("(program output)\n")

  Curses.addstr("Press any key to continue...")

  Curses.refresh

  Curses.getch

ensure
  Curses.close_screen
end