Wie programmgesteuert einen neuen Emacs-Rahmen mit einem bestimmten Namen erstellen?

963
gsl

Ich muss in der Lage sein, Frames zu erstellen und programmgesteuert darauf zu verweisen.

Wie kann man einen neuen Emacs-Rahmen mit einem bestimmten Namen erstellen, damit er später darauf zurückgreifen kann?

Ich kann neue Frames erstellen, entweder interaktiv oder programmgesteuert: https://www.gnu.org/software/emacs/manual/html_node/emacs/Creating-Frames.html

Es ist möglich, einen Rahmentitel auf verschiedene Arten anzuzeigen: http://www.emacswiki.org/emacs/FrameTitle, aber ich konnte nicht finden, wie ein Rahmenname gesetzt und referenziert wird.

Ein Codezeiger oder eine genaue Suchmaschinensuche würde ausreichen.

Danke im Voraus.

2
@lawlist Vielen Dank für Ihren Hinweis auf `set-frame-name`. Er hilft bei der Klärung des Problems. Mit dieser und all der Hilfe kam mir eine richtige Funktion, die das tut, was ich brauche. Ich habe es als Antwort aufgelistet, wenn das in Ordnung ist. gsl vor 10 Jahren 0

3 Antworten auf die Frage

1
Drew

Hört sich an, als würden Sie einen Frame erhalten, wenn Sie seinen Namen haben. Verwenden Sie dazu die Funktion get-a-framein der Bibliothek frame-fns.el.

Wenn Sie den Frame-Namen von einem Frame erhalten möchten, verwenden Sie die Funktion get-frame-namein derselben Bibliothek.

(Siehe auch Bibliothek frame-cmds.el.)

Danke für die Antwort. Und vielen Dank für all die sehr schönen Bibliotheken, wirklich inspirierend. gsl vor 10 Jahren 0
Beide Links sind 404. Chris Stryczynski vor 6 Jahren 0
@ ChrisStryczynski: Thx. Korrigiert (Emacs-Wiki wurde von http auf https umgestellt. Drew vor 6 Jahren 1
0
choroba

Siehe select-frame-set-input-focusunter http://www.gnu.org/software/emacs/manual/html_node/elisp/Input-Focus.html . Versuchen Sie es beispielsweise

(select-frame-set-input-focus (second (frame-list))) 
Danke, es funktioniert. Emacs weist beim Erstellen eines neuen Frames einen internen Code zu. In meinem Fall war das zweite "#". `(Frame-Liste)` gab also `(# #)` zurück. Dann kann ich mit Ihrem Code-Snippet zum zweiten Frame in dieser Liste wechseln. Ich denke, man würde das letzte Element dieser Liste verwenden. Wäre das der letzte Frame? gsl vor 10 Jahren 0
0
gsl

Vielen Dank an alle für die Links und den Code. Ich habe viel gelernt!

Nach dem Studium dieser Seiten scheint es Emacs nicht möglich zu sein, einem neuen Frame eine benutzerdefinierte ID zuzuweisen.

Um einen neu erstellten Frame eindeutig referenzieren zu können, muss die von Emacs zugewiesene ID zum Zeitpunkt der Erstellung abgerufen werden.

Ich kann jetzt besser ausdrücken, was ich mit einer Funktion wie dieser gesucht habe:

(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) 

Diese Funktion erstellt einen neuen Frame und gibt dessen ID zurück, sodass dieser Frame jederzeit aufgerufen werden kann.

Ich wäre dankbar für Kommentare, um diese oder ähnliche Funktion mit der richtigen elisp-Sprache zu schreiben.

Nochmals vielen Dank an alle für die Beratung.

Gibt `(selected-frame)` zurück, wonach Sie suchen ?: http://www.gnu.org/software/emacs/manual/html_node/elisp/Input-Focus.html Dieser Wert wird jedoch nicht als gespeichert Teil der `(Frame-Parameter)`: https://www.gnu.org/software/emacs/manual/html_node/elisp/Parameter-Access.html#Parameter-Access lawlist vor 10 Jahren 0
Ja, `(Selected-Frame)` gibt die ID des Frames zurück. Das könnte eine andere Möglichkeit sein, den `selected-frame` direkt nach dem` make-frame-command` aufzurufen. Vielen Dank. gsl vor 10 Jahren 0