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