From 22b792e5cf49508ba99708152163663db1b23315 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 30 Jun 2022 20:07:09 +0200 Subject: theme, vterm: ensure that new terminals use current theme --- lisp/init-theme.el | 31 ++++++++++++++++--------------- lisp/init-vterm.el | 24 +++++++++++++++++++++++- 2 files changed, 39 insertions(+), 16 deletions(-) diff --git a/lisp/init-theme.el b/lisp/init-theme.el index 90cecb7..f733500 100644 --- a/lisp/init-theme.el +++ b/lisp/init-theme.el @@ -17,27 +17,28 @@ (load-theme theme) (call-interactively 'load-theme)))) +(defun mpolden/current-theme () + "Return current theme, which is either \"light\" or \"dark\"." + (cond + ((memq mpolden/theme-light custom-enabled-themes) "light") + ((memq mpolden/theme-dark custom-enabled-themes) "dark") + (t (error "Failed to detect light theme. Enabled themes: %s" + custom-enabled-themes)))) + (defun mpolden/toggle-theme () "Toggle between dark and light themes. The variables `mpolden/theme-light' and `mpolden/theme-dark' decides the themes to toggle between." (interactive) - (let ((is-light (memq mpolden/theme-light custom-enabled-themes)) - (is-dark (memq mpolden/theme-dark custom-enabled-themes))) + (let ((theme (mpolden/current-theme))) (progn - (cond - (is-light (mpolden/switch-theme mpolden/theme-dark)) - (is-dark (mpolden/switch-theme mpolden/theme-light)) - (t (error "Don't know how to toggle theme: %s" (car custom-enabled-themes)))) - (mpolden/vterm-send-theme (if is-light "dark" "light"))))) - -(defun mpolden/vterm-send-theme (theme) - "Set the theme in all Vterm buffers to THEME." - (mapcar (lambda (buf) - (with-current-buffer buf - (vterm-send-string (concat "export VTERM_THEME=" theme "\n")))) - (seq-filter (lambda (buf) (string-prefix-p "vterm: " (buffer-name buf))) - (buffer-list)))) + (mpolden/switch-theme (if (equal theme "light") + mpolden/theme-dark + mpolden/theme-light)) + (when (fboundp 'mpolden/vterm-change-theme) + (mpolden/vterm-change-theme theme)) + (when (fboundp 'mpolden/vterm-set-theme) + (mpolden/vterm-set-theme theme))))) (use-package doom-themes :ensure t diff --git a/lisp/init-vterm.el b/lisp/init-vterm.el index 84e6f26..8a7d63f 100644 --- a/lisp/init-vterm.el +++ b/lisp/init-vterm.el @@ -2,11 +2,33 @@ ;;; Commentary: ;;; Code: +(defun mpolden/vterm-change-theme (theme) + "Change the theme in all Vterm buffers to THEME." + (mapcar (lambda (buf) + (with-current-buffer buf + (vterm-send-string (concat "export VTERM_THEME=" theme "\n")))) + (seq-filter (lambda (buf) (string-prefix-p "vterm: " (buffer-name buf))) + (buffer-list)))) + +(defun mpolden/vterm-set-theme (theme) + "Set the default Vterm theme to THEME." + (let ((theme-var (concat "VTERM_THEME=" theme))) + (progn + (setq vterm-environment + (seq-filter (lambda (var) + (unless (string-prefix-p "VTERM_THEME=" var))) + vterm-environment)) + (add-to-list 'vterm-environment theme-var t)))) + (use-package vterm :ensure t :init ;; include current directory in buffer name - (setq vterm-buffer-name-string "vterm: %s")) + (setq vterm-buffer-name-string "vterm: %s") + :config + ;; set theme + (when (fboundp 'mpolden/current-theme) + (mpolden/vterm-set-theme (mpolden/current-theme)))) (provide 'init-vterm) -- cgit v1.2.3