以下の記事を参考に、リージョンを{クオートやブラケット}で囲うelispをselectedを使って書いてみたということ。
リージョンを選択し、クオートやブラケットの記号を一つ押すだけで、リージョン全体が囲えるので便利である。
selected.elはMELPAからインストール可能。もしくは以下からダウンロード。
コードはこんな感じ。オリジナルの記事ではバッククオートがなかったため、新たに追加してみた。応用すれば、ブレースなど他の記号でも実現できるだろう。
(defun region-to-single-quote () (interactive) (quote-formater "'%s'" "^\\(\"\\).*" ".*\\(\"\\)$")) (defun region-to-double-quote () (interactive) (quote-formater "\"%s\"" "^\\('\\).*" ".*\\('\\)$")) (defun region-to-back-quote () (interactive) (quote-formater "`%s`" "^\\('\\).*" ".*\\('\\)$")) (defun region-to-bracket () (interactive) (quote-formater "\(%s\)" "^\\(\\[\\).*" ".*\\(\\]\\)$")) (defun region-to-square-bracket () (interactive) (quote-formater "\[%s\]" "^\\(\(\\).*" ".*\\(\)\\)$")) (defun region-to-brace () (interactive) (quote-formater "\%s\]" "^\\(\(\\).*" ".*\\(\)\\)$")) (defun quote-formater (quote-format re-prefix re-suffix) (if mark-active (let* ((region-text (buffer-substring-no-properties (region-beginning) (region-end))) (replace-func (lambda (re target-text) (replace-regexp-in-string re "" target-text nil nil 1))) (text (funcall replace-func re-suffix (funcall replace-func re-prefix region-text)))) (delete-region (region-beginning) (region-end)) (insert (format quote-format text))) (error "Not Region selection"))) (when (require 'selected nil t) ;; リージョンをシングルクオートで囲う (define-key selected-keymap (kbd "\'") #'region-to-single-quote) ;; リージョンをダブルクオートで囲う (define-key selected-keymap (kbd "\"") #'region-to-double-quote) ;; リージョンバッククオートで囲う (define-key selected-keymap (kbd "\`") #'region-to-back-quote) ;; リージョンをブラケット(カッコ)で囲う (define-key selected-keymap (kbd "(") #'region-to-bracket) ;; リージョンをカギカッコで囲う (define-key selected-keymap (kbd "[") #'region-to-square-bracket))