summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorJim Blandy <jimb@redhat.com>1993-03-15 08:51:02 +0000
committerJim Blandy <jimb@redhat.com>1993-03-15 08:51:02 +0000
commit0a208d37edeee3b05d76838b8a81cefa0d6a70c6 (patch)
tree9d5c3983a7c08f4cd78ca0786b97ba2d3566f470 /lisp
parent6b99828a0b2536555c3dbdb89770c5485040fe3b (diff)
downloademacs-0a208d37edeee3b05d76838b8a81cefa0d6a70c6.tar.gz
Make frame configurations start with a distinctive symbol.
* frame.el (current-frame-configuration): Return a list as before, but starting with `frame-configuration'. (set-frame-configuration): Check that CONFIGURATION is a list starting with `frame-configuration', strip it off, and do as before. (frame-configuration-p): New function. * register.el (jump-to-register): Use frame-configuration-p, instead of catching an error in set-frame-configuration. Really now.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/frame.el38
-rw-r--r--lisp/register.el20
2 files changed, 36 insertions, 22 deletions
diff --git a/lisp/frame.el b/lisp/frame.el
index e52d50de04b..989b3efa2ec 100644
--- a/lisp/frame.el
+++ b/lisp/frame.el
@@ -284,25 +284,32 @@ additional frame parameters that Emacs recognizes for X window frames."
(defun current-frame-configuration ()
"Return a list describing the positions and states of all frames.
-Each element is a list of the form (FRAME ALIST WINDOW-CONFIG), where
-FRAME is a frame object, ALIST is an association list specifying
-some of FRAME's parameters, and WINDOW-CONFIG is a window
-configuration object for FRAME."
- (mapcar (function
- (lambda (frame)
- (list frame
- (frame-parameters frame)
- (current-window-configuration frame))))
- (frame-list)))
+Its car is `frame-configuration'.
+Each element of the cdr is a list of the form (FRAME ALIST WINDOW-CONFIG),
+where
+ FRAME is a frame object,
+ ALIST is an association list specifying some of FRAME's parameters, and
+ WINDOW-CONFIG is a window configuration object for FRAME."
+ (cons 'frame-configuration
+ (mapcar (function
+ (lambda (frame)
+ (list frame
+ (frame-parameters frame)
+ (current-window-configuration frame))))
+ (frame-list))))
(defun set-frame-configuration (configuration)
"Restore the frames to the state described by CONFIGURATION.
Each frame listed in CONFIGURATION has its position, size, window
configuration, and other parameters set as specified in CONFIGURATION."
- (let (frames-to-delete)
+ (or (frame-configuration-p configuration)
+ (signal 'wrong-type-argument
+ (list 'frame-configuration-p configuration)))
+ (let ((config-alist (cdr configuration))
+ frames-to-delete)
(mapcar (function
(lambda (frame)
- (let ((parameters (assq frame configuration)))
+ (let ((parameters (assq frame config-alist)))
(if parameters
(progn
(modify-frame-parameters frame (nth 1 parameters))
@@ -311,6 +318,13 @@ configuration, and other parameters set as specified in CONFIGURATION."
(frame-list))
(mapcar 'delete-frame frames-to-delete)))
+(defun frame-configuration-p (object)
+ "Return non-nil if OBJECT seems to be a frame configuration.
+Any list whose car is `frame-configuration' is assumed to be a frame
+configuration."
+ (and (consp object)
+ (eq (car object) 'frame-configuration)))
+
;;;; Convenience functions for accessing and interactively changing
;;;; frame parameters.
diff --git a/lisp/register.el b/lisp/register.el
index 885e5c5a0a7..25167cf4abd 100644
--- a/lisp/register.el
+++ b/lisp/register.el
@@ -72,16 +72,16 @@ configuration (all frames), restore that frame or all frames accordingly.
Argument is a character, naming the register."
(interactive "cJump to register: ")
(let ((val (get-register char)))
- (condition-case ()
- (set-frame-configuration val)
- (error
- (if (window-configuration-p val)
- (set-window-configuration val)
- (if (markerp val)
- (progn
- (switch-to-buffer (marker-buffer val))
- (goto-char val))
- (error "Register doesn't contain a buffer position or configuration")))))))
+ (cond
+ ((frame-configuration-p val)
+ (set-frame-configuration val))
+ ((window-configuration-p val)
+ (set-window-configuration val))
+ ((markerp val)
+ (switch-to-buffer (marker-buffer val))
+ (goto-char val))
+ (t
+ (error "Register doesn't contain a buffer position or configuration")))))
;(defun number-to-register (arg char)
; "Store a number in a register.