ターミナルにデジタル式デカ文字を出力する「digi_moji」の紹介
個人的にはターミナル文字の色付けツールである拙作「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」なるツールが生まれました。
で、ステマをしたのですが…
わかりやすいREADME.mdの書き方がわかりません。どうしたらいいでしょうか(Yawhoo知恵袋) - digi_mojiのステマ
見事にコケましたorz
そんなわけで…。
ここでちゃんとdigi_moji
の紹介記事を書いておくことにします。
DigiMojiとは
5x7で構成されたデジタル文字をターミナルに表示するためのツールです。裏で先のcolcolor
を使っているので文字にANSIカラーによる色付けができます。
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
スペースを含むときは文字列をクオートしてください。
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
色指定の際の注意点は、--fg
、--bg
ともに、bg_<color>
のように背景色指定を渡すことです。これは文字を構成する各セルがスペース(空文字)で表現されているので、前景色を指定しても色が出ないためです。
各セルの文字を空文字以外にセットすると前景色が効くようになります。
% digi_moji new BIGGER --fg=green --cell=B
前景色が効くようになると、blink
やunderscore
などのテキスト属性が使えるようになります。
% digi_moji new BIGGER --fg=green_bold --cell=B --bg=green_blink
--fg
、--bg
に渡す引数のフォーマットはcolcolor
のそれに倣っていますので、先に示したcolcolorの記事を参考にしてください。
文字の大きさを調整したい場合は、--width
オプションを使います。デフォルトは2
です。
英大文字、英小文字、キーボード上に表記された記号には概ね対応しています。
digi_moji timeコマンド
デジタル文字の代表と言えば、それは「デジタル時計」です。time
コマンドはまさにそのためのコマンドです。
% digi_moji time -f=bg_cyan
ターミナル上に好きな色のデジタル時計を表示できます。Ctrl+c
で終了します。
色を工夫すれば、オリジナリティ溢れた時計が作れます。
% digi_moji time -f=cyan -b=yellow_blink -c=T
いや、ちょっと見づらいですか。
digi_moji timerコマンド
「デジタル時計」があるなら「タイマー」もほしいと思うのが人情です。timer
コマンドは引数で渡した時間(デフォルトで秒)を計測するカウントダウンタイマーを出力します。
% digi_moji timer 5 -f=bg_magenta
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
Rubyスクリプトからの使い方
デジ文字はDigiMoji::String.new
で生成します。
require "digi_moji"
str = DigiMoji::String.new("RUBY", fg:'bg_red')
puts str
出力です。
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
各結合系メソッドには、DigiMoji::String
オブジェクトを渡してもいいです。
特殊文字
いくつかの非ASCII文字に特殊文字が割り当てられています。
≤
文字にはARROW_LEFT、≥
文字にはARROW_RIGHT、¬
文字にはARROW_UP、—
文字にはARROW_DOWNが割り当てられています。同様に、÷
文字にはDIVIDE、æ
文字にはBLOCKが割り当てられています。これらの文字は、alt + <key>
のコンビネーションでそれぞれ入力可能です(alt + ,
、alt + .
、alt + L
、alt + ;
、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 }
デジ文字のユーザ定義
使われていない非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')
コードにあるように、セルの定義は文字t
とf
の1次元配列で行います。t
の箇所が文字の形を構成します。
以上で説明を終わります。まあ、どんな場面で使えるかわかりませんが、digi_moji
をよろしくです!
blog comments powered by Disqus