From: Richard M. Stallman Date: Thu, 3 Jan 2008 09:57:40 +0000 (+0000) Subject: (frame-geom-value-cons, frame-geom-spec-cons): New fns. X-Git-Tag: emacs-pretest-23.0.90~8731 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=a32c180455b2d910aa8855e42dfc4ac900d14d6e;p=emacs.git (frame-geom-value-cons, frame-geom-spec-cons): New fns. --- diff --git a/lisp/ChangeLog b/lisp/ChangeLog index da4dd53eda3..9228f8e93c6 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2008-01-03 Drew Adams + + * frame.el (frame-geom-value-cons, frame-geom-spec-cons): New fns. + 2008-01-03 Richard Stallman * replace.el (occur-context-lines): New subroutine, diff --git a/lisp/frame.el b/lisp/frame.el index df3ed16f574..431aa343555 100644 --- a/lisp/frame.el +++ b/lisp/frame.el @@ -1329,6 +1329,68 @@ The value is one of the symbols `static-gray', `gray-scale', 'static-gray)))) +;;;; Frame geometry values + +(defun frame-geom-value-cons (type value &optional frame) + "Return equivalent geometry value for FRAME as a cons with car `+'. +A geometry value equivalent to VALUE for FRAME is returned, +where the value is a cons with car `+', not numeric. +TYPE is the car of the original geometry spec (TYPE . VALUE). + It is `top' or `left', depending on which edge VALUE is related to. +VALUE is the cdr of a frame geometry spec: (left/top . VALUE). +If VALUE is a number, then it is converted to a cons value, perhaps + relative to the opposite frame edge from that in the original spec. +FRAME defaults to the selected frame. + +Examples (measures in pixels) - + Assuming display height/width=1024, frame height/width=600: + 300 inside display edge: 300 => (+ 300) + (+ 300) => (+ 300) + 300 inside opposite display edge: (- 300) => (+ 124) + -300 => (+ 124) + 300 beyond display edge + (= 724 inside opposite display edge): (+ -300) => (+ -300) + 300 beyond display edge + (= 724 inside opposite display edge): (- -300) => (+ 724) + +In the 3rd, 4th, and 6th examples, the returned value is relative to +the opposite frame edge from the edge indicated in the input spec." + (cond ((and (consp value) (eq '+ (car value))) ; e.g. (+ 300), (+ -300) + value) + ((natnump value) (list '+ value)) ; e.g. 300 => (+ 300) + (t ; e.g. -300, (- 300), (- -300) + (list '+ (- (if (eq 'left type) ; => (+ 124), (+ 124), (+ 724) + (x-display-pixel-width) + (x-display-pixel-height)) + (if (integerp value) (- value) (cadr value)) + (if (eq 'left type) + (frame-pixel-width frame) + (frame-pixel-height frame))))))) + +(defun frame-geom-spec-cons (spec &optional frame) + "Return equivalent geometry spec for FRAME as a cons with car `+'. +A geometry specification equivalent to SPEC for FRAME is returned, +where the value is a cons with car `+', not numeric. +SPEC is a frame geometry spec: (left . VALUE) or (top . VALUE). +If VALUE is a number, then it is converted to a cons value, perhaps + relative to the opposite frame edge from that in the original spec. +FRAME defaults to the selected frame. + +Examples (measures in pixels) - + Assuming display height=1024, frame height=600: + top 300 below display top: (top . 300) => (top + 300) + (top + 300) => (top + 300) + bottom 300 above display bottom: (top - 300) => (top + 124) + (top . -300) => (top + 124) + top 300 above display top + (= bottom 724 above display bottom): (top + -300) => (top + -300) + bottom 300 below display bottom + (= top 724 below display top): (top - -300) => (top + 724) + +In the 3rd, 4th, and 6th examples, the returned value is relative to +the opposite frame edge from the edge indicated in the input spec." + (cons (car spec) (frame-geom-value-cons (car spec) (cdr spec)))) + ;;;; Aliases for backward compatibility with Emacs 18. (define-obsolete-function-alias 'screen-height 'frame-height) ;before 19.15 (define-obsolete-function-alias 'screen-width 'frame-width) ;before 19.15