Emacs: Как использовать кольцо для меток?

Когда я делаю C-u C-SPC, Emacs приводит меня к "где я был раньше". последующее C-u C-SPC Прессы возвращаются на прежние места. Это чертовски здорово, и я часто этим пользуюсь.

Но что-то всегда беспокоило меня: единственная метка, отсутствующая в кольце меток, - это то, где я вызвал это на первом месте! Это все равно, что оставить после себя хлебные крошки, а потом пойти "Упс, я могу потеряться, я вернусь и проверить", а затем вернуться, не оставляя хлебную крошку там, где вы сейчас находитесь!

Я пытался рекомендовать функцию, но я не могу программно имитировать C-SPC C-SPC,

  • как я могу "увидеть" (эхо, сообщение, трассировку и т. д.), что делает комбинация клавиш, например "Ch k", но для повторяющихся последовательностей клавиш, например C-SPC C-SPC? Вот что говорится в последнем руководстве (выделено мое)

C-SPC запускает команду set-mark-command, которая представляет собой интерактивную скомпилированную функцию Lisp в `simple.el'.

Это связано с C- @, C-SPC.

(set-mark-command ARG)

Установите отметку, где находится точка, или перейдите к отметке. Установка метки также изменяет регион, который является текстом между точкой и меткой; это самый близкий эквивалент в Emacs тому, что некоторые редакторы называют "выбором".

Без префиксного аргумента установите метку в точке и вставьте старую позицию метки в локальное кольцо меток. Также нажмите старую метку на глобальном кольце меток, если предыдущая метка была установлена ​​в другом буфере.

Но когда я пытаюсь использовать его (не в интерактивном режиме) "Без аргумента префикса", чтобы "установить метку в точке", я получаю ошибку отладчика "Неправильное количество аргументов"..? (Я понимаю разницу между аргументом и аргументом префикса).

Я был бы в порядке даже с философским, непрактичным ответом. Я просто хочу понять, что за идея здесь.

4 ответа

Решение

Хорошо, вот что я сделал

(defun px-push-mark-once-and-back ()
    "Mark current point (`push-mark') and `set-mark-command' (C-u C-SPC) away."
    (interactive)
    (let ((current-prefix-arg '(4))) ; C-u
        (if (not (eq last-command 'px-push-mark-once-and-back))
                (progn
                    (push-mark)
                    (call-interactively 'set-mark-command))
            (call-interactively 'set-mark-command))))

(global-set-key (kbd "<s-left>") 'px-push-mark-once-and-back)

(push-mark) кажется, делает то, что вы хотите.

Хорошо, я собрал два соответствующих ответа на этот вопрос в небольшой пакет.

Это позволяет вам использовать C-- C-SPC для продвижения вперед по кольцу меток.

Вы, вероятно, не должны использовать set-mark или же set-mark-command неинтерактивно. В elisp просто сохраните точку (или любое другое местоположение) в переменной с хорошим именем.

Также, C-h i m emacs m mark,

Я не гуру Emacs по отношению к движению, я почти не использую его. Я знаю, что видел поведение, которое вы хотите раньше, хотя.

Другие вопросы по тегам