После моего комментария к очень удобному решению от scottfrazer , вот несколько советов, которые работают в сочетании с этим, чтобы упростить изменение направления вокруг кольца меток по желанию, без необходимости использовать другой ключ -привязка для каждого направления.
Я использую cua-selection-mode
, поэтому для меня C-SPC связан с cua-set-mark
, но я написал это как макрос, чтобы сообщить, какая функция связана с C -SPC и проверил, что он работает по умолчанию set-mark-command
.
Чтобы отменить удаление, просто укажите аргумент с отрицательным префиксом. например C - C-SPC
Одна из приятных особенностей cua-set-mark
заключается в том, что после начального Cu C-SPC вы можете продолжать добавлять последовательные метки всего с C-SPC , и я включил это поведение здесь: после начального C - C-SPC вы можете продолжить отмену вызова, просто C-SPC, Чтобы снова изменить направление и вызвать pop-to-mark
, просто введите положительный аргумент еще раз с C-u C-SPC .
(defmacro my-unpop-to-mark-advice ()
"Enable reversing direction with un/pop-to-mark."
`(defadvice ,(key-binding (kbd "C-SPC")) (around my-unpop-to-mark activate)
"Unpop-to-mark with negative arg"
(let* ((arg (ad-get-arg 0))
(num (prefix-numeric-value arg)))
(cond
;; Enabled repeated un-pops with C-SPC
((eq last-command 'unpop-to-mark-command)
(if (and arg (> num 0) (<= num 4))
ad-do-it ;; C-u C-SPC reverses back to normal direction
;; Otherwise continue to un-pop
(setq this-command 'unpop-to-mark-command)
(unpop-to-mark-command)))
;; Negative argument un-pops: C-- C-SPC
((< num 0)
(setq this-command 'unpop-to-mark-command)
(unpop-to-mark-command))
(t
ad-do-it)))))
(my-unpop-to-mark-advice)