Skip to content

Instantly share code, notes, and snippets.

@maximvl
Created July 7, 2013 21:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maximvl/5945091 to your computer and use it in GitHub Desktop.
Save maximvl/5945091 to your computer and use it in GitHub Desktop.
(setq correct-paren-alist
'(( "[" . "]" )
( "(" . ")" )
( "{" . "}" )
( "<<" . ">>" )))
(defun insert-correct-paren ()
(interactive)
(let* ((closed-parens 0)
(correct-paren ")" )
(op-parens (mapcar 'car correct-paren-alist))
(cl-parens (mapcar 'cdr correct-paren-alist))
(parens-reg (mapconcat 'regexp-quote
(append op-parens cl-parens)
"\\|"))
(keep-loop t))
(save-excursion
(save-match-data
(while (and keep-loop
(re-search-backward parens-reg nil t))
(let ((cur (buffer-substring-no-properties (match-beginning 0)
(match-end 0))))
(cond
((member cur op-parens)
(if (zerop closed-parens)
(progn
(setq keep-loop nil)
(setq correct-paren (cdr (assoc cur correct-paren-alist))))
(setq closed-parens (1- closed-parens))))
((member cur cl-parens) (setq closed-parens (1+ closed-parens))))))))
(insert-string correct-paren)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment