括弧のネストが(ryシリーズの続き。
(interactive "r")
でいけるはずだったんだけど、リージョンを選択していないときの処理が分からなかった。この辺だな。具体的にどう回避するとか例を挙げておいてくれればいいのに。。。
というわけで、以下で代用。
(interactive)
regionを逆からmarkした時にerrorが起こったりして、ちょっとはまった。自分ではそういうことやらないんだけど、S式単位で選択すると逆からmarkになっていたのだった。
(defun insert-braces (arg) "A pair of brace is insert automatically." (interactive "p") (let() (progn (insert "{}") (backward-char 1))) ) (defun insert-brackets (arg) "A pair of square bracket is insert automatically." (interactive "p") (let() (progn (insert "[]") (backward-char 1))) ) (defun insert-parens (arg) "A pair of round bracket is insert automatically." (interactive "p") (let() (progn (insert "()") (backward-char 1))) ) (defun insert-double-quotation (arg) "A pair of double quatation is insert automatically." (interactive "p") (let() (progn (insert "\"\"") (backward-char 1))) ) (defun insert-angle (arg) "A pair of angle bracket is insert automatically." (interactive "p") (let() (progn (insert "<>") (backward-char 1))) ) (defun insert-braces-region (&optional open close) (interactive) (if mark-active (let ((beg (region-beginning)) (end (region-end))) (save-excursion (goto-char end) (insert (or close "}")) (goto-char (if (> (point) beg) ;;逆からmarkされた時がおかしくなる時の対策 beg (point) )) (insert (or open "{")))) (insert "}")))) (defun insert-brackets-region () (interactive) (if mark-active (insert-braces-region "[" "]") (insert "]"))) (defun insert-parens-region () (interactive) (if mark-active (insert-braces-region "(" ")") (insert ")"))) (defun insert-double-quotation-region () (interactive) (if mark-active (insert-braces-region "\"" "\"") (insert "\""))) (add-hook 'ess-mode-hook '(lambda() (progn (define-key ess-mode-map "{" 'insert-braces) (define-key ess-mode-map "(" 'insert-parens) (define-key ess-mode-map "\"" 'insert-double-quotation) (define-key ess-mode-map "[" 'insert-brackets) (define-key ess-mode-map "}" 'insert-braces-region) (define-key ess-mode-map ")" 'insert-parens-region) (define-key ess-mode-map "]" 'insert-brackets-region) (define-key ess-mode-map "\"" 'insert-double-quotation-region) )))