個人的にはターミナル文字の色付けツールである拙作「colcolor」を気に入ってまして。

Yet Another Terminal Color for Ruby: Colcolorの紹介

colcolor

require "colcolor"

str = "Languages: Python Lisp Ruby Perl Haskell Erlang"

puts str.colco(:yellow, :blue, :magenta, :red, :yellow, :blue, :red)
puts str.colco(:green, :blue, cyclic:true)
puts str.colco(:red_bold, regexp:/ruby/i)
puts str.colco(:black_magenta, cyclic:true, regexp:/^\w+|[A-Z]/)

digi_moji noshadow

このデモ的なものを作って宣伝できないかと考えたわけです。

それで「digi_moji」なるツールが生まれました。

で、ステマをしたのですが…

わかりやすいREADME.mdの書き方がわかりません。どうしたらいいでしょうか(Yawhoo知恵袋) - digi_mojiのステマ error

見事にコケましたorz


そんなわけで…。

ここでちゃんとdigi_mojiの紹介記事を書いておくことにします。

DigiMojiとは

5x7で構成されたデジタル文字をターミナルに表示するためのツールです。裏で先のcolcolorを使っているので文字にANSIカラーによる色付けができます。

digi_moji

melborne/digi_moji

gem install digi_mojiすると、digi_mojiというターミナルコマンドが一緒にインストールされて使えるようになります。

% digi_moji help
Commands:
  digi_moji help [COMMAND]  # Describe available commands or one specific command
  digi_moji new WORD        # Print a digital word
  digi_moji time            # Print current time
  digi_moji timer SEC       # Print count down timer

Options:
  -f, [--fg=FG]      # Foreground color
                     # Default: bg_white
  -b, [--bg=BG]      # Background color
  -c, [--cell=CELL]  # Cell character
  -w, [--width=N]    # Character width
                     # Default: 2

digi_moji newコマンド

ターミナル上に単純に文字を出力するにはdigi_moji newコマンドを使います。引数として出力したい文字を渡します。

% digi_moji new BIGGER

digi_moji noshadow

スペースを含むときは文字列をクオートしてください。

newコマンドにはいくつかのオプションがあります。

% digi_moji help new
Usage:
  digi_moji new WORD

Options:
  -f, [--fg=FG]      # Foreground color
                     # Default: bg_white
  -b, [--bg=BG]      # Background color
  -c, [--cell=CELL]  # Cell character
  -w, [--width=N]    # Character width
                     # Default: 2

Print a digital word

色を付けてみます。

% digi_moji new BIGGER --fg=bg_red --bg=bg_blue

digi_moji noshadow

色指定の際の注意点は、--fg--bgともに、bg_<color>のように背景色指定を渡すことです。これは文字を構成する各セルがスペース(空文字)で表現されているので、前景色を指定しても色が出ないためです。

各セルの文字を空文字以外にセットすると前景色が効くようになります。

% digi_moji new BIGGER --fg=green --cell=B

digi_moji noshadow

前景色が効くようになると、blinkunderscoreなどのテキスト属性が使えるようになります。

% digi_moji new BIGGER --fg=green_bold --cell=B --bg=green_blink

digi_moji noshadow

--fg--bgに渡す引数のフォーマットはcolcolorのそれに倣っていますので、先に示したcolcolorの記事を参考にしてください。

文字の大きさを調整したい場合は、--widthオプションを使います。デフォルトは2です。

digi_moji noshadow

英大文字、英小文字、キーボード上に表記された記号には概ね対応しています。

digi_moji noshadow

digi_moji timeコマンド

デジタル文字の代表と言えば、それは「デジタル時計」です。timeコマンドはまさにそのためのコマンドです。

% digi_moji time -f=bg_cyan

digi_moji noshadow

ターミナル上に好きな色のデジタル時計を表示できます。Ctrl+cで終了します。

色を工夫すれば、オリジナリティ溢れた時計が作れます。

% digi_moji time -f=cyan  -b=yellow_blink -c=T

digi_moji noshadow

いや、ちょっと見づらいですか。

digi_moji timerコマンド

「デジタル時計」があるなら「タイマー」もほしいと思うのが人情です。timerコマンドは引数で渡した時間(デフォルトで秒)を計測するカウントダウンタイマーを出力します。

 % digi_moji timer 5 -f=bg_magenta

digi_moji noshadow

timerコマンドには追加のオプションとして、--unit--message--message-colorがあります。

% digi_moji help timer
Usage:
  digi_moji timer SEC

Options:
  -m, [--message=MESSAGE]              # Message on time's up
                                       # Default: TIME'S UP!
  -k, [--message-color=MESSAGE_COLOR]  # Message color
                                       # Default: bg_red
  -u, [--unit=UNIT]                    # Argument unit
                                       # Default: sec
  -f, [--fg=FG]                        # Foreground color
                                       # Default: bg_white
  -b, [--bg=BG]                        # Background color
  -c, [--cell=CELL]                    # Cell character
  -w, [--width=N]                      # Character width
                                       # Default: 2

--unitは引数の単位を変えるもので、’min’, ‘hour’が渡せます。--messageは終了メッセージとして”TIME’S UP!”以外を表示できるようにします。--message-colorはそのメッセージの色を指定します。

% digi_moji timer 3 -u=min -f=bg_green -m=EAT -k=bg_yellow

digi_moji noshadow

Rubyスクリプトからの使い方

デジ文字はDigiMoji::String.newで生成します。

require "digi_moji"

str = DigiMoji::String.new("RUBY", fg:'bg_red')

puts str

出力です。

digi_moji noshadow

String#to_digimojiを用意してあるので、このコードは次のように書くこともできます。

require "digi_moji"

str = "RUBY".to_digimoji(fg:'bg_red')

puts str

いまのところインスタンスメソッドは、+join<<の結合系メソッドだけです。joinはオプションを渡しやすくするための+のエイリアスです。<<はデジ文字を破壊的に結合します。

str = "RUBY".to_digimoji(fg:'bg_red')

puts str + "IST"
puts
puts str.join("IST", fg:'bg_green')
puts
puts str
puts
str << "IST"
puts
puts str

digi_moji noshadow

各結合系メソッドには、DigiMoji::Stringオブジェクトを渡してもいいです。

特殊文字

いくつかの非ASCII文字に特殊文字が割り当てられています。

文字にはARROW_LEFT、文字にはARROW_RIGHT、¬文字にはARROW_UP、文字にはARROW_DOWNが割り当てられています。同様に、÷文字にはDIVIDE、æ文字にはBLOCKが割り当てられています。これらの文字は、alt + <key>のコンビネーションでそれぞれ入力可能です(alt + ,alt + .alt + Lalt + ;alt + /alt + ')。

require "digi_moji"

chars = %w(≤ ≥ ¬ — ÷ æ)
colors= %w(red green yellow blue magenta cyan).to_enum

chars.map! { |char| char.to_digimoji(fg:"bg_#{colors.next}") }

puts chars.inject { |m, char| m + char }

digi_moji noshadow

デジ文字のユーザ定義

使われていない非ASCII文字を使って、独自のデジ文字を登録することができます。Ω(alt + z)を登録してみます。

デジ文字の登録には、DigiMoji::Char.registerを使います。第1引数に登録する文字、第2引数にデジ文字を構成するセルを配列で定義します。

require "digi_moji"

DigiMoji::Char.register("Ω", %w(f f f f f
                                f t t t f
                                t f f f t
                                t f f f t
                                t f f f t
                                f t f t f
                                t t f t t))

puts "18.3Ω".to_digimoji(fg:'bg_green')

コードにあるように、セルの定義は文字tfの1次元配列で行います。tの箇所が文字の形を構成します。

digi_moji noshadow

以上で説明を終わります。まあ、どんな場面で使えるかわかりませんが、digi_mojiをよろしくです!

digi_moji

melborne/digi_moji



blog comments powered by Disqus
ruby_pack8

100円〜で好評発売中!
M'ELBORNE BOOKS