Ecco un altro comando (dalla libreria misc-cmds.el
) che fa praticamente quello che richiedi. Basta associarlo a una singola chiave ( C-M-t
o qualsiasi altra cosa). Usalo per spostare ripetutamente un sexp sia in avanti che all'indietro.
Un prefisso negativo arg traspone all'indietro, come transpose-sexp
, ma lascia anche il punto pronto per fare un'altra trasposizione all'indietro. E quando si ripete, un prefisso negativo arg ribalta semplicemente la direzione.
Quindi, se si lega il comando a, diciamo, C-o
quindi si sposta il sexp che è a sinistra del punto a destra tre volte, quindi a sinistra due volte, quindi a destra una volta.C-o C-o C-o
C--
C-o C-o
C--
C-o
Un arg di prefisso numerico ha un effetto solo per il primo utilizzo, cioè non quando si ripete - quando si ripete, il movimento è sempre un sexp alla volta.
(defun reversible-transpose-sexps (arg)
"Reversible and repeatable `transpose-sexp'.
Like `transpose-sexps', but:
1. Leaves point after the moved sexp.
2. When repeated, a negative prefix arg flips the direction."
(interactive "p")
(when (eq last-command 'rev-transp-sexps-back) (setq arg (- arg)))
(transpose-sexps arg)
(unless (natnump arg)
(when (or (> emacs-major-version 24)
(and (= emacs-major-version 24) (> emacs-minor-version 3)))
(backward-sexp (abs arg)) (skip-syntax-backward " ."))
(setq this-command 'rev-transp-sexps-back)))
(Nota: il comportamento è transpose-sexps
cambiato in 24.4, quindi il test di versione qui. Prima di 24.4, il punto è finito nel posto giusto per continuare (es. Ripetizione). A partire da 24.4, il punto è nel posto sbagliato per quello. una regressione o l'aggiunta di una funzione utile o correzioni di altri bug è presumibilmente negli occhi di chi guarda; ;-) Ho presentato il bug # 20698 di Emacs per questo, proprio ora.)