Ik heb de volgende defun's in mijn .emacs.d:
;;; http://emacswiki.org/emacs/ParenthesisMatching
(defun goto-match-paren (arg)
"Go to the matching if on (){}[], similar to vi style of % "
(interactive "p")
;; first, check for "outside of bracket" positions expected by forward-sexp, etc.
(cond ((looking-at "[\[\(\{]") (forward-sexp))
((looking-back "[\]\)\}]" 1) (backward-sexp))
;; now, try to succeed from inside of a bracket
((looking-at "[\]\)\}]") (forward-char) (backward-sexp))
((looking-back "[\[\(\{]" 1) (backward-char) (forward-sexp))
(t nil)))
(defun select-in-parens ()
(interactive)
(goto-match-paren 1)
(set-mark (point)))
Ik had oorspronkelijk net de eerste functie. Toen voegde ik de tweede toe, die ik van plan was een volledige s-uitdrukking te selecteren. Nu heb ik een van deze gebonden aan M- [ en de ander aan M-]. Wanneer ik naar een paar ga en op de "goto" -toets druk, doet het wat ik wil - springt naar de andere. Als ik daarna op de "select" -toets druk ... doet hij hetzelfde, zonder de regio te markeren, en als hij er vervolgens herhaaldelijk op slaat, springt hij tussen paren. Maar als ik daarna ga "gotoken", geeft wordt de regio aan, en als ik er achteraan springt, springt het terug en wordt het verwijderd.
Dus eigenlijk heb ik de functies die ik wilde ... maar omgekeerd, en ik weet niet waarom. Kan iemand uitleggen wat hier gebeurt en misschien een oplossing bieden?