Compare commits
	
		
			5 Commits
		
	
	
		
			31037cf599
			...
			68818946a6
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 68818946a6 | |||
| 30da3d7c08 | |||
| aba0e70aec | |||
| 63c390d76b | |||
| 05fe647254 | 
							
								
								
									
										30
									
								
								pip-frame.el
									
									
									
									
									
								
							
							
						
						
									
										30
									
								
								pip-frame.el
									
									
									
									
									
								
							| @@ -1,7 +1,12 @@ | |||||||
| ;;; pip-frame.el --- PIP frame support  -*- lexical-binding: t -*- | ;;; pip-frame.el --- Display and manage a PIP frame  -*- lexical-binding: t -*- | ||||||
|  |  | ||||||
| ;; Copyright (C) 2022 Milan Zamazal <pdm@zamazal.org> | ;; Copyright (C) 2022 Milan Zamazal <pdm@zamazal.org> | ||||||
|  |  | ||||||
|  | ;; Author: Milan Zamazal <pdm@zamazal.org> | ||||||
|  | ;; Package-Version: 1 | ||||||
|  | ;; Keywords: frames | ||||||
|  | ;; URL: https://git.zamazal.org/pdm/pip-frame | ||||||
|  |  | ||||||
| ;; COPYRIGHT NOTICE | ;; COPYRIGHT NOTICE | ||||||
| ;; | ;; | ||||||
| ;; This program is free software: you can redistribute it and/or modify | ;; This program is free software: you can redistribute it and/or modify | ||||||
| @@ -17,6 +22,8 @@ | |||||||
| ;; You should have received a copy of the GNU General Public License | ;; You should have received a copy of the GNU General Public License | ||||||
| ;; along with this program.  If not, see <http://www.gnu.org/licenses/>. | ;; along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  | ||||||
|  | ;;; Commentary: | ||||||
|  | ;; | ||||||
| ;; Display a floating Emacs frame with selected buffers. | ;; Display a floating Emacs frame with selected buffers. | ||||||
| ;; Similar to PIP on screens.  Probably most useful in EXWM. | ;; Similar to PIP on screens.  Probably most useful in EXWM. | ||||||
| ;; | ;; | ||||||
| @@ -28,7 +35,8 @@ | |||||||
| (require 'cl-lib) | (require 'cl-lib) | ||||||
|  |  | ||||||
| (defgroup pip-frame () | (defgroup pip-frame () | ||||||
|   "Display PIP frame.") |   "Display PIP frame." | ||||||
|  |   :group 'frames) | ||||||
|  |  | ||||||
| (defcustom pip-frame-scale 4 | (defcustom pip-frame-scale 4 | ||||||
|   "How many times to shrink the PIP frame relative to the display size." |   "How many times to shrink the PIP frame relative to the display size." | ||||||
| @@ -71,7 +79,7 @@ custom option but it can be overriden here." | |||||||
|  |  | ||||||
| (defun pip-frame--get-frame (&optional no-error) | (defun pip-frame--get-frame (&optional no-error) | ||||||
|   (let ((frame (cl-find pip-frame--name (frame-list) |   (let ((frame (cl-find pip-frame--name (frame-list) | ||||||
|                         :key #'(lambda (f) (frame-parameter f 'name))))) |                         :key (lambda (f) (frame-parameter f 'name))))) | ||||||
|     (or frame |     (or frame | ||||||
|         (unless no-error |         (unless no-error | ||||||
|           (error "No PIP frame"))))) |           (error "No PIP frame"))))) | ||||||
| @@ -85,8 +93,8 @@ custom option but it can be overriden here." | |||||||
|         (frame-inhibit-implied-resize t) |         (frame-inhibit-implied-resize t) | ||||||
|         (face-height (round (/ (face-attribute 'default :height) pip-frame-font-scale)))) |         (face-height (round (/ (face-attribute 'default :height) pip-frame-font-scale)))) | ||||||
|     (set-face-attribute 'default frame :height face-height) |     (set-face-attribute 'default frame :height face-height) | ||||||
|     (mapc #'(lambda (p) (set-face-attribute 'default frame (car p) (cdr p))) |     (dolist (p pip-frame-face-attributes) | ||||||
|           pip-frame-face-attributes) |       (set-face-attribute 'default frame (car p) (cdr p))) | ||||||
|     (set-window-buffer (car (window-list frame)) buffer) |     (set-window-buffer (car (window-list frame)) buffer) | ||||||
|     frame)) |     frame)) | ||||||
|  |  | ||||||
| @@ -102,11 +110,11 @@ custom option but it can be overriden here." | |||||||
|   (let ((windows (window-list (pip-frame--get-frame)))) |   (let ((windows (window-list (pip-frame--get-frame)))) | ||||||
|     (unless (and temporary |     (unless (and temporary | ||||||
|                  (cl-find buffer windows :key #'window-buffer :test #'eq)) |                  (cl-find buffer windows :key #'window-buffer :test #'eq)) | ||||||
|       (let* ((sizes (mapcar #'(lambda (w) |       (let* ((sizes (mapcar (lambda (w) | ||||||
|                                 (let ((width (window-body-width w t)) |                               (let ((width (window-body-width w t)) | ||||||
|                                       (height (window-body-height w t))) |                                     (height (window-body-height w t))) | ||||||
|                                   (cons (+ (* width width) (* height height)) |                                 (cons (+ (* width width) (* height height)) | ||||||
|                                         w))) |                                       w))) | ||||||
|                             windows)) |                             windows)) | ||||||
|              (largest (cdr (cl-first (cl-sort sizes #'> :key #'car)))) |              (largest (cdr (cl-first (cl-sort sizes #'> :key #'car)))) | ||||||
|              (side (if (> (window-body-width largest t) |              (side (if (> (window-body-width largest t) | ||||||
| @@ -170,7 +178,7 @@ If the buffer is not present in the PIP frame, do nothing." | |||||||
|                                        :test-not #'eq))) |                                        :test-not #'eq))) | ||||||
|     (if (= (length windows-to-delete) (length windows)) |     (if (= (length windows-to-delete) (length windows)) | ||||||
|         (pip-frame-delete-frame) |         (pip-frame-delete-frame) | ||||||
|       (mapc #'delete-window windows-to-delete)))) |       (seq-do #'delete-window windows-to-delete)))) | ||||||
|  |  | ||||||
| (defun pip-frame--move (x y) | (defun pip-frame--move (x y) | ||||||
|   (let ((frame (pip-frame--get-frame))) |   (let ((frame (pip-frame--get-frame))) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user