LoginSignup
10
4

More than 5 years have passed since last update.

Rubyでコンソールの画面制御をしよう(Curses)

Last updated at Posted at 2018-05-27

はじめに

RubyでカッケーCLIアプリケーションを作りたい...
なんてこと、ありますよね?

そこでCurses(カーシス)です

Curses?

CursesとはUNIX系システムで端末制御を行うライブラリなのですが、
それをRubyでwrapしている(と思われる)便利なgemが同名のcursesです

個人的に使用した部分をメモとしてまとめました

導入

cursesのインストール

gem install curses

rubyでcursesを使用

require 'curses'

使い方

制御開始/終了

Curses.init_screenで画面の制御スタート
Curses.close_screenで制御を終了します

windowの作成

Curses::Window.new(height, width, 1, 1)
  • 引数

    • 行数(int)
    • 列数(int)
    • 何行目から開始するか(int)
      CSSのpadding-topみたいなものです
    • 何列目から開始するか(int)
      CSSのpadding-leftみたいなものです
  • 返り値

    • Curses::Windowオブジェクト

ここで作成したWindowオブジェクトを使用する形になります

windowの削除

Curses::Window.close

作成したWindowオブジェクトを閉じます

枠をつくる

Curses::Window.box(?|,?-,?+)
  • 引数
    • 縦(char)
    • 横(char)
    • 角(char)

引数に指定した文字で枠を生成します
枠の大きさは呼び出し元のWindowオブジェクトに依存します

画面の更新

Curses::Window.refresh

文字列などを表示させたら画面を更新してあげてください

カーソルの移動

Curses::Window.setpos(y, x)

呼び出し元のWindowの(y,x)座標にカーソルを移動させます
文字を表示させたりする際にはカーソルを事前に移動させる必要があります

文字列表示

Curses::Window.addstr(str)
  • 引数
    • 表示する文字列(string)

文字入力

Curses::Window.getch

入力待ち状態になります
入力した1文字が返ってきます

文字列入力

Curses::Window.getstr

先程の文字列版です
入力待ちになり、文字列が取得できます

入力文字の表示/非表示

非表示

入力された文字が表示されなくなります

Curses::noecho

表示

入力が表示されるようになります
主に文字を入力させたい場合に一時的に切り替えるために用います

Curses::echo

おわりに

え?おわり!?

はい、終わりです
基本的には上記のことだけである程度使用できるかと思います

文字の色を変えたり、その他、もっと高度なことがしたい方は、こちらのサイトが参考になるかと思います

Rubyでcursesの実験 【基本編】
Rubyでcursesの実験 【属性編】

追記

khsk様、誤字修正ありがとうございます

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4