Improve user options
* exwm-floating.el (exwm-floating-border-color) (exwm-floating-border-width): Make changes take effect w/o restart. (exwm-floating--init-border): Refactored out from `exwm-floating--init'. * exwm-workspace.el (exwm-workspace-minibuffer-position): Clarify a restart is required.
This commit is contained in:
		
							parent
							
								
									cb9607814f
								
							
						
					
					
						commit
						48b15e25ad
					
				
					 2 changed files with 87 additions and 28 deletions
				
			
		
							
								
								
									
										111
									
								
								exwm-floating.el
									
										
									
									
									
								
							
							
						
						
									
										111
									
								
								exwm-floating.el
									
										
									
									
									
								
							| 
						 | 
					@ -44,20 +44,70 @@ context of the corresponding buffer."
 | 
				
			||||||
context of the corresponding buffer."
 | 
					context of the corresponding buffer."
 | 
				
			||||||
  :type 'hook)
 | 
					  :type 'hook)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defvar exwm-floating--border-pixel nil
 | 
				
			||||||
 | 
					  "Border pixel drawn around floating X windows.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defcustom exwm-floating-border-color "navy"
 | 
					(defcustom exwm-floating-border-color "navy"
 | 
				
			||||||
  "Border color of floating windows."
 | 
					  "Border color of floating windows."
 | 
				
			||||||
  :type 'color)
 | 
					  :type 'color
 | 
				
			||||||
 | 
					  :initialize #'custom-initialize-default
 | 
				
			||||||
 | 
					  :set (lambda (symbol value)
 | 
				
			||||||
 | 
					         (set-default symbol value)
 | 
				
			||||||
 | 
					         ;; Change border color for all floating X windows.
 | 
				
			||||||
 | 
					         (exwm-floating--init-border)
 | 
				
			||||||
 | 
					         (dolist (pair exwm--id-buffer-alist)
 | 
				
			||||||
 | 
					           (with-current-buffer (cdr pair)
 | 
				
			||||||
 | 
					             (when exwm--floating-frame
 | 
				
			||||||
 | 
					               (xcb:+request exwm--connection
 | 
				
			||||||
 | 
					                   (make-instance 'xcb:ChangeWindowAttributes
 | 
				
			||||||
 | 
					                                  :window
 | 
				
			||||||
 | 
					                                  (frame-parameter exwm--floating-frame
 | 
				
			||||||
 | 
					                                                   'exwm-container)
 | 
				
			||||||
 | 
					                                  :value-mask xcb:CW:BorderPixel
 | 
				
			||||||
 | 
					                                  :border-pixel
 | 
				
			||||||
 | 
					                                  exwm-floating--border-pixel)))))
 | 
				
			||||||
 | 
					         (when exwm--connection
 | 
				
			||||||
 | 
					           (xcb:flush exwm--connection))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defcustom exwm-floating-border-width 1
 | 
					(defcustom exwm-floating-border-width 1
 | 
				
			||||||
  "Border width of floating windows."
 | 
					  "Border width of floating windows."
 | 
				
			||||||
  :type 'integer)
 | 
					  :type '(integer
 | 
				
			||||||
 | 
					          :validate (lambda (widget)
 | 
				
			||||||
 | 
					                      (when (< (widget-value widget) 0)
 | 
				
			||||||
 | 
					                        (widget-put widget :error "Border width is at least 0")
 | 
				
			||||||
 | 
					                        widget)))
 | 
				
			||||||
 | 
					  :initialize #'custom-initialize-default
 | 
				
			||||||
 | 
					  :set (lambda (symbol value)
 | 
				
			||||||
 | 
					         (let ((delta (- value exwm-floating-border-width))
 | 
				
			||||||
 | 
					               container)
 | 
				
			||||||
 | 
					           (set-default symbol value)
 | 
				
			||||||
 | 
					           ;; Change border width for all floating X windows.
 | 
				
			||||||
 | 
					           (dolist (pair exwm--id-buffer-alist)
 | 
				
			||||||
 | 
					             (with-current-buffer (cdr pair)
 | 
				
			||||||
 | 
					               (when exwm--floating-frame
 | 
				
			||||||
 | 
					                 (setq container (frame-parameter exwm--floating-frame
 | 
				
			||||||
 | 
					                                                  'exwm-container))
 | 
				
			||||||
 | 
					                 (with-slots (x y)
 | 
				
			||||||
 | 
					                     (xcb:+request-unchecked+reply exwm--connection
 | 
				
			||||||
 | 
					                         (make-instance 'xcb:GetGeometry
 | 
				
			||||||
 | 
					                                        :drawable container))
 | 
				
			||||||
 | 
					                   (xcb:+request exwm--connection
 | 
				
			||||||
 | 
					                       (make-instance 'xcb:ConfigureWindow
 | 
				
			||||||
 | 
					                                      :window container
 | 
				
			||||||
 | 
					                                      :value-mask
 | 
				
			||||||
 | 
					                                      (logior xcb:ConfigWindow:X
 | 
				
			||||||
 | 
					                                              xcb:ConfigWindow:Y
 | 
				
			||||||
 | 
					                                              xcb:ConfigWindow:BorderWidth)
 | 
				
			||||||
 | 
					                                      :border-width value
 | 
				
			||||||
 | 
					                                      :x (- x delta)
 | 
				
			||||||
 | 
					                                      :y (- y delta)))))))
 | 
				
			||||||
 | 
					           (when exwm--connection
 | 
				
			||||||
 | 
					             (xcb:flush exwm--connection)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defvar exwm-floating--border-colormap nil
 | 
					(defvar exwm-floating--border-colormap nil
 | 
				
			||||||
  "Colormap used by the border pixel.
 | 
					  "Colormap used by the border pixel.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This is also used by X window containers.")
 | 
					This is also used by X window containers.")
 | 
				
			||||||
(defvar exwm-floating--border-pixel nil
 | 
					 | 
				
			||||||
  "Border pixel drawn around floating X windows.")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
;; Cursors for moving/resizing a window
 | 
					;; Cursors for moving/resizing a window
 | 
				
			||||||
(defvar exwm-floating--cursor-move nil)
 | 
					(defvar exwm-floating--cursor-move nil)
 | 
				
			||||||
| 
						 | 
					@ -679,32 +729,39 @@ Both DELTA-X and DELTA-Y default to 1.  This command should be bound locally."
 | 
				
			||||||
                          nil nil))
 | 
					                          nil nil))
 | 
				
			||||||
    (xcb:flush exwm--connection)))
 | 
					    (xcb:flush exwm--connection)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun exwm-floating--init-border ()
 | 
				
			||||||
 | 
					  "Initialize border colormap and pixel."
 | 
				
			||||||
 | 
					  (exwm--log)
 | 
				
			||||||
 | 
					  ;; Use the default colormap.
 | 
				
			||||||
 | 
					  (unless exwm-floating--border-colormap
 | 
				
			||||||
 | 
					    (with-slots (roots) (xcb:get-setup exwm--connection)
 | 
				
			||||||
 | 
					      (with-slots (default-colormap) (car roots)
 | 
				
			||||||
 | 
					        (setq exwm-floating--border-colormap default-colormap))))
 | 
				
			||||||
 | 
					  ;; Free any previously allocated pixel.
 | 
				
			||||||
 | 
					  (when exwm-floating--border-pixel
 | 
				
			||||||
 | 
					    (xcb:+request exwm--connection
 | 
				
			||||||
 | 
					        (make-instance 'xcb:FreeColors
 | 
				
			||||||
 | 
					                       :cmap exwm-floating--border-colormap
 | 
				
			||||||
 | 
					                       :plane-mask 0
 | 
				
			||||||
 | 
					                       :pixels (vector exwm-floating--border-pixel)))
 | 
				
			||||||
 | 
					    (setq exwm-floating--border-pixel nil))
 | 
				
			||||||
 | 
					  ;; Allocate new pixel.
 | 
				
			||||||
 | 
					  (let ((color (x-color-values (or exwm-floating-border-color "")))
 | 
				
			||||||
 | 
					         reply)
 | 
				
			||||||
 | 
					    (when color
 | 
				
			||||||
 | 
					      (setq reply (xcb:+request-unchecked+reply exwm--connection
 | 
				
			||||||
 | 
					                      (make-instance 'xcb:AllocColor
 | 
				
			||||||
 | 
					                                     :cmap exwm-floating--border-colormap
 | 
				
			||||||
 | 
					                                     :red (pop color)
 | 
				
			||||||
 | 
					                                     :green (pop color)
 | 
				
			||||||
 | 
					                                     :blue (pop color))))
 | 
				
			||||||
 | 
					      (when reply
 | 
				
			||||||
 | 
					        (setq exwm-floating--border-pixel (slot-value reply 'pixel))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun exwm-floating--init ()
 | 
					(defun exwm-floating--init ()
 | 
				
			||||||
  "Initialize floating module."
 | 
					  "Initialize floating module."
 | 
				
			||||||
  (exwm--log)
 | 
					  (exwm--log)
 | 
				
			||||||
  ;; Check border width.
 | 
					  (exwm-floating--init-border)
 | 
				
			||||||
  (unless (and (integerp exwm-floating-border-width)
 | 
					 | 
				
			||||||
               (> exwm-floating-border-width 0))
 | 
					 | 
				
			||||||
    (setq exwm-floating-border-width 0))
 | 
					 | 
				
			||||||
  ;; Initialize border pixel.
 | 
					 | 
				
			||||||
  (when (> exwm-floating-border-width 0)
 | 
					 | 
				
			||||||
    (setq exwm-floating--border-colormap
 | 
					 | 
				
			||||||
          (slot-value (car (slot-value
 | 
					 | 
				
			||||||
                            (xcb:get-setup exwm--connection) 'roots))
 | 
					 | 
				
			||||||
                      'default-colormap))
 | 
					 | 
				
			||||||
    (unless (stringp exwm-floating-border-color)
 | 
					 | 
				
			||||||
      (setq exwm-floating-border-color ""))
 | 
					 | 
				
			||||||
    (let* ((color (x-color-values exwm-floating-border-color))
 | 
					 | 
				
			||||||
           reply)
 | 
					 | 
				
			||||||
      (when color
 | 
					 | 
				
			||||||
        (setq reply (xcb:+request-unchecked+reply exwm--connection
 | 
					 | 
				
			||||||
                        (make-instance 'xcb:AllocColor
 | 
					 | 
				
			||||||
                                       :cmap exwm-floating--border-colormap
 | 
					 | 
				
			||||||
                                       :red (pop color)
 | 
					 | 
				
			||||||
                                       :green (pop color)
 | 
					 | 
				
			||||||
                                       :blue (pop color))))
 | 
					 | 
				
			||||||
        (when reply
 | 
					 | 
				
			||||||
          (setq exwm-floating--border-pixel (slot-value reply 'pixel))))))
 | 
					 | 
				
			||||||
  ;; Initialize cursors for moving/resizing a window
 | 
					  ;; Initialize cursors for moving/resizing a window
 | 
				
			||||||
  (xcb:cursor:init exwm--connection)
 | 
					  (xcb:cursor:init exwm--connection)
 | 
				
			||||||
  (setq exwm-floating--cursor-move
 | 
					  (setq exwm-floating--cursor-move
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,9 @@ By default `number-to-string' is applied which yields 0 1 2 ... ."
 | 
				
			||||||
  :type 'function)
 | 
					  :type 'function)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defcustom exwm-workspace-minibuffer-position nil
 | 
					(defcustom exwm-workspace-minibuffer-position nil
 | 
				
			||||||
  "Position of the minibuffer frame."
 | 
					  "Position of the minibuffer frame.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					A restart is required for this change to take effect."
 | 
				
			||||||
  :type '(choice (const :tag "Bottom (fixed)" nil)
 | 
					  :type '(choice (const :tag "Bottom (fixed)" nil)
 | 
				
			||||||
                 (const :tag "Bottom (auto-hide)" bottom)
 | 
					                 (const :tag "Bottom (auto-hide)" bottom)
 | 
				
			||||||
                 (const :tag "Top (auto-hide)" top)))
 | 
					                 (const :tag "Top (auto-hide)" top)))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue