Merge branch 'fjl-fix-resize-minibuffer'
This commit is contained in:
		
						commit
						e9e476c4de
					
				
					 4 changed files with 17 additions and 10 deletions
				
			
		| 
						 | 
				
			
			@ -111,7 +111,7 @@ It's updated in several occasions, and only used by `exwm-input--set-focus'.")
 | 
			
		|||
            (exwm-input--set-focus exwm--id)
 | 
			
		||||
            ;; Adjust stacking orders
 | 
			
		||||
            (when exwm--floating-frame
 | 
			
		||||
              (if (memq exwm-workspace-minibuffer-position '(top bottom))
 | 
			
		||||
              (if (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
                  ;; Put this floating X window just below the minibuffer.
 | 
			
		||||
                  (xcb:+request exwm--connection
 | 
			
		||||
                      (make-instance 'xcb:ConfigureWindow
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -203,8 +203,9 @@
 | 
			
		|||
        (id (frame-parameter frame 'exwm-outer-id))
 | 
			
		||||
        (workspace (frame-parameter frame 'exwm-workspace)))
 | 
			
		||||
    (with-slots (x y width height) geometry
 | 
			
		||||
      (when (eq frame exwm-workspace--current)
 | 
			
		||||
        (exwm-workspace--resize-minibuffer width height))
 | 
			
		||||
      (when (and (eq frame exwm-workspace--current)
 | 
			
		||||
                 (exwm-workspace--minibuffer-own-frame-p))
 | 
			
		||||
        (exwm-workspace--resize-minibuffer-frame width height))
 | 
			
		||||
      (exwm-layout--resize-container id workspace x y width height)
 | 
			
		||||
      (xcb:flush exwm--connection))))
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -395,7 +396,7 @@ See also `exwm-layout-enlarge-window'."
 | 
			
		|||
  "Initialize layout module."
 | 
			
		||||
  ;; Auto refresh layout
 | 
			
		||||
  (add-hook 'window-configuration-change-hook #'exwm-layout--refresh)
 | 
			
		||||
  (unless (memq exwm-workspace-minibuffer-position '(top bottom))
 | 
			
		||||
  (unless (exwm-workspace--minibuffer-own-frame-p)
 | 
			
		||||
    ;; Refresh when minibuffer grows
 | 
			
		||||
    (add-hook 'minibuffer-setup-hook #'exwm-layout--on-minibuffer-setup t)
 | 
			
		||||
    (run-with-idle-timer 0 t #'exwm-layout--on-echo-area-change t)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,8 +103,9 @@
 | 
			
		|||
                                         (frame-parameter frame
 | 
			
		||||
                                                          'exwm-workspace)
 | 
			
		||||
                                         x y width height)
 | 
			
		||||
          (when (eq frame exwm-workspace--current)
 | 
			
		||||
            (exwm-workspace--resize-minibuffer width height))
 | 
			
		||||
          (when (and (eq frame exwm-workspace--current)
 | 
			
		||||
                     (exwm-workspace--minibuffer-own-frame-p))
 | 
			
		||||
            (exwm-workspace--resize-minibuffer-frame width height))
 | 
			
		||||
          (setq workareas
 | 
			
		||||
                (nconc workareas (list x y width (- height
 | 
			
		||||
                                                    workarea-offset)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,11 +111,16 @@ Value nil means to use the default position which is fixed at bottom, while
 | 
			
		|||
(defvar exwm-workspace--display-echo-area-timer nil
 | 
			
		||||
  "Timer for auto-hiding echo area.")
 | 
			
		||||
 | 
			
		||||
(defun exwm-workspace--resize-minibuffer (&optional width height)
 | 
			
		||||
(defun exwm-workspace--minibuffer-own-frame-p ()
 | 
			
		||||
  "Reports whether the minibuffer is displayed in its own frame."
 | 
			
		||||
  (memq exwm-workspace-minibuffer-position '(top bottom)))
 | 
			
		||||
 | 
			
		||||
(defun exwm-workspace--resize-minibuffer-frame (&optional width height)
 | 
			
		||||
  "Resize minibuffer (and its container) to fit the size of workspace.
 | 
			
		||||
 | 
			
		||||
If WIDTH and HEIGHT of the workspace is not specified, they're get from the
 | 
			
		||||
workspace frame."
 | 
			
		||||
  (cl-assert (exwm-workspace--minibuffer-own-frame-p))
 | 
			
		||||
  (let ((y (if (eq exwm-workspace-minibuffer-position 'top)
 | 
			
		||||
               0
 | 
			
		||||
             (- (or height (frame-pixel-height exwm-workspace--current))
 | 
			
		||||
| 
						 | 
				
			
			@ -168,7 +173,7 @@ The optional FORCE option is for internal use only."
 | 
			
		|||
        ;; Close the (possible) active minibuffer
 | 
			
		||||
        (when (active-minibuffer-window)
 | 
			
		||||
          (run-with-idle-timer 0 nil (lambda () (abort-recursive-edit))))
 | 
			
		||||
        (if (not (memq exwm-workspace-minibuffer-position '(top bottom)))
 | 
			
		||||
        (if (not (exwm-workspace--minibuffer-own-frame-p))
 | 
			
		||||
            (setq default-minibuffer-frame frame)
 | 
			
		||||
          ;; Resize/reposition the minibuffer frame
 | 
			
		||||
          (xcb:+request exwm--connection
 | 
			
		||||
| 
						 | 
				
			
			@ -178,7 +183,7 @@ The optional FORCE option is for internal use only."
 | 
			
		|||
                                              'exwm-container)
 | 
			
		||||
                             :parent (frame-parameter frame 'exwm-workspace)
 | 
			
		||||
                             :x 0 :y 0))
 | 
			
		||||
          (exwm-workspace--resize-minibuffer))
 | 
			
		||||
          (exwm-workspace--resize-minibuffer-frame))
 | 
			
		||||
        ;; Hide windows in other workspaces by preprending a space
 | 
			
		||||
        (unless exwm-workspace-show-all-buffers
 | 
			
		||||
          (dolist (i exwm--id-buffer-alist)
 | 
			
		||||
| 
						 | 
				
			
			@ -459,7 +464,7 @@ This functions is modified from `display-buffer-reuse-window' and
 | 
			
		|||
            (0 (y-or-n-p prompt))
 | 
			
		||||
            (x (yes-or-no-p (format "[EXWM] %d window%s currently alive. %s"
 | 
			
		||||
                                    x (if (= x 1) "" "s") prompt))))))
 | 
			
		||||
  (if (not (memq exwm-workspace-minibuffer-position '(top bottom)))
 | 
			
		||||
  (if (not (exwm-workspace--minibuffer-own-frame-p))
 | 
			
		||||
      ;; Initialize workspaces with minibuffers.
 | 
			
		||||
      (progn
 | 
			
		||||
        (setq exwm-workspace--list (frame-list))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue