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作者からも返事が返ってきた。俺のパッチはそのうち本家に取り込まれるとのこと。