Xcode っぽい "{}" の補完をする elisp 作ったよー

Emacs では "{" の入力と同時に "}" を補完してくれるコマンドはありますが,とても使いにくい感があります.

Xcode では "{" を入力した直後に改行が入力されると "}" を補完してくれて,とてもすばらしいです.

この補完がめっちゃ便利だったので Emacs でも導入しようと頑張ってみました.

(defun newline-skeleton-pair-insert-brace ()
  (interactive)
  (if (and (eq (char-before) ?{)
           (or (eq last-command 'yank)
               (eq last-command 'self-insert-command)
               (eq last-command 'c-electric-brace)))
      (progn
        (newline-and-indent)
        (save-excursion (insert "\n}") (indent-according-to-mode)))
    (newline-and-indent)))

(add-hook 'c-mode-common-hook
          '(lambda ()
             (local-set-key (kbd "RET") 'newline-skeleton-pair-insert-brace)
             ))

ハード コーディングが多いのが残念ですが,なんとか動いています.

だれか直してくれると嬉しいです.

smartchr.el とか skeleton-pair を使ってる人には不要だと思います.


Xcode の場合は,カーソル移動をしてもカーソルが "{" の直後戻っていれば "}" を補完してくれますが,Emacs でそれをやろうと思うと buffer-undo-list を参照しないといけないようで,まだまだ自分には無理そうでした.