boxes - 文字列をコメント文字で囲んだりアスキーアートを作ったり
http://jarp.does.notwork.org/diary/200710b.html#200710111 より
boxesは文字列を囲んだりアスキーアートを作ったりするツール。 http://boxes.thomasjensen.com/より入手できる。apt-get install boxesでもインストールできるが古いバージョンなのでソースからコンパイルするといい。といっても環境依存な点がないのでmake一発で終わる。
最新snapshotは以下より。
http://boxes.thomasjensen.com/download/boxes-SNAP-latest.tar.gz
$ echo foo | boxes -a c -s 50 -d c
/************************************************/
/* foo */
/************************************************/
$ echo foo | boxes -a c -s 50 -d lisp-cmt
;; foo
$ echo foo | boxes -a c -s 50 -d html
<!-- ----------------------------------------- -->
<!-- foo -->
<!-- ----------------------------------------- -->
$ echo foo | boxes -a c -s 50 -d mouse
.--, .--,
( ( \.---./ ) )
'.__/o o\__.'
{= ^ =}
> - <
_________________.""`-------`"".________________
/ \
\ foo /
/ \
\________________________________________________/
___)( )(___
(((__) (__)))
$ echo foo | boxes -a c -s 50 -d sunset
.
. | .
\ | /
'. \ ' / .'
'. .'```'. .'
<>............:::::::`.......`:::::::...........<>
<>: foo :<>
<>:............................................:<>
<><><><><><><><><><><><><><><><><><><><><><><><><>
$ echo foo | boxes -a c -s 50 -d boy
.-"""-.
/ .===. \
\/ 6 6 \/
( \___/ )
_______________ooo__\_____/___________________
/ \
| foo |
\____________________________ooo_______________/
| | |
|_ | _|
| | |
|__|__|
/-'Y'-\
(__/ \__)
$ echo foo | boxes -a c -s 50 -d girl
.-"""-.
/ .===. \
/ / a a \ \
/ ( \___/ ) \
______________ooo\__\_____/__/________________
/ \
| foo |
\_____________________________ooo______________/
/ \
/:.:.:.:.:.:.:\
| | |
\==|==/
/-'Y'-\
(__/ \__)
こういうツールにUnix系OSの遊び心を感じる。
自分用のBOXを定義する
まず設定ファイルをホームディレクトリにコピーする。
$ cp boxes-config ~/.boxes
なぜかlisp用のBOX設定(コメントではなくて囲むほう)がないので定義してみる。~/.boxesに追記だ。
BOX lisp
author "rubikitch <rubikitch(at)ruby-lang(dot)org>"
revision "1.0"
revdate "Fri Oct 12 07:39:16 JST 2007"
created "Fri Oct 12 07:39:21 JST 2007"
sample
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; section used in Lisp ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ends
shapes {
w (";;;;") s(";;;;") n (";;;;") e(";;;;")
ne(";;;;") nw(";;;;") se(";;;;") sw(";;;;")
}
padding { left 2 }
elastic (n,e,s,w)
END lisp
Emacsで使う
最新版(Debianのには含まれていない!)にはboxes.elが同梱されている。ただ、かなりいい加減な書き方をしているので手直ししてみる。
http://www.rubyist.net/~rubikitch/archive/boxes.el.patch
っつーか「use boxes to comment regions」ってあんたM-x comment-regionも知らないの?とツッコミたくなる。せっかくboxesを使うのだったら文字列を囲む設定にしてみる。(make-variable-buffer-local 'boxes-known-modes)を外しているのでEmacsを再起動してね。
(require 'boxes)
;; 文字列を囲む設定に書き換え。デフォルトは正直イラネ
(setq boxes-known-modes
'((c-mode . "c") (c++-mode . "c") (java-mode . "c")
(html-mode . "html") (sh-mode . "shell") (perl-mode . "shell")
(python-mode . "shell") (ruby-mode . "shell")
(emacs-lisp-mode . "lisp") (lisp-mode . "lisp")))
;; 設定ファイルのコメントは通常 # なので
(setq-default boxes-default-type "shell")
;; センタリングされてるほうがカッコイイ
(setq-default boxes-args "-s 75 -a c")
;; 簡単に作成・修正できるようにする
(defalias 'boxes 'boxes-mend)
- M-x boxes-create で囲む
- M-x boxes-remove で囲みを外す
- M-x boxes-mend で囲みを再描画する(最新版のみ。俺が追加)
常にboxes-mendを使えば文字列を適切に囲んでくれる。
バグかも?
センタリングしつつM-x boxes-mendするとなぜか右にずれてしまうけど、boxesのバグかもしれない。
$ echo foo | boxes -a c -s 10 -d shell ########## # foo # ########## $ echo foo | boxes -a c -s 10 -d shell | boxes -a c -s 10 -m ########## # foo # ########## $ echo foo | boxes -a c -s 10 -d shell | boxes -a c -s 10 -m | boxes -a c -s 10 -m ########## # foo # ##########
- a cでないとずれない。
$ echo foo | boxes -s 10 -d shell ########## # foo # ########## $ echo foo | boxes -s 10 -d shell | boxes -s 10 -m ########## # foo # ########## $
とりあえずバグ報告・パッチ送付してみた。
追記
boxes作者より返事が返ってきた。直したらメールしてくれるとのこと。
boxes.el作者からも返事が返ってきた。俺のパッチはそのうち本家に取り込まれるとのこと。