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
Функция делать то, что вы хотите.