-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmaximize.el
More file actions
122 lines (117 loc) · 6.5 KB
/
maximize.el
File metadata and controls
122 lines (117 loc) · 6.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
;;
;; maximize.el - maximize emacs frames in vertically or horizontally.
;;
;;
;; Copyright (c) 2012 Yukimitsu Izawa <izawa@izawa.org>
;; All rights reserved.
;;
;; Redistribution and use in source and binary forms, with or without
;; modification, are permitted provided that the following conditions
;; are met:
;; 1. Redistributions of source code must retain the above copyright
;; notice, this list of conditions and the following disclaimer.
;; 2. Redistributions in binary form must reproduce the above copyright
;; notice, this list of conditions and the following disclaimer in the
;; documentation and/or other materials provided with the distribution.
;; 3. All advertising materials mentioning features or use of this software
;; must display the following acknowledgement:
;; This product includes software developed by Yukimitsu Izawa.
;; 4. The name of Yukimitsu Izawa may not be used to endorse or promote products
;; derived from this software without specific prior written permission.
;;
;; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
;; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
;; OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
;; IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
;; INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
;; NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
;; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
;; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
;; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
;; THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
; How to install:
; Place this file into your load-path directory. like this,
; % cp maximize.el ~/elisp
; and add this line into your .emacs.
; (setq load-path (append (list (expand-file-name "~/elisp/")) load-path))
;
; (require 'maximize)
; (global-set-key [f9] 'maximize-toggle-frame-vmax)
; (global-set-key [f11] 'maximize-toggle-frame-hmax)
;
(provide 'maximize)
(defvar maximize-window-alist nil)
(defvar x-pixel-ratio 0.96)
(defvar y-pixel-ratio 0.9)
(defun maximize-toggle-frame-vmax ()
(interactive)
(let* ((current-my-window
(progn
(unless (assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)
(add-to-list 'maximize-window-alist
(cons (intern (cdr (assoc 'window-id (frame-parameters (selected-frame)))))
(mapcar '(lambda (x) (cons x (cons (cdr (assoc x (frame-parameters (selected-frame)))) nil)))
'(left top height width vmax-flag hmax-flag)))))
(assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)))
(current-vmax-flag (car (cdr (assoc 'vmax-flag current-my-window))))
(current-hmax-flag (car (cdr (assoc 'hmax-flag current-my-window))))
(current-top (car (cdr (assoc 'top current-my-window))))
(current-left (car (cdr (assoc 'left current-my-window))))
(current-height (car (cdr (assoc 'height current-my-window))))
(current-width (car (cdr (assoc 'width current-my-window)))))
(if (not current-vmax-flag)
(progn
(unless current-hmax-flag
(setcdr (assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame)))))
maximize-window-alist) (mapcar '(lambda (x) (cons x (cons (cdr (assoc x (frame-parameters (selected-frame)))) nil)))
'(left top height width vmax-flag hmax-flag))))
(if current-hmax-flag
(set-frame-position (selected-frame) 0 0)
(set-frame-position (selected-frame)
(car (cdr (assoc 'left (assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame)))))
maximize-window-alist)))) 0))
(set-frame-height (selected-frame) (round (* y-pixel-ratio (/ (x-display-pixel-height) (frame-char-height)))))
(setcdr (assoc 'vmax-flag
(assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)) (cons t nil)))
(if current-hmax-flag
(set-frame-position (selected-frame) 0 current-top)
(set-frame-position (selected-frame) current-left current-top))
(set-frame-height (selected-frame) current-height)
(setcdr (assoc 'vmax-flag
(assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)) (cons nil nil)))))
(defun maximize-toggle-frame-hmax ()
(interactive)
(let* ((current-my-window
(progn
(unless (assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)
(add-to-list 'maximize-window-alist
(cons (intern (cdr (assoc 'window-id (frame-parameters (selected-frame)))))
(mapcar '(lambda (x) (cons x (cons (cdr (assoc x (frame-parameters (selected-frame)))) nil)))
'(left top height width vmax-flag hmax-flag)))))
(assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)))
(current-vmax-flag (car (cdr (assoc 'vmax-flag current-my-window))))
(current-hmax-flag (car (cdr (assoc 'hmax-flag current-my-window))))
(current-top (car (cdr (assoc 'top current-my-window))))
(current-left (car (cdr (assoc 'left current-my-window))))
(current-height (car (cdr (assoc 'height current-my-window))))
(current-width (car (cdr (assoc 'width current-my-window)))))
(if (not current-hmax-flag)
(progn
(unless current-vmax-flag
(setcdr (assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame)))))
maximize-window-alist) (mapcar '(lambda (x) (cons x (cons (cdr (assoc x (frame-parameters (selected-frame)))) nil)))
'(left top height width vmax-flag hmax-flag))))
(if current-vmax-flag
(set-frame-position (selected-frame) 0 0)
(set-frame-position (selected-frame)
0 (car (cdr (assoc 'top (assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame)))))
maximize-window-alist))))))
(set-frame-width (selected-frame) (round (* x-pixel-ratio (/ (x-display-pixel-width) (frame-char-width)))))
(setcdr (assoc 'hmax-flag
(assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)) (cons t nil)))
(if current-vmax-flag
(set-frame-position (selected-frame) current-left 0)
(set-frame-position (selected-frame) current-left current-top))
(set-frame-width (selected-frame) current-width)
(setcdr (assoc 'hmax-flag
(assoc (intern (cdr (assoc 'window-id (frame-parameters (selected-frame))))) maximize-window-alist)) (cons nil nil)))))