emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/exwm 3763195 3/6: Use `buffer-predicate' frame paramete


From: Chris Feng
Subject: [elpa] externals/exwm 3763195 3/6: Use `buffer-predicate' frame parameter to prevent switching to visible EXWM buffers
Date: Sun, 20 Mar 2016 04:05:00 +0000

branch: externals/exwm
commit 3763195fe3205090e1f405970421662523b7df7e
Author: Adrián Medraño Calvo <address@hidden>
Commit: Adrián Medraño Calvo <address@hidden>

    Use `buffer-predicate' frame parameter to prevent switching to visible EXWM 
buffers
    
    * exwm-layout.el (exwm-layout--other-buffer-predicate): New
    function to be set as `buffer-predicate' frame parameter.
    * exwm-workspace.el (exwm-workspace--init): Use above function on
    workspace frames.
---
 exwm-layout.el    |   11 +++++++++++
 exwm-workspace.el |    4 ++++
 2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/exwm-layout.el b/exwm-layout.el
index d084c96..b0b9467 100644
--- a/exwm-layout.el
+++ b/exwm-layout.el
@@ -240,6 +240,17 @@
       (xcb:flush exwm--connection)))
   (cl-incf exwm-layout--fullscreen-frame-count))
 
+(defun exwm-layout--other-buffer-predicate (buffer)
+  "Return non-nil when the BUFFER may be displayed in selected frame.
+
+Prevents EXWM-mode buffers already being displayed on some other window from
+being selected.
+
+Should be set as `buffer-predicate' frame parameter for all
+frames.  Used by `other-buffer'."
+  (not (and (eq 'exwm-mode (buffer-local-value 'major-mode buffer))
+            (get-buffer-window buffer t))))
+
 (defvar exwm-layout-show-all-buffers nil
   "Non-nil to allow switching to buffers on other workspaces.")
 
diff --git a/exwm-workspace.el b/exwm-workspace.el
index b2fb648..c9a57f5 100644
--- a/exwm-workspace.el
+++ b/exwm-workspace.el
@@ -235,6 +235,7 @@ The optional FORCE option is for internal use only."
 (declare-function exwm-layout--show "exwm-layout.el" (id &optional window))
 (declare-function exwm-layout--hide "exwm-layout.el" (id))
 (declare-function exwm-layout--refresh "exwm-layout.el")
+(declare-function exwm-layout--other-buffer-predicate "exwm-layout.el" 
(buffer))
 
 ;;;###autoload
 (defun exwm-workspace-move-window (index &optional id)
@@ -684,6 +685,9 @@ The optional FORCE option is for internal use only."
     ;; The default behavior of `display-buffer' (indirectly called by
     ;; `minibuffer-completion-help') is not correct here.
     (cl-pushnew '(exwm-workspace--display-buffer) display-buffer-alist))
+  ;; Prevent `other-buffer' from selecting already displayed EXWM buffers.
+  (modify-all-frames-parameters
+   '((buffer-predicate . exwm-layout--other-buffer-predicate)))
   ;; Configure workspaces
   (dolist (i exwm-workspace--list)
     (let ((outer-id (string-to-number (frame-parameter i 'outer-window-id)))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]