Skip to content

switch-window-multiple-frames returns error in EXWM #82

@emysliwietz

Description

@emysliwietz

I am using switch-window in Emacs 27.1 under EXWM with two frames, spanning two monitors.
My configuration is as follows:

(use-package switch-window
  :ensure t
  :defer t
  :config
  (setq switch-window-multiple-frames nil)
  (setq switch-window-input-style 'minibuffer)
  (setq switch-window-increase 4)
  (setq switch-window-threshold 2)
  (setq switch-window-shortcut-style 'qwerty)
  (setq switch-window-qwerty-shortcuts
	'("j" "k" "l" "a" "s" "d" "f")) ; ö does not work without pressing RET
  :bind
  ([remap other-window] . switch-window))

If I change the first config line into

  (setq switch-window-multiple-frames t)

and subsequently call C-x o (switch-window), (using the debug-on-error variable) the first monitor's frame populates with labels as it should
image
No labels appear on the second monitor, pressing the key associated to a label does nothing (because the debugger is trapping input, I guess).

The stack trace looks as follows:

Debugger entered--Lisp error: (wrong-type-argument stringp nil)
  propertize(nil face switch-window-label)
  (insert (propertize label 'face 'switch-window-label))
  (cond ((eq switch-window-shortcut-appearance 'asciiart) (setq line-spacing nil) (insert (replace-regexp-in-string "^\n" "" (nth (cl-position label (remove "" (split-string "123456789abcdefjhijklmnopqrstuvwxyz" "")) :test #'equal) switch-window-asciiart)))) ((eq switch-window-shortcut-appearance 'text) (insert (propertize label 'face 'switch-window-label))) ((eq switch-window-shortcut-appearance 'image) (let ((types (cl-copy-seq image-types)) file) (while types (let* ((type (car-safe ...)) (file1 (format "%s%s.%S" ... label type))) (if (file-exists-p file1) (progn (setq file file1) (setq types nil))))) (if (and file (display-images-p)) (insert-image-file (expand-file-name file)) (insert (propertize label 'face 'switch-window-label))))))
  (save-current-buffer (set-buffer buffer) (if switch-window-background (progn (insert background) (goto-char (point-min)))) (cond ((eq switch-window-shortcut-appearance 'asciiart) (setq line-spacing nil) (insert (replace-regexp-in-string "^\n" "" (nth (cl-position label (remove "" ...) :test #'equal) switch-window-asciiart)))) ((eq switch-window-shortcut-appearance 'text) (insert (propertize label 'face 'switch-window-label))) ((eq switch-window-shortcut-appearance 'image) (let ((types (cl-copy-seq image-types)) file) (while types (let* ((type ...) (file1 ...)) (if (file-exists-p file1) (progn ... ...)))) (if (and file (display-images-p)) (insert-image-file (expand-file-name file)) (insert (propertize label 'face 'switch-window-label)))))) (insert " ") (goto-char (point-min)) (set (make-local-variable 'buffer-read-only) t) (set (make-local-variable 'show-trailing-whitespace) nil) buffer)
  switch-window--create-label-buffer(#<window 15 on *scratch*> #<buffer  *nil: *scratch**> nil "")
  switch-window--display-number(#<window 15 on *scratch*> 5)
  switch-window--prompt("Move to window: ")
  switch-window--then("Move to window: " switch-window--other-window-or-frame)
  switch-window()
  funcall-interactively(switch-window)
  call-interactively(switch-window nil nil)
  command-execute(switch-window)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions