Как получить локальные и глобальные метки с помощью общей привязки клавиш в Emacs
Есть ли способ объединить локальные и глобальные марки? то, что я пытаюсь сделать, это просто иметь общую привязку клавиш к pop-global-mark и set-mark-command. Что-то вроде; msgstr "попробуйте вывести локальную отметку, если нет оставшихся, попробуйте вывести глобальную отметку".
Это необходимо, чтобы вернуться к коду, и не думать, если я должен нажать C-u C-SPC
или же C-x C-SPC
в зависимости от того, был ли переход между функциями внутри или снаружи одного и того же файла.
2 ответа
Прежде всего, вы не можете реально использовать set-mark-command
в коде, потому что он проверяет this-command
а также last-command
поэтому он не будет работать, как задумано.
Однако, изучая его код, я придумал (не проверено!):
(defun pop-local-or-global-mark ()
"Pop to local mark if it exists or to the global mark if it does not."
(interactive)
(if (mark t)
(pop-to-mark-command)
(pop-global-mark)))
Я думаю, что вы, возможно, заблуждаетесь, что C-u C-SPC
а также C-x C-SPC
на самом деле "поп" метки звенит, в смысле их укорочения. Я говорю это потому, что вы пишете "если не осталось".
Они не. Они циклически помечают кольца. Таким образом, продолжение всплытия локального кольца меток в конечном итоге не приведет к тому, что оно будет пустым, что позволит вашей предполагаемой команде перейти к открытию глобального кольца меток.
Эти два кольца являются отдельными в первую очередь потому, что они используются по-разному. Глобальное кольцо доставляет вас из буфера в буфер (только). Местные кольца перемещают вас в пределах отдельных буферов (только).
Поэтому мой совет - не искать то, что вы ищете;-). Или, если вы действительно этого хотите, то определите команды, которые действительно выдают звуки, в смысле удаления маркеров.
Кстати, есть альтернативы этим двум командам, включая команды, которые позволяют вам видеть текст, связанный с маркерами, и выбирать пункт назначения с помощью, например, завершения.
В Сосульках, например, C-u C-SPC
совмещает циклическое переключение маркера с установкой маркера, как требует ваше вступительное предложение (но не как запросы заголовка - существуют отдельные команды Icicles для циклического воспроизведения локальных и глобальных колец). Так же, C-x C-SPC
делает это для глобального кольца. В режиме Icicle по умолчанию эти клавиши связаны с несколькими командами icicle-goto-marker-or-set-mark-command
а также icicle-goto-global-marker-or-pop-global-mark
,