ch11ng / exwm

Emacs X Window Manager
2.85k stars 134 forks source link

Troubleshooting for Capturing an Application #646

Closed Luis-Henriquez-Perez closed 5 years ago

Luis-Henriquez-Perez commented 5 years ago

For me qutebrowser is unable to be controlled by EXWM. I've looked at issue #287 and tried setting exwm-manage-configurations (as you can see below). What are some other things I can try?

(setq exwm-manage-configurations '((t managed t)))
ch11ng commented 5 years ago

I think there are quite a few qutebrowser users here and they don't seem to have such problem. I myself just installed it and it seems working fine. Please prepare a debug log so we can help you troubleshooting this problem.

Luis-Henriquez-Perez commented 5 years ago

Ok, I will be more detailed. It's my first time using exwm debug so please bear with me.

I'm using arch linux.

This is my exwm configuration:

(with-os! linux
  (when (display-graphic-p)
    (setq exwm-replace nil)
    (require 'exwm)
    (exwm-enable)))

(defun void/do-shell-command (command)
    (interactive (list (read-shell-command "$ ")))
    (start-process-shell-command command nil command))

After opening exwm I did M-x exwm-debug. Then I opened qutebrowser with void/do-shell-command. And then I closed it.

The log is really long.

[00:06:42] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>[00:06:42] exwm-input--on-buffer-list-update:  current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:42] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:42] exwm-input--update-focus:    focus-window=#<window 3 on main.org> focus-buffer=main.org
[00:06:42] exwm-input--update-focus:    Focus on #<window 3 on main.org>
[00:06:42] exwm-input--set-active-window:   
[00:06:42] exwm-input--on-echo-area-dirty:  
[00:06:42] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:06:47] exwm-input--on-echo-area-clear:  
[00:06:47] exwm-input--on-buffer-list-update:   current-buffer=#<buffer  *Minibuf-1*> selected-window=#<window 4 on  *Minibuf-1*>
[00:06:47] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:47] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:47] exwm-layout--set-client-list-stacking:   
[00:06:47] exwm-input--on-minibuffer-setup: 
[00:06:47] exwm-layout--on-minibuffer-setup:    
[00:06:47] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:47] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:47] exwm-layout--set-client-list-stacking:   
[00:06:47] exwm-input--update-focus:    focus-window=#<window 4 on  *Minibuf-1*> focus-buffer= *Minibuf-1*
[00:06:47] exwm-input--update-focus:    Focus on #<window 4 on  *Minibuf-1*>
[00:06:47] exwm-input--set-active-window:   
[00:06:47] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:47] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:47] exwm-layout--set-client-list-stacking:   
[00:06:47] exwm-input--on-echo-area-dirty:  
[00:06:47] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:06:47] exwm-input--on-echo-area-dirty:  
[00:06:47] exwm-input--on-echo-area-dirty:  
[00:06:48] exwm-input--on-echo-area-dirty:  
[00:06:50] exwm-input--on-minibuffer-exit:  
[00:06:50] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:50] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:50] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:50] exwm-layout--set-client-list-stacking:   
[00:06:50] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:50] exwm-input--on-buffer-list-update:   current-buffer=#<buffer  *Minibuf-1*> selected-window=#<window 4 on  *Minibuf-1*>
[00:06:50] exwm-input--on-minibuffer-setup: 
[00:06:50] exwm-layout--on-minibuffer-setup:    
[00:06:50] exwm-input--update-focus:    focus-window=#<window 4 on  *Minibuf-1*> focus-buffer= *Minibuf-1*
[00:06:50] exwm-input--update-focus:    Focus on #<window 4 on  *Minibuf-1*>
[00:06:50] exwm-input--set-active-window:   
[00:06:50] exwm-input--on-echo-area-dirty:  
[00:06:50] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:06:50] exwm-input--on-echo-area-dirty:  
[00:06:50] exwm-input--on-echo-area-dirty:  
[00:06:50] exwm-input--on-echo-area-dirty:  
[00:06:51] exwm-input--on-echo-area-dirty:  
[00:06:51] exwm-input--on-echo-area-dirty:  
[00:06:51] exwm-input--on-echo-area-dirty:  
[00:06:51] exwm-input--on-echo-area-dirty:  
[00:06:51] exwm-input--on-echo-area-dirty:  
[00:06:52] exwm-input--on-echo-area-dirty:  
[00:06:52] exwm-input--on-echo-area-dirty:  
[00:06:52] exwm-input--on-echo-area-dirty:  
[00:06:52] exwm-input--on-minibuffer-exit:  
[00:06:52] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:52] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:52] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:52] exwm-layout--set-client-list-stacking:   
[00:06:52] exwm-input--update-focus:    focus-window=#<window 3 on main.org> focus-buffer=main.org
[00:06:52] exwm-input--update-focus:    Focus on #<window 3 on main.org>
[00:06:52] exwm-input--set-active-window:   
[00:06:52] exwm-input--on-echo-area-dirty:  
[00:06:52] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:06:54] exwm--on-ClientMessage:  atom=_NET_WM_STATE(332)
[00:06:54] exwm--on-ClientMessage:  atom=_NET_WM_STATE(332)
[00:06:54] exwm--on-ClientMessage:  atom=_NET_WM_STATE(332)
[00:06:54] exwm-manage--on-MapRequest:  id=#xe00033 parent=#x106
[00:06:54] exwm-manage--on-MapRequest:  #xe00033
[00:06:54] exwm-manage--manage-window:  Try to manage #xe00033
[00:06:54] exwm--update-window-type:    #xe00033
[00:06:54] exwm--update-class:  #xe00033
[00:06:54] exwm--update-transient-for:  #xe00033
[00:06:54] exwm--update-normal-hints:   #xe00033
[00:06:54] exwm--update-hints:  #xe00033
[00:06:54] exwm-manage--update-geometry:    id=#xe00033
[00:06:54] exwm-manage--update-mwm-hints:   id=#xe00033
[00:06:54] exwm--update-title:  #xe00033
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm--update-protocols:  #xe00033
[00:06:54] exwm-manage--get-configurations: 
[00:06:54] exwm-manage--manage-window:  Manage #xe00033
[00:06:54] exwm-manage--set-client-list:    
[00:06:54] exwm-floating--unset-floating:   #xe00033
[00:06:54] exwm-floating--set-allowed-actions:  #xe00033
[00:06:54] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:54] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:54] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:54] exwm-layout--show:   Show #xe00033 in #<window 3 on *EXWM*<2>>
[00:06:54] exwm--set-geometry:  Setting #xe00033 to 1440x863+0+0
[00:06:54] exwm-layout--set-state:  id=#xe00033
[00:06:54] exwm-layout--set-client-list-stacking:   
[00:06:54] exwm-input--on-buffer-list-update:   current-buffer=#<buffer *EXWM*<2>> selected-window=#<window 3 on *EXWM*<2>>
[00:06:54] exwm-input-grab-keyboard:    id=#xe00033
[00:06:54] exwm-input--grab-keyboard:   id=#xe00033
[00:06:54] exwm-input--update-mode-line:    #xe00033
[00:06:54] exwm--update-desktop:    #xe00033
[00:06:54] exwm-workspace--set-desktop: #xe00033
[00:06:54] exwm-manage--update-ewmh-state:  id=#xe00033
[00:06:54] exwm-layout-set-fullscreen:  id=#xe00033
[00:06:54] exwm--set-geometry:  Setting #xe00033 to 1440x900+0+0
[00:06:54] exwm-input--release-keyboard:    id=#xe00033
[00:06:54] exwm-input--grab-global-prefix-keys: 
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_ALLOWED_ACTIONS(446)
[00:06:54] exwm--on-PropertyNotify: Unhandled: _NET_WM_ALLOWED_ACTIONS(446)
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm-manage--on-MapNotify:   id=#xe00033
[00:06:54] exwm--on-PropertyNotify: atom=WM_STATE(413)
[00:06:54] exwm--on-PropertyNotify: Unhandled: WM_STATE(413)
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_DESKTOP(326)
[00:06:54] exwm--on-PropertyNotify: Unhandled: _NET_WM_DESKTOP(326)
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_STATE(332)
[00:06:54] exwm--on-PropertyNotify: Unhandled: _NET_WM_STATE(332)
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm-input--update-focus:    focus-window=#<window 3 on *EXWM*<2>> focus-buffer=*EXWM*<2>
[00:06:54] exwm-input--update-focus:    Set focus on #xe00033
[00:06:54] exwm-input--set-focus:   id=#xe00033
[00:06:54] exwm-input--update-timestamp:    
[00:06:54] exwm--on-PropertyNotify: atom=_TIME(474)
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm-input--set-active-window:   
[00:06:54] exwm-input--on-echo-area-dirty:  
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NORMAL_HINTS(40)
[00:06:54] exwm--update-normal-hints:   #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:54] exwm--update-utf8-title: #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:54] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:54] exwm--update-ctext-title:    #xe00033
[00:06:54] exwm-input--on-PropertyNotify:   
[00:06:55] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:55] exwm--update-utf8-title: #xe00033
[00:06:55] exwm-input--on-PropertyNotify:   
[00:06:55] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:55] exwm--update-ctext-title:    #xe00033
[00:06:55] exwm-input--on-PropertyNotify:   
[00:06:55] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:55] exwm--update-utf8-title: #xe00033
[00:06:55] exwm-input--on-PropertyNotify:   
[00:06:55] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:55] exwm--update-ctext-title:    #xe00033
[00:06:55] exwm-input--on-PropertyNotify:   
[00:06:55] exwm--on-PropertyNotify: atom=_NET_WM_NAME(329)
[00:06:55] exwm--update-utf8-title: #xe00033
[00:06:55] exwm-input--on-PropertyNotify:   
[00:06:55] exwm--on-PropertyNotify: atom=WM_NAME(39)
[00:06:55] exwm--update-ctext-title:    #xe00033
[00:06:55] exwm-input--on-PropertyNotify:   
[00:06:57] exwm--on-PropertyNotify: atom=_NET_WM_USER_TIME(355)
[00:06:57] exwm-input--on-PropertyNotify:   
[00:06:57] exwm--on-PropertyNotify: atom=_NET_WM_USER_TIME(355)
[00:06:57] exwm-input--on-PropertyNotify:   
[00:06:58] exwm--on-PropertyNotify: atom=_NET_WM_USER_TIME(355)
[00:06:58] exwm-input--on-PropertyNotify:   
[00:06:59] exwm--on-PropertyNotify: atom=_NET_WM_USER_TIME(355)
[00:06:59] exwm-input--on-PropertyNotify:   
[00:06:59] exwm-manage--on-UnmapNotify: id=#xe00033
[00:06:59] exwm-manage--unmanage-window:    Unmanage #xe00033 (buffer: *EXWM*<2>, widthdraw: t)
[00:06:59] exwm-manage--set-client-list:    
[00:06:59] exwm-input--on-buffer-list-update:   current-buffer=#<buffer *EXWM*<2>> selected-window=#<window 3 on *EXWM*<2>>
[00:06:59] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:06:59] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:06:59] exwm-layout--set-client-list-stacking:   
[00:06:59] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:06:59] exwm-input--on-echo-area-dirty:  
[00:06:59] exwm-manage--on-UnmapNotify: id=#xe00033
[00:06:59] exwm-manage--unmanage-window:    Unmanage #xe00033 (buffer: nil, widthdraw: t)
[00:06:59] exwm-input--update-focus:    focus-window=#<window 3 on main.org> focus-buffer=main.org
[00:06:59] exwm-input--update-focus:    Focus on #<window 3 on main.org>
[00:06:59] exwm-input--set-active-window:   
[00:06:59] exwm-input--on-echo-area-dirty:  
[00:06:59] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:07:01] exwm-input--on-echo-area-dirty:  
[00:07:01] exwm-input--on-echo-area-dirty:  
[00:07:01] exwm-input--on-buffer-list-update:   current-buffer=#<buffer  *Minibuf-1*> selected-window=#<window 4 on  *Minibuf-1*>
[00:07:01] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:01] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:01] exwm-layout--set-client-list-stacking:   
[00:07:01] exwm-input--on-minibuffer-setup: 
[00:07:01] exwm-layout--on-minibuffer-setup:    
[00:07:01] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:01] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:01] exwm-layout--set-client-list-stacking:   
[00:07:01] exwm-input--update-focus:    focus-window=#<window 4 on  *Minibuf-1*> focus-buffer= *Minibuf-1*
[00:07:01] exwm-input--update-focus:    Focus on #<window 4 on  *Minibuf-1*>
[00:07:01] exwm-input--set-active-window:   
[00:07:01] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:01] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:01] exwm-layout--set-client-list-stacking:   
[00:07:01] exwm-input--on-echo-area-dirty:  
[00:07:01] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:07:04] exwm-input--on-minibuffer-exit:  
[00:07:04] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:07:04] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:04] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:04] exwm-layout--set-client-list-stacking:   
[00:07:04] exwm-input--update-focus:    focus-window=#<window 3 on main.org> focus-buffer=main.org
[00:07:04] exwm-input--update-focus:    Focus on #<window 3 on main.org>
[00:07:04] exwm-input--set-active-window:   
[00:07:04] exwm-input--on-echo-area-dirty:  
[00:07:04] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:07:04] exwm-input--on-echo-area-clear:  
[00:07:05] exwm-input--on-buffer-list-update:   current-buffer=#<buffer  *Minibuf-1*> selected-window=#<window 4 on  *Minibuf-1*>
[00:07:05] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:05] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:05] exwm-layout--set-client-list-stacking:   
[00:07:05] exwm-input--on-minibuffer-setup: 
[00:07:05] exwm-layout--on-minibuffer-setup:    
[00:07:05] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:05] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:05] exwm-layout--set-client-list-stacking:   
[00:07:05] exwm-input--update-focus:    focus-window=#<window 4 on  *Minibuf-1*> focus-buffer= *Minibuf-1*
[00:07:05] exwm-input--update-focus:    Focus on #<window 4 on  *Minibuf-1*>
[00:07:05] exwm-input--set-active-window:   
[00:07:05] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:05] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:05] exwm-layout--set-client-list-stacking:   
[00:07:05] exwm-input--on-echo-area-dirty:  
[00:07:05] exwm--on-ClientMessage:  atom=_NET_ACTIVE_WINDOW(321)
[00:07:06] exwm-input--on-echo-area-dirty:  
[00:07:07] exwm-input--on-minibuffer-exit:  
[00:07:07] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
[00:07:07] exwm-layout--refresh:    frame=#<frame emacs@arch 0x1227c30>
[00:07:07] exwm-layout--refresh-workspace:  Refresh workspace #<frame emacs@arch 0x1227c30>
[00:07:07] exwm-layout--set-client-list-stacking:   
[00:07:07] exwm-input--on-buffer-list-update:   current-buffer=#<buffer main.org> selected-window=#<window 3 on main.org>
ch11ng commented 5 years ago

I noticed in the log it's made full screen on startup. Is that what you meant with 'not controlled by EXWM'? If this is the case then you can exit the full screen state with whatever key binding exwm-reset, or simply configure this program not to start in full screen mode.

Luis-Henriquez-Perez commented 5 years ago

Is that what you meant with 'not controlled by EXWM'?

That's part of it, but what I mean is it doesn't seem to be in line mode when it starts. After it's fullscreen and I type M-x emacs does not intercept the command. This is why I suspect it's not being captured.

ch11ng commented 5 years ago

That's part of it, but what I mean is it doesn't seem to be in line mode when it starts.

Because it asked EXWM to put it into full screen mode on start.

After it's fullscreen and I type M-x emacs does not intercept the command.

Full screen X windows are treated as in char-mode so no mode-line, no M-x...

Luis-Henriquez-Perez commented 5 years ago

Thank you for your help. I used this code to make sure it starts in line-mode. I may configure qutebrowser not to do this by default too. But I like the fact that I could do it in Emacs instead.

(defvar +exwm-initial-mode-alist '((t . line-mode)))

(push '((string-prefix-p "qutebrowser" exwm-instance-name) . line-mode)
      +exwm-initial-mode-alist)

(defhook! +exwm|start-in-char-mode ()
  "Decide whether to start program in char mode."
  :hook exwm-manage-finish-hook
  (-first (-lambda ((pred . mode))
            (when (funcall `(lambda () ,pred))
              (if (eq mode 'char-mode)
                  (exwm-input-release-keyboard (exwm--buffer->id (window-buffer)))
                (exwm-reset))))
          +exwm-initial-mode-alist))