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 が効くんだけど、カーソル持っていかないとだめだから、ちょっとアレ。