Как получить локальные и глобальные метки с помощью общей привязки клавиш в 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,

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