How do I run a command just after the emacs frame has been rendered?

只愿长相守 提交于 2019-12-11 01:29:34

问题


I'm trying to figure out how to use Emacs Code Browser (ECB) and one of the things you can do with it is set ecb-windows-width to decide how wide the ecb windows are. The problem is this sequence:

  1. Frame pops up on screen.
  2. ecb-activate gets called, scaled according to ecb-windows-width.
  3. default-frame-alist parameters kick in, frame gets resized.

The problem is that due to this order the width of the ecb window is set before the frame gets resized, and then doesn't get scaled.

So I'd like to run ecb-redraw-layout (or ideally just ecb-activate), but it has to happen after #3. Otherwise, some sort of ecb-dynamic-width-scale option would also work.

For what it's worth, ecb-auto-activate doesn't work, so I can't find out if that would solve it.


回答1:


It looks like I've found a workaround.

  1. Set ecb-fix-window-size to true.
  2. When the frame loads, ecb-activate is called and the ecb windows are scaled proportionally to the frame size.
  3. Then default-frame-alist kicks in and frame gets resized, but the ecb windows have a fixed size and don't get scaled.

Quite hackish because you're setting the width according to the default frame size that comes up first, not the size you actually use. But oh well.




回答2:


I'm unfamiliar with ECB, but after-make-frame-functions might be helpful in running the functions you want (or running some hook function where you want to do special things with the ecb frame).

after-make-frame-functions is a list of functions that take one argument (the newly created frame), and is run after the frame is created. This doesn't apply to the initial emacs frame (on startup) because your .emacs is read after the frame is already created.



来源:https://stackoverflow.com/questions/875667/how-do-i-run-a-command-just-after-the-emacs-frame-has-been-rendered

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!