"で""とか(で()とか

ruby-electricの機能を
他の言語を書いている時にも使いたいと思っていました。

具体的にはこんな感じ

  • "{"と入力しただけで自動で"{}"と入力してくれる
  • 入力したかっこの中にカーソルを置いてくれる

他の言語でも設定すればできるらしいので

http://d.hatena.ne.jp/khiker/20080118
http://d.hatena.ne.jp/gan2/20071227/1198759894
の2つをみながら設定してみました。

実際にしたこと

parenthesis.elをダウンロード。
http://www.oti-orz.mydns.jp/~khiker/file/20080119/parenthesis.el
.emacsに以下を追加

(require 'parenthesis)
(defun f (name)
  (let ((modehook (intern (concat name "-mode-hook"))))
    (add-hook modehook
	      (lambda ()
		;; { で{}を書く
		(define-key (current-local-map) "{" 'insert-braces)
		;; ( で()を書く
		(define-key (current-local-map) "(" 'insert-parens)
		;; " で""を書く
		(define-key (current-local-map) "\'" 'insert-single-quotation)
		;; " で""を書く
		(define-key (current-local-map) "\"" 'insert-double-quotation)
		;; [ で[]を書く
		(define-key (current-local-map) "[" 'insert-brackets)
		))))

(setq parenthesis-add-language  '("javascript" "py" "text"))
;;pythonがpy-mode-mapなのが不思議
(let ((x parenthesis-add-language))
  (while (car x)
    (f (car x))
    (setq x (cdr x))))

これでpythonでもjavascriptでも文章を書くときでもカッコを書くのが楽になりました。