...いや手を洗えないtoiletって色々あるとは思うのですが
今回は、文字列をASCII ARTに変換するfiglet
の派生プロジェクト、toilet
の紹介を軽くしようと思います。
とか言って結構自分用メモ書きなところあるのでそれはご了承を...
1. Toiletとは
toilet
は、 文字列をASCII ARTに変換してくれる ツールです。
AAに変換してくれると言っても、 'cat'と与えたら猫のAAが出てくる
とかそういう夢のようなツールではありません。
単純に文字列を変換してくれます。
$ toilet "hello"
# ""# ""#
# mm mmm # # mmm
#" # #" # # # #" "#
# # #"""" # # # #
# # "#mm" "mm "mm "#m#"
Figletとの違い
同じようなツールとして、figlet
があります。
結論から言ってしまうと、Toilet
はfiglet
からの派生ツールにあたります。
どうやらfiglet
では日本語が使えないのに対し、toilet
は(平仮名/片仮名だけ)対応しているようです。
[TIPS] 他のbanner系ツール
他の有名なbanner系ツールといえば、そのままbanner
コマンドがあります。
しかし、これは与えられた文字列を縦向きに出力する為、toilet
やfiglet
とはかなり違ったものになります
ちなみに、man banner
には以下の記述があります:
出力は、適切な幅の紙に、ページ割りなしでプリントされる必要があります
The output should be printed on paper of the appropriate width, with no
breaks between the pages.
...まあ、昔の印刷用のコマンドだったようですね。
2. インストール
今回自分はmacユーザーなので、homebrewで仕入れました
$ brew install toilet
その他については調べてないし現状調べる気がありません(情報提供いただけるとありがたかったりします)
3. 使い方
一番シンプルな使い方としては、文字列を渡すだけです
$ toilet 'Qiita!!'
mmmm " " m m m
m" "m mmm mmm mm#mm mmm # #
# # # # # " # # #
# # # # # m"""# " "
#mm#" mm#mm mm#mm "mm "mm"# # #
#
ただし、ここからがtoilet
の真骨頂的なものです
フォントを変える
toilet
には複数のフォントが同梱されています。
フォントを指定するには、-f
オプションを使います。
$ toilet -f pagga 'Qiita!!'
░▄▀▄░▀█▀░▀█▀░▀█▀░█▀█░█░█
░█\█░░█░░░█░░░█░░█▀█░▀░▀
░░▀\░▀▀▀░▀▀▀░░▀░░▀░▀░▀░▀
面白いねっ!!
...じゃなくって他のフォントについて気になりません?
フォントの場所について
toilet
用のフォントたちは、標準でいくつかインストールされています。
フォントは
.flf
ファイルとして/usr/share/figlet
ディレクトリに格納されています。Fonts are located in the same /usr/share/figlet directory as .flf files
どうやら/usr/share/figlet
にあるようですが、 homebrew勢の場合は/usr/local/Celler/toilet/<version>/share/figlet/
以下になるので注意が必要です。
そこにあるファイルの拡張子を抜いた名前を入力してやれば使えます。
フォントの見た目を全部載せようかとも思ったけど誰かやってくれてた気がするし、こういうのって探すのが楽しかったりするので載せないでおきます。
お気に入りのフォントを見つけてね...
と思ったけど一応載せておきます、観たい方はどうぞ
現状、初期状態でインストールされるフォントは以下の通りです ascii12 bigascii9 circle future mono9 smascii9 smmono12 ascii9 bigmono12 emboss letter pagga smblock smmono9 bigascii12 bigmono9 emboss2 mono12 smascii12 smbraille wideterm全フォント試してみたければ、以下のスニペットをお使いください。
read -p "string?: " test_string
for font in ascii12 bigascii9 circle future mono9 smascii9 smmono12 ascii9 bigmono12 emboss letter pagga smblock smmono9 bigascii12 bigmono9 emboss2 mono12 smascii12 smbraille wideterm;do
echo "$f"
toilet -w $(tput cols) -f $font "$test_string"
done
unset test_string
以下は、hello world
で試してみた例です
mm mm mmmm mmmm mmmm mm
## ## ""## ""## ""## ##
## ## m####m ## ## m####m ## ## m####m ##m#### ## m###m##
######## ##mmmm## ## ## ##" "## "# ## #" ##" "## ##" ## ##" "##
## ## ##"""""" ## ## ## ## ##m##m## ## ## ## ## ## ##
## ## "##mmmm# ##mmm ##mmm "##mm##" "## ##" "##mm##" ## ##mmm "##mm###
"" "" """"" """" """" """" "" "" """" "" """" """ ""
### ### ### #
# # # # # #
# # # # # #
# # ### # # ### #. # ### #:##: # ## #
# # :# # # # # : :# # # ## # # # #
###### # # # # # # .# # #: # # # # # #
# # ##### # # # # #:#:# # # # # # #
# # # # # # # ##### # # # # # #
# # # #. #. # # :#:#: # # # #. # #
# # ###: :## :## ### # # ### # :## ## #
Ⓗⓔⓛⓛⓞ ⓦⓞⓡⓛⓓ
╻ ╻┏━╸╻ ╻ ┏━┓ ╻ ╻┏━┓┏━┓╻ ╺┳┓
┣━┫┣╸ ┃ ┃ ┃ ┃ ┃╻┃┃ ┃┣┳┛┃ ┃┃
╹ ╹┗━╸┗━╸┗━╸┗━┛ ┗┻┛┗━┛╹┗╸┗━╸╺┻┛
▄ ▄ ▀▀█ ▀▀█ ▀▀█ █
█ █ ▄▄▄ █ █ ▄▄▄ ▄ ▄ ▄▄▄ ▄ ▄▄ █ ▄▄▄█
█▄▄▄▄█ █▀ █ █ █ █▀ ▀█ ▀▄ ▄ ▄▀ █▀ ▀█ █▀ ▀ █ █▀ ▀█
█ █ █▀▀▀▀ █ █ █ █ █▄█▄█ █ █ █ █ █ █
█ █ ▀█▄▄▀ ▀▄▄ ▀▄▄ ▀█▄█▀ █ █ ▀█▄█▀ █ ▀▄▄ ▀█▄██
. , 'T 'T 'T ]
] [ m, ] ] m, , , m, ,m ] md
]mm[]`] ] ] ]`T \..`]`T P ` ] ]`T
] []"" ] ] ] ] ]dd ] ] [ ] ] ]
] ['b/ 'm 'm 'bP [[ 'bP [ 'm 'bW
▗▖ ▗▖ ▗▄▖ ▗▄▖ ▗▄▖ ▗▖
▐▌ ▐▌ ▝▜▌ ▝▜▌ ▝▜▌ ▐▌
▐▌ ▐▌ ▟█▙ ▐▌ ▐▌ ▟█▙ █ █ ▟█▙ █▟█▌ ▐▌ ▟█▟▌
▐███▌▐▙▄▟▌ ▐▌ ▐▌ ▐▛ ▜▌ ▜ █ ▛▐▛ ▜▌ █▘ ▐▌ ▐▛ ▜▌
▐▌ ▐▌▐▛▀▀▘ ▐▌ ▐▌ ▐▌ ▐▌ ▐▙█▟▌▐▌ ▐▌ █ ▐▌ ▐▌ ▐▌
▐▌ ▐▌▝█▄▄▌ ▐▙▄ ▐▙▄ ▝█▄█▘ ▝█ █▘▝█▄█▘ █ ▐▙▄ ▝█▄█▌
▝▘ ▝▘ ▝▀▀ ▀▀ ▀▀ ▝▀▘ ▀ ▀ ▝▀▘ ▀ ▀▀ ▝▀▝▘
m m ""# ""# ""# #
# # mmm # # mmm m m mmm m mm # mmm#
#mmmm# #" # # # #" "# "m m m" #" "# #" " # #" "#
# # #"""" # # # # #m#m# # # # # # #
# # "#mm" "mm "mm "#m#" # # "#m#" # "mm "#m##
██ ██ ████ ████ ████ ██
██ ██ ████ ████ ████ ██
██ ██ ██ ██ ██ ██
██ ██ ░████▒ ██ ██ ░████░ ██ ██ ░████░ ██░████ ██ ▒███░██
██ ██ ░██████▒ ██ ██ ░██████░ ██░ ░██ ░██████░ ███████ ██ ▒███████
████████ ██▒ ▒██ ██ ██ ███ ███ ▓█▒ ██ ▒█▓ ███ ███ ███░ ██ ███ ███
████████ ████████ ██ ██ ██░ ░██ ▒█▒░██░▒█▒ ██░ ░██ ██ ██ ██░ ░██
██ ██ ████████ ██ ██ ██ ██ █▓▒██▒██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██ ██ ██░ ░██ ██▓██▓██ ██░ ░██ ██ ██ ██░ ░██
██ ██ ███░ ▒█ ██▒ ██▒ ███ ███ ███▒▒██▓ ███ ███ ██ ██▒ ███ ███
██ ██ ░███████ █████ █████ ░██████░ ▒██░░██▒ ░██████░ ██ █████ ▒███████
██ ██ ░█████▒ ░████ ░████ ░████░ ░██ ██ ░████░ ██ ░████ ▒███░██
┃ ┃┏━┛┃ ┃ ┏━┃ ┃┃┃┏━┃┏━┃┃ ┏━
┏━┃┏━┛┃ ┃ ┃ ┃ ┃┃┃┃ ┃┏┏┛┃ ┃ ┃
┛ ┛━━┛━━┛━━┛━━┛ ━━┛━━┛┛ ┛━━┛━━
H H EEEEE L L OOO W W OOO RRRR L DDDD
H H E L L O O W W O O R R L D D
HHHHH EEEE L L O O W W W O O RRRR L D D
H H E L L O O W W W O O R R L D D
H H EEEEE LLLLL LLLLL OOO W W OOO R R LLLLL DDDD
░█░█░█▀▀░█░░░█░░░█▀█░░░█░█░█▀█░█▀▄░█░░░█▀▄
░█▀█░█▀▀░█░░░█░░░█░█░░░█▄█░█░█░█▀▄░█░░░█░█
░▀░▀░▀▀▀░▀▀▀░▀▀▀░▀▀▀░░░▀░▀░▀▀▀░▀░▀░▀▀▀░▀▀░
▌ ▌ ▜▜ ▜ ▌
▙▄▌▞▀▖▐▐ ▞▀▖ ▌ ▌▞▀▖▙▀▖▐ ▞▀▌
▌ ▌▛▀ ▐▐ ▌ ▌ ▐▐▐ ▌ ▌▌ ▐ ▌ ▌
▘ ▘▝▀▘ ▘▘▝▀ ▘▘ ▝▀ ▘ ▘▝▀▘
▗ ▖ ▝▜ ▝▜ ▝▜ ▐
▐ ▌ ▄▖ ▐ ▐ ▄▖ ▖ ▖ ▄▖ ▖▄ ▐ ▄▟
▐▄▄▌▐▘▐ ▐ ▐ ▐▘▜ ▚▗▗▘▐▘▜ ▛ ▘ ▐ ▐▘▜
▐ ▌▐▀▀ ▐ ▐ ▐ ▐ ▐▟▟ ▐ ▐ ▌ ▐ ▐ ▐
▐ ▌▝▙▞ ▝▄ ▝▄ ▝▙▛ ▌▌ ▝▙▛ ▌ ▝▄ ▝▙█
## ## #### #### #### ##
## ## #### #### #### ##
## ## ## ## ## ##
## ## .####: ## ## .####. ## ## .####. ##.#### ## :###.##
## ## .######: ## ## .######. ##. .## .######. ####### ## :#######
######## ##: :## ## ## ### ### #: ## :# ### ### ###. ## ### ###
######## ######## ## ## ##. .## :#:.##.:#: ##. .## ## ## ##. .##
## ## ######## ## ## ## ## # :##:## ## ## ## ## ## ##
## ## ## ## ## ##. .## ## ## ## ##. .## ## ## ##. .##
## ## ###. :# ##: ##: ### ### ###::## ### ### ## ##: ### ###
## ## .####### ##### ##### .######. :##..##: .######. ## ##### :#######
## ## .#####: .#### .#### .####. .## ## .####. ## .#### :###.##
███ ███ ███ █
█ █ █ █ █ █
█ █ █ █ █ █
█ █ ███ █ █ ███ █░ █ ███ █▒██▒ █ ██▓█
█ █ ▓▓ ▒█ █ █ █▓ ▓█ ▓▒ ▒█ █▓ ▓█ ██ █ █ █▓ ▓█
██████ █ █ █ █ █ █ ░█ █ █▒ █ █ █ █ █ █
█ █ █████ █ █ █ █ █▒█▒█ █ █ █ █ █ █
█ █ █ █ █ █ █ █████ █ █ █ █ █ █
█ █ ▓▓ █ █░ █░ █▓ ▓█ ▒█▒█▒ █▓ ▓█ █ █░ █▓ ▓█
█ █ ███▒ ▒██ ▒██ ███ █ █ ███ █ ▒██ ██▓█
║ ║╔═╝║ ║ ╔═║ ║║║╔═║╔═║║ ╔═
╔═║╔═╝║ ║ ║ ║ ║║║║ ║╔╔╝║ ║ ║
╝ ╝══╝══╝══╝══╝ ══╝══╝╝ ╝══╝══
▄▄ ▄▄ ▄▄▄▄ ▄▄▄▄ ▄▄▄▄ ▄▄
██ ██ ▀▀██ ▀▀██ ▀▀██ ██
██ ██ ▄████▄ ██ ██ ▄████▄ ██ ██ ▄████▄ ██▄████ ██ ▄███▄██
████████ ██▄▄▄▄██ ██ ██ ██▀ ▀██ ▀█ ██ █▀ ██▀ ▀██ ██▀ ██ ██▀ ▀██
██ ██ ██▀▀▀▀▀▀ ██ ██ ██ ██ ██▄██▄██ ██ ██ ██ ██ ██ ██
██ ██ ▀██▄▄▄▄█ ██▄▄▄ ██▄▄▄ ▀██▄▄██▀ ▀██ ██▀ ▀██▄▄██▀ ██ ██▄▄▄ ▀██▄▄███
▀▀ ▀▀ ▀▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀▀▀ ▀▀ ▀▀ ▀▀▀▀ ▀▀ ▀▀▀▀ ▀▀▀ ▀▀
., ., .m, .m, .m, .,
][ ][ 'T[ 'T[ 'T[ ][
][ ][ dWb ][ ][ dWb W W dWb WdW[ ][ dWd[
]WWW[]bmd[ ][ ][ ]P T[ T W P]P T[ W` ][ ]P T[
][ ][]P""` ][ ][ ][ ][ ]bWd[][ ][ W ][ ][ ][
][ ]['Wmm[ ]bm ]bm 'WmW` 'W W`'WmW` W ]bm 'WmW[
'` '` '"" "" "" '"` " " '"` " "" '"'`
⣇⣸ ⢀⡀ ⡇ ⡇ ⢀⡀ ⡀ ⢀ ⢀⡀ ⡀⣀ ⡇ ⢀⣸
⠇⠸ ⠣⠭ ⠣ ⠣ ⠣⠜ ⠱⠱⠃ ⠣⠜ ⠏ ⠣ ⠣⠼
Hello world
フィルターをかける
toilet
では複数のフィルターをかけることができます。
その一覧はtoilet --filter list
で見ることができます。
フィルター | 説明 |
---|---|
crop |
crop unused blanks (わからなかった) |
gay |
出力を虹色にします。 |
metal |
メタルっぽい色のエフェクトを追加します。 |
flip |
横向きに反転します。 |
flop |
縦向きに反転します。 |
180 |
180度回転します。 |
left |
反時計回りに90度回転します。 |
right |
時計回りに90度回転します。 |
border |
太線で文字の周りを囲います。 |
文字列の幅を指定する
(ほんの少しだけ)長いテキストを変換させようとすると、微妙なところで折り返されてしまいます。
これは、デフォルトでは80文字で折り返すように設定されているかららしいです。
-w
オプションを使用することで、文字列の幅を指定できます。
画面いっぱいの幅を使いたい場合:
$ toilet -w $(tput cols) "text"
$(tput cols)
は現在の端末の横幅を返します。
面白そうじゃないですか??
時間的都合もあるのでここまでにしておきますが、 画像に出力したりHTMLに出力したりもできるようです。
ここ読むと色々書いてあって楽しいので英語わかる人は是非。
いつか翻訳しておきたい。
https://delightlylinux.wordpress.com/2015/11/13/colored-text-with-toilet/