Emacs Follow-Mode через кадры

Есть ли способ получить поведение, подобное тому, которое вы можете найти в режиме follow-mode, но иметь его в нескольких окнах в отдельных кадрах?

Я должен поработать с каким-нибудь неприятным унаследованным кодом, который имеет семь блоков страниц по восемь уровней, вложенных в циклы с lot'a goto, и это помогает увидеть как можно больше кода (чтобы адекватно понять и переписать его не ломая все остальное).

Чем больше кода я вижу сразу, тем лучше.

1 ответ

Решение

Это ограничение установлено явно follow-all-followers в своем призыве к next-window,

Вот элементарный обходной путь. Есть некоторые недостатки, которые вы заметите довольно быстро (например, вам может потребоваться упорядочить кадры вручную), но это облегчает основное требование использования всех кадров, и вы должны иметь возможность заставить его работать.

Я также предположил бы, что FrameMove с WindMove может оказаться очень полезным для этой договоренности.

(defmacro with-temporary-advice (function class name &rest body)
  "Enable the specified advice, evaluate BODY, then disable the advice."
  `(progn
     (ad-enable-advice ,function ,class ,name)
     (ad-activate ,function)
     ,@body
     (ad-disable-advice ,function ,class ,name)
     (ad-activate ,function)))

(defadvice next-window (before my-next-window-all-frames disable)
  "Enforce the ALL-FRAMES argument to `next-window'."
  (ad-set-arg 2 'visible))

(defadvice follow-all-followers (around my-follow-all-frames activate)
  "Allow `follow-mode' to span frames."
  (with-temporary-advice
   'next-window 'before 'my-next-window-all-frames
   ad-do-it))

Вместо этого вы можете предпочесть просто переопределить follow-all-followers Функция делать то, что вы хотите.

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