Berikut adalah perintah lain (dari perpustakaan misc-cmds.el
) yang melakukan cukup banyak apa yang Anda minta. Ikat saja ke satu tombol (C-M-t
atau apa pun). Gunakan untuk menggerakkan sexp maju dan mundur berulang kali.
Argumen awalan negatif mentranspos mundur, seperti transpose-sexp
, tetapi juga meninggalkan titik siap untuk melakukan transposisi mundur lain. Dan ketika mengulang, arg awalan negatif hanya membalik arah.
Jadi jika Anda mengikat perintah ke, katakanlah, C-o
lalu gerakkan sexp yang ada di sebelah kiri titik ke kanan tiga kali, lalu ke kiri dua kali, lalu ke kanan sekali.C-o C-o C-o
C--
C-o C-o
C--
C-o
Argumen numerik awalan hanya berpengaruh untuk penggunaan pertama, yaitu, tidak saat mengulang - saat mengulang, gerakan selalu satu jenis kelamin setiap kali.
(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)))
(Catatan: Perilaku yang transpose-sexps
diubah dalam 24.4, maka uji versi di sini. Sebelum 24.4, titik berakhir di tempat yang tepat untuk melanjutkan (mis. Ulangi). Mulai dengan 24.4, titik berada di tempat yang salah untuk itu. Apakah itu sebuah regresi atau menambahkan fitur yang berguna atau memperbaiki beberapa bug lain mungkin di mata yang melihatnya. ;-) Saya mengajukan bug Emacs # 20698 untuk ini, baru saja.)