First off, I want to thank this community for all the help I have gotten both through explicitly asking questions and just through watching others questoins.
Main point:
I recently switched to EXWM because its awesome. I found some rough edges that I have been trying to smooth out and wanted to share a particularly simple one.
The EXWM wiki suggets merging framemove with windmove to move between workspaces on two different monitors. I found that framemove considers not just visible workspaces but also inactive (invisible) workspaces. Imagine the following setup
Monitor 1: assigned workspaces 0 and 1; currently showing workspace 1
Monitor 2: assigned workspaces 2; currently showing monitor 2. Focus is on workspace 2.
Trying to move across frames using framemove could actually cause focus to not just switch to monitor 1 but also monitor 1 to change from showing workspace 1 to workspace 0.
Turns out it was pretty simple to modify framemove to restrict to only considering currently active frames using the predicate function `exwm-workspace--active-p`.
In case anyone else runs into this issue take a look at my forked version of framemove: https://github.com/jsilve24/framemove.
Honestly, it seems rediculous that I forked this repo since my contribution is essentially nil. That said, I really wasn't sure a better way since the original library is on the emacswiki and also maintained by the emacsmirror github user.
That said, hope this helps someone else.
Cheers.