From af606038863d37f97ad4e4e1cea31dc1b95008f4 Mon Sep 17 00:00:00 2001 From: Raul Benencia Date: Fri, 27 Mar 2026 14:07:03 -0700 Subject: emacs: define startup frames --- .emacs.d/rul-emacs.org | 45 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 42 insertions(+), 3 deletions(-) (limited to '.emacs.d/rul-emacs.org') diff --git a/.emacs.d/rul-emacs.org b/.emacs.d/rul-emacs.org index 188fc2b..1b984d8 100644 --- a/.emacs.d/rul-emacs.org +++ b/.emacs.d/rul-emacs.org @@ -57,8 +57,48 @@ environment. (add-to-list 'default-frame-alist '(fullscreen . maximized)) (add-to-list 'default-frame-alist '(undecorated . t)) -;; Name frames to ease switching between them -(add-hook 'after-init-hook (lambda () (set-frame-name "main"))) +;; Extend this list from to add more startup frames. +(defvar rul-startup-frames + '(("main" . nil) + ("terminals" . multi-vterm)) + "Startup frame specifications. +Each entry has the form (NAME . SETUP). NAME is the frame name. +SETUP is an optional function or interactive command called in that frame.") + +(defun rul-run-startup-frame-setup (setup) + "Run startup frame SETUP." + (cond + ((null setup) nil) + ((commandp setup) (call-interactively setup)) + ((functionp setup) (funcall setup)) + (t (message "Ignoring invalid startup frame setup: %S" setup)))) + +(defun rul-apply-startup-frame-name (frame name) + "Set FRAME name and title to NAME." + (with-selected-frame frame + (set-frame-name name) + (modify-frame-parameters frame `((title . ,name))))) + +(defun rul-create-startup-frames () + "Create the configured startup frames." + (when (display-graphic-p) + (let ((initial-frame (selected-frame)) + (specs rul-startup-frames)) + (when specs + (pcase-let ((`(,name . ,setup) (car specs))) + (rul-apply-startup-frame-name initial-frame name) + (with-selected-frame initial-frame + (rul-run-startup-frame-setup setup))) + (dolist (spec (cdr specs)) + (pcase-let ((`(,name . ,setup) spec)) + (let ((frame (make-frame `((name . ,name) + (title . ,name))))) + (rul-apply-startup-frame-name frame name) + (with-selected-frame frame + (rul-run-startup-frame-setup setup))))) + (select-frame initial-frame))))) + +(add-hook 'emacs-startup-hook #'rul-create-startup-frames) #+end_src ** Miscellany @@ -1870,4 +1910,3 @@ whose length is specified by `flyspell-delay'." (provide 'rul-write) #+end_src - -- cgit v1.2.3