From 7d129ff6bfe36c05721032a6d4c1cc9ef8177548 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Thu, 8 Jul 2021 21:47:42 +0000 Subject: basic-persp-header-line-format-default-value: new ert test Test whether disabling 'persp-mode' while in a buffer with a locally modified 'header-line-format' uses the latter's to update the global default value of 'header-line-format'. Because it shouldn't. --- test/test-perspective.el | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/test/test-perspective.el b/test/test-perspective.el index f4da582..d614d55 100644 --- a/test/test-perspective.el +++ b/test/test-perspective.el @@ -129,6 +129,34 @@ deleted at cleanup." ;; no buffers should be open after all this (should (= 0 (length (persp-test-buffer-list-all))))) +(ert-deftest basic-persp-header-line-format-default-value () + "Disabling `persp-mode' should properly restore the default +value of `header-line-format'. + +Updating `header-line-format' default value using a buffer +local value of it is a mistake." + (let ((persp-show-modestring 'header) + (default-header-line-format (default-value 'header-line-format))) + ;; Since `persp-test-with-persp' may change in the future, do not + ;; use it. We need to avoid switching to another buffer than the + ;; *dummy* buffer just before `persp-mode' is disabled. For this + ;; test to work, a buffer with a locally modified header needs to + ;; be the current buffer when `persp-mode' is disabled. + (persp-mode 1) + (should (switch-to-buffer "*dummy*")) + (should (equal (buffer-name) "*dummy*")) + (setq header-line-format "custom header") + ;; This is just being paranoid about the header's default value. + (should-not (equal header-line-format default-header-line-format)) + (should-not (equal header-line-format (default-value 'header-line-format))) + (persp-mode -1) + (should (equal (buffer-name) "*dummy*")) + (should (equal header-line-format "custom header")) + (let ((updated-header-line-format (default-value 'header-line-format))) + (should (equal updated-header-line-format default-header-line-format))) + ;; Cleanup. + (kill-buffer "*dummy*"))) + (ert-deftest basic-persp-creation-deletion () (persp-test-with-persp (should (equal (list "main") (persp-names))) -- cgit v1.0 From 6e1d64ce2c3dfb3a0ff721aed80d35fd47f89522 Mon Sep 17 00:00:00 2001 From: Matthew White Date: Fri, 18 Jun 2021 16:15:45 +0200 Subject: persp-mode: properly restore header-line-format default value Do not use the buffer local value of 'header-line-format' when setting its default value upon disabling 'persp-mode'. This solves a weird behavior. Disabling 'persp-mode' sets the default value of 'header-line-format' to the buffer local value. i.e. turning off 'persp-mode' while in *Buffer List* will set the header of buffers which do not use a local value to the same header of *Buffer List*. --- perspective.el | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/perspective.el b/perspective.el index 9827f93..24649ee 100644 --- a/perspective.el +++ b/perspective.el @@ -1101,10 +1101,11 @@ named collections of buffers and window configurations." (setq read-buffer-function nil) (set-frame-parameter nil 'persp--hash nil) (setq global-mode-string (delete '(:eval (persp-mode-line)) global-mode-string)) - (set-default 'header-line-format (delete '(:eval (persp-mode-line)) header-line-format)) - (unless (delete "" header-line-format) - ;; need to set header-line-format to nil to completely remove the header from the buffer - (set-default 'header-line-format nil)))) + (let ((default-header-line-format (default-value 'header-line-format))) + (set-default 'header-line-format (delete '(:eval (persp-mode-line)) default-header-line-format)) + (unless (delete "" default-header-line-format) + ;; need to set header-line-format to nil to completely remove the header from the buffer + (set-default 'header-line-format nil))))) (defun persp-init-frame (frame) "Initialize the perspectives system in FRAME. -- cgit v1.0