Как запустить команду сразу после рендеринга кадра emacs?

Я пытаюсь понять, как использовать Emacs Code Browser (ECB), и одна из вещей, которые вы можете сделать с ним, это установить ecb-windows-width, чтобы решить, насколько широки окна ecb. Проблема заключается в этой последовательности:

  1. Рамка выскакивает на экран.
  2. вызывается ecb-activ, масштабируется в соответствии с ecb-windows-width.
  3. Параметры default-frame-alist включаются, размер кадра изменяется.

Проблема заключается в том, что из-за этого порядка ширина окна ecb устанавливается до изменения размера кадра, а затем не масштабируется.

Поэтому я хотел бы запустить ecb-redraw-layout (или, в идеале, просто ecb-активировать), но это должно произойти после #3. В противном случае, какой-то вариант ecb-dynamic-width-scale также будет работать.

Что бы это ни стоило, ecb-auto-activit не работает, поэтому я не могу узнать, решит ли это это.

2 ответа

Решение

Похоже, я нашел обходной путь.

  1. Установите для ecb-fix-window-size значение true.
  2. Когда загружается кадр, вызывается ecb-activ, и окна ecb масштабируются пропорционально размеру кадра.
  3. Затем запускается default-frame-alist и размер кадра изменяется, но окна ecb имеют фиксированный размер и не масштабируются.

Довольно хакерский, потому что вы устанавливаете ширину в соответствии с размером кадра по умолчанию, который появляется первым, а не с тем размером, который вы на самом деле используете. Ну да ладно.

Я не знаком с ЕЦБ, но after-make-frame-functions может быть полезным при запуске нужных вам функций (или при запуске некоторой функции ловушек, где вы хотите делать особые вещи с рамкой ecb).

after-make-frame-functions список функций, которые принимают один аргумент (вновь созданный фрейм) и запускаются после его создания. Это не относится к начальному фрейму emacs (при запуске), потому что ваш.emacs читается после того, как фрейм уже создан.

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