2

Мне нужно уметь создавать фреймы и обращаться к ним программно.

Как можно создать новый фрейм Emacs с заданным именем, чтобы он мог ссылаться на него позже?

Я знаю, как создавать новые фреймы в интерактивном или программном режиме: https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html

Заголовок кадра можно отобразить по-разному: http://www.emacswiki.org/emacs/FrameTitle, но я не смог найти, как установить и сослаться на имя кадра.

Достаточно указателя кода или точного поиска в поисковых системах.

Заранее спасибо.

3 ответа3

1

Похоже, вы хотите получить кадр, учитывая его имя. Для этого используйте функцию get-a-frame в библиотеке frame-fns.el .

И если вы хотите получить имя фрейма из фрейма, используйте функцию get-frame-name в той же библиотеке.

(См. Также библиотека frame-cmds.el.)

0

См. select-frame-set-input-focus адресу http://www.gnu.org/software/emacs/manual/html_node/elisp/Input-Focus.html. Например, попробуйте

(select-frame-set-input-focus (second (frame-list)))
0

Спасибо всем за ссылки и код. Я многому научился!

После изучения этих страниц кажется, что Emacs не позволяет назначать пользовательский идентификатор новому фрейму.

Итак, чтобы уникальным образом ссылаться на вновь созданный фрейм, нужно поймать идентификатор, назначенный Emacs во время создания.

Теперь я могу лучше выразить то, что я искал, с помощью такой функции:

(defun my/frame-create (&optional title)
  "Create a new frame returning its internal id,
   optionally setting TITLE as title"
  (interactive "sNew frame name: ")
  (progn
    (setq my/frame-id (make-frame-command))
    (set-frame-name title))
  my/frame-id)

Эта функция создает новый кадр и возвращает его идентификатор, чтобы этот кадр можно было вызвать в любое время.

Я был бы признателен за любые комментарии, чтобы написать эту или аналогичную функцию с надлежащей идиомы elisp.

Спасибо еще раз всем за совет.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .