Oto kolejne polecenie (z biblioteki misc-cmds.el
), które robi właściwie to, o co prosisz. Po prostu powiąż go z jednym kluczem ( C-M-t
lub czymkolwiek). Użyj go, aby kilkakrotnie przesuwać seksu zarówno do przodu, jak i do tyłu.
Negatywny przedrostek arg transponuje wstecz, jak transpose-sexp
, ale pozostawia punkt gotowy do wykonania kolejnej transpozycji wstecznej. A podczas powtarzania arg ujemny przedrostek arg po prostu zmienia kierunek.
Jeśli więc powiążesz polecenie, powiedzmy, C-o
a następnie trzykrotnie przesuwa sekwencję na lewo od punktu w prawo, następnie dwa razy w lewo, a następnie raz w prawo.C-o C-o C-o
C--
C-o C-o
C--
C-o
Przedrostek numeryczny arg ma wpływ tylko przy pierwszym użyciu, tj. Nie przy powtarzaniu - przy powtarzaniu ruch jest zawsze jedną sekwencją na raz.
(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)))
(Uwaga: zachowanie transpose-sexps
zmieniło się w 24.4, stąd test wersji tutaj. Przed 24.4 punkt znajdował się we właściwym miejscu, aby kontynuować (np. Powtórzenie). Począwszy od 24.4, punkt znajduje się w niewłaściwym miejscu. Czy to jest regresja lub dodanie przydatnej funkcji lub naprawienie jakiegoś innego błędu jest prawdopodobnie w oczach patrzącego; ;-) Właśnie teraz zgłosiłem błąd Emacsa # 20698 ).