LoginSignup
13
13

More than 5 years have passed since last update.

ターミナルでMacの絵文字の時計を回す

Last updated at Posted at 2014-05-18

前書き

ほんとは絵文字をそのままソースに入力してました
QiitaにMacの絵文字を書き込めないことが判明したので文字コードから変換する方法にしました
(変数名にも絵文字を使う頭おかしいソースで、けっこう好きでしたが)

時計を回す

ワンライナー

ruby -e 'clock=[*128336..128359].map{|c|c.chr("UTF-8")};clock=(clock[0..11].zip(clock[12..23])).flatten;10.times{clock.each{|time|print "Time flies like an arrow. #{time}\r";sleep 0.05}};puts'

ターミナルで絵文字を使うと後ろの文字列と重なるので、避けるには後ろに半角スペースを入れる

文字列の書き換え

ターミナル上の文字列を書き換えるには\b\rでカーソルを移動して上書きする
\bは半角1文字分、\rは行頭にカーソルを戻す
改行されたらもう上書きする手段は無い(かも)

時計の絵文字について

時計の絵文字は24個ある
文字コード順に、最初の12個が0分ちょうどで、残りが30分のもの
まとめて使うには並べ替える

clocks_oclock = [*128336..128347].map{|c|c.chr("UTF-8")}
clocks_thirty = [*128348..128359].map{|c|c.chr("UTF-8")}

clocks = (clocks_oclock.zip(clocks_thirty)).flatten

スクリーンショット 2014-05-18 11.17.21.png

分針は2種類しかないのに回ってるように見える気がするから不思議

ちなみによく見ると30分の表示でも時針は動いてないので、現実とちょっと違う
時針も動いてれば、もう少し滑らかに回ってる感じになったんではないかと

おまけ

月のやつ

ruby -e 'moon=[*127761..127768].map{|c|c.chr("UTF-8")};10.times{moon.each{|m|print "Fly me to the moon. #{m}\r";sleep 0.05}};puts'

月の絵文字は8個で並べ替える必要も無いので楽

記号で回転っぽいやつ

\|/-を順番に表示すると回転してるっぽくなる
(環境によってはバックスラッシュが円記号に見えるかも)

ruby -e '10.times{%q!\|/-!.each_char{|c|print "Please wait... #{c}\r";sleep 0.05}};puts'

->)|(<-を往復させると微生物っぽくてキモい

ruby -e '10.times{"->)|(<-".tap{|s|s<<s[1..-2].reverse}.each_char{|c|print "Please wait... #{c}\r";sleep 0.05}};puts'

参考

Node.js - CLIでプログレスバーみたいのを出力する - Qiita
unicode - RubyでIntegerと文字を相互変換する - Qiita

13
13
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
13
13