Emacs - selecteer tussen parens

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?

2
Kun je dit beter verduidelijken - misschien met een voorbeeld: "Maar wat er gebeurt is dat" select "naar het overeenkomende paar gaat en als ik dan" ga ", selecteert die alles. Dus eigenlijk heb ik de functies die ik wilde hebben .. maar omgekeerd, en ik weet niet waarom, kan iemand uitleggen wat hier aan de hand is en misschien een oplossing bieden? '
toegevoegd de auteur Specksynder, de bron

1 antwoord

Misschien een merkteken voordat het punt wordt verplaatst?

(defun select-in-parens ()
  (interactive)
  (set-mark (point))
  (goto-match-paren 1))
2
toegevoegd
Ik geloof dat het meer "correct" zou zijn om push-mark te gebruiken in plaats van set-mark . Afgezien van de juistheid hiervan als je je code op een dag wilt delen, zal het makkelijker voor je zijn om het oude merk in de mark-ring te hebben en wat logica toe te voegen op basis van dat ...
toegevoegd de auteur fakedrake, de bron
push-mark zou een nieuw teken moeten duwen in de markeerring die op de positie van de cursor staat. Na het aanroepen van een druk op de markering staat de actieve markering op de cursorpositie, alleen als u naar uw vorige markering wilt terugkeren, hoeft u alleen maar de markeringsring te duwen. Ik hoop dat ik je opmerking correct heb begrepen.
toegevoegd de auteur fakedrake, de bron
niet slecht! Ik ben aan het discussiëren of ik wil dat het ook de markering opheft als de s-exp al is gemarkeerd (zoiets als een test van mark-active, dan save-excursion, zoek of het teken bij de andere is?). maar ik denk dat dit prima is.
toegevoegd de auteur scry, de bron
behalve push-mark doet niet wat ik wil: markeer alles tussen de parens.
toegevoegd de auteur scry, de bron
Nou, ik ben niet echt geïnteresseerd om terug te gaan naar het vorige merk, wil gewoon een snelle manier om een ​​sexp te markeren.
toegevoegd de auteur scry, de bron