From: Juanma Barranquero Date: Sat, 3 Aug 2013 09:57:07 +0000 (+0200) Subject: lisp/frameset.el (frameset-prop): New function and setter. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1688^2~10 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=2613dea20aa6478bf0b3a91fe3863b4c80836391;p=emacs.git lisp/frameset.el (frameset-prop): New function and setter. (frameset-save): Do not modify frame list passed by the caller. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c91cb5564ab..f971cb202f4 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2013-08-03 Juanma Barranquero + + * frameset.el (frameset-prop): New function and setter. + (frameset-save): Do not modify frame list passed by the caller. + 2013-08-03 Stefan Monnier * emacs-lisp/package.el (package-desc-from-define): Ignore unknown keys. diff --git a/lisp/frameset.el b/lisp/frameset.el index 9610d457008..8bb734b96fe 100644 --- a/lisp/frameset.el +++ b/lisp/frameset.el @@ -78,6 +78,21 @@ Else return nil." (and (eq (car-safe frameset) 'frameset) (plist-get (cl-second frameset) :version))) +;; A setf'able accessor to the frameset's properties +(defun frameset-prop (frameset prop) + "Return the value of the PROP property of FRAMESET. + +Properties other than :version can be set with + + (setf (frameset-prop FRAMESET PROP) NEW-VALUE)" + (plist-get (frameset-properties frameset) prop)) + +(gv-define-setter frameset-prop (v fs prop) + `(progn + (cl-assert (not (eq ,prop :version)) t ":version can not be set") + (setf (frameset-properties ,fs) + (plist-put (frameset-properties ,fs) ,prop ,v)))) + ;; Filtering @@ -294,8 +309,9 @@ PREDICATE is a predicate function, which must return non-nil for frames that should be saved; it defaults to saving all frames from FRAME-LIST. PROPERTIES is a user-defined property list to add to the frameset." (let ((frames (cl-delete-if-not #'frame-live-p - (cl-remove-if-not (or predicate #'framep) - (or frame-list (frame-list)))))) + (cl-delete-if-not (or predicate #'framep) + (or (copy-sequence frame-list) + (frame-list)))))) (frameset--process-minibuffer-frames frames) (make-frameset :properties (append '(:version 1) properties) :states (mapcar