aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConstantine Vetoshev <gepardcv@gmail.com>2020-03-09 22:47:54 -0700
committerConstantine Vetoshev <gepardcv@gmail.com>2020-03-09 22:47:54 -0700
commit920d15ef85cd17fb3ab18afc5b0dd5d47dba8852 (patch)
treebfc4714016d90e0596004c82a168b48730d433f7
parentc869e23c02c6339de998c573c72b34b27b72ec4e (diff)
Fix upgrade process problems caused by eager macroexpansion.
-rw-r--r--perspective.el40
1 files changed, 39 insertions, 1 deletions
diff --git a/perspective.el b/perspective.el
index 15fef7b..3128a70 100644
--- a/perspective.el
+++ b/perspective.el
@@ -27,13 +27,16 @@
;; configuration, and when in a perspective only its buffers are
;; available by default.
+;;; Code:
+
(require 'cl-lib)
(require 'ido)
(require 'rx)
(require 'subr-x)
(require 'thingatpt)
-;;; Code:
+
+ ;;; --- customization
(defgroup perspective-mode 'nil
"Customization for Perspective mode"
@@ -103,6 +106,28 @@ save state when exiting Emacs."
:group 'perspective-mode
:type 'file)
+
+ ;;; --- implementation
+
+;;; XXX: Nasty kludge to deal with the byte compiler, eager macroexpansion, and
+;;; frame parameters being already set when this file is being compiled during a
+;;; package upgrade. This enumerates all frame-parameters starting with
+;;; persp--*, saves them in persp--kludge-save-frame-params, and then blanks
+;;; them out of the frame parameters. They will be restored in the matching
+;;; eval-when-compile form at the bottom of this source file. See
+;;; https://github.com/nex3/perspective-el/issues/93.
+(eval-when-compile
+ (defvar persp--kludge-save-frame-params)
+ (setq persp--kludge-save-frame-params
+ (cl-loop for kv in (frame-parameters nil)
+ if (string-prefix-p "persp--" (symbol-name (car kv)))
+ collect kv))
+ (modify-frame-parameters
+ nil
+ ;; Set persp-- frame parameters to nil. The expression below creates an alist
+ ;; where the keys are the relevant frame parameters and the values are nil.
+ (mapcar (lambda (x) (list (car x))) persp--kludge-save-frame-params)))
+
(defmacro persp-let-frame-parameters (bindings &rest body)
"Like `let', but for frame parameters.
Temporariliy set frame parameters according to BINDINGS then eval BODY.
@@ -1409,6 +1434,19 @@ restored."
(defalias 'persp-state-restore 'persp-state-load)
+
+ ;;; --- done
+
+;;; XXX: Undo nasty kludge necessary for cleanly compiling this source file by
+;;; restoring saved frame parameters, and removing the variable used to save
+;;; them.
+(eval-when-compile
+ (when (boundp 'persp--kludge-save-frame-params)
+ (modify-frame-parameters nil persp--kludge-save-frame-params)
+ (makunbound 'persp--kludge-save-frame-params)
+ (fmakunbound 'persp--kludge-save-frame-params)
+ (unintern 'persp--kludge-save-frame-params nil)))
+
(provide 'perspective)
;; Local Variables: