Как я могу написать ловушку для активации, когда любой кадр emacs поднят / сфокусирован?

Под Win32 каждый фрейм emacs отображается как отдельное окно при Alt-tabbing, что имеет смысл. Однако, когда я выбираю свое главное окно редактирования, я также хотел бы, чтобы мой фрейм панели скоростей автоматически поднимался вместе с ним.

Написание функции для поднятия всех фреймов (или даже всех в настоящее время НЕ видимых фреймов) относительно тривиально, но я не могу придумать, как использовать хук, или даже если вообще есть хук, который можно использовать.

Поэтому, если я щелкаю или нажимаю alt-tab на любой из моих кадров emacs, нужно запустить ловушку для вызова моей функции, которая вызывает ВСЕ кадры. Любая помощь?

3 ответа

Похоже, что GNU emacs не имеет такой функциональности.

У Xemacs есть крюк select-frame-hook и map-frame-hook. Существует также переменная auto-lift-frame, но не в GNU emacs.

См. http://www.xemacs.org/Documentation/beta/html/lispref_40.html для некоторых идей, если вы хотите улучшить emacs.

Самое близкое, что я могу найти в GNU Emacs, это switch-frame событие, но оно генерируется только тогда, когда фокусируется другой кадр Emacs, а не когда вы переключаетесь в окно, отличное от Emacs, а затем обратно в тот же кадр.

Это то, что должен делать достаточно хороший оконный менеджер, с небольшим сотрудничеством с Emacs (например, используя заголовки окон, чтобы выяснить, что такое фрейм Speedbar).

В Windows вы должны использовать команду WinWaitActive от AutoHotKey.

Я нашел крючок, который вы можете использовать.

server-visit-hook is a variable defined in `server.el'.
Original value was nil

Documentation:
Hook run when visiting a file for the Emacs server.

You can customize this variable.

Когда вы найдете файл с сервером Emacs или emacsclient, эта ловушка будет вызвана. Вы можете использовать этот крючок, чтобы сделать что-то нужно.

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