Search code examples
emacselispemacs-ecb

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


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.


Solution

  • 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.