unparen
Pretty Lambda のときにいっしょに紹介すべきだったんだけど。
要はあれだ。括弧消しちゃう。Lisp 仙人の視点がわかるんじゃない?
こんな感じ。
EmacsWiki によれば、Pretty Lambda と組み合わせるのがおすすめらしい。
どこがやねん。てかこれ何語ですか?
肝心の使い方なんだけど、.emacs に、
(autoload 'unparen-mode "unparen" "Make all parens invisible, unless they are quoted." t)
あとは、M-x unparen-mode で実行。バッファが読み込み専用に変更される。 トグルになってるので、戻すにはもう一回 M-x unparen-mode すべし。
気に入ったら、
(global-set-key [(super u)] 'unparen-mode)
とかすれば S-u で楽々変換……ってこんなことできてうれしいかと聞かれてもちょっと困る。
オリジナル版はコメント中に () が入ってるときに () の対応がとれなくなって止まることがあるので、 ちょっとだけ書き換え。
(defun unparen ()
"Hide all parens and make buffer read-only."
(goto-char (point-min))
(while (re-search-forward "[;()]" nil t)
(cond ((eq ?\; (char-after (match-beginning 0)))
(if (eq ?\\ (char-before (match-beginning 0)))
(goto-char (+ (match-beginning 0) 1))
(forward-line 1)))
((and (eq ?' (char-before (match-beginning 0)))
(eq ?\( (char-after (match-beginning 0))))
(progn
(goto-char (match-beginning 0))
(forward-sexp)))
(t
(put-text-property (match-beginning 0)
(match-end 0)
'invisible
'unparen))))
(toggle-read-only 1))
弱点は、可変個引数を取る手続きを一行に複数書くと破綻することか。 いい例がすぐに思いつかないけど、
(map (lambda (m n) (cons m n)) '(1 2 3) '(4 5 6))
を unparen すると、
map lambda m n cons m n '(1 2 3) '(4 5 6)
になっちゃうので lambda の引数はどこまであるのかわからなくなる、とか。 一応 mic-paren-mode が効くんだけど、カーソル持っていかないとだめだから、ちょっとアレ。
Posted at 11:43 | Permalink | Category | Comments