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)
Хорошо, я собрал два соответствующих ответа на этот вопрос в небольшой пакет.
Это позволяет вам использовать C-- C-SPC для продвижения вперед по кольцу меток.
Вы, вероятно, не должны использовать set-mark
или же set-mark-command
неинтерактивно. В elisp просто сохраните точку (или любое другое местоположение) в переменной с хорошим именем.
Также, C-h i m emacs m mark
,
Я не гуру Emacs по отношению к движению, я почти не использую его. Я знаю, что видел поведение, которое вы хотите раньше, хотя.