diff --git a/.emacs.d/desktop.el b/.emacs.d/desktop.el index 341b620..6ce5b02 100644 --- a/.emacs.d/desktop.el +++ b/.emacs.d/desktop.el @@ -123,9 +123,7 @@ _v_: VK _s_: Slack _d_: Discord " - ("t" (lambda () (interactive) - (persp-switch "term") - (my/run-in-background "alacritty"))) + ("t" (lambda () (interactive) (my/run-in-background "alacritty"))) ("b" (lambda () (interactive) (my/run-in-background "firefox"))) ("v" (lambda () (interactive) (my/run-in-background "vk"))) ("s" (lambda () (interactive) (my/run-in-background "slack-wrapper"))) @@ -135,6 +133,23 @@ _d_: Discord (interactive) (my/run-in-background "i3lock -f -i /home/pavel/Pictures/lock-wallpaper.png")) +(defun my/exwm-configure-window () + (interactive) + (pcase exwm-class-name + ((or "Firefox" "Nightly") + (perspective-exwm-assign-window + :workspace-index 2 + :persp-name "browser")) + ("Alacritty" + (perspective-exwm-assign-window + :persp-name "term")) + ((or "VK" "Slack" "Discord" "TelegramDesktop") + (perspective-exwm-assign-window + :workspace-index 3 + :persp-name "comms")))) + +(add-hook 'exwm-manage-finish-hook #'my/exwm-configure-window) + (defun my/exwm-update-global-keys () (interactive) (setq exwm-input--global-keys nil) @@ -143,6 +158,13 @@ _d_: Discord (when exwm--connection (exwm-input--update-global-prefix-keys))) +(defun my/fix-exwm-floating-windows () + (setq-local exwm-workspace-warp-cursor nil) + (setq-local mouse-autoselect-window nil) + (setq-local focus-follows-mouse nil)) + +(add-hook 'exwm-floating-setup-hook #'my/fix-exwm-floating-windows) + (defun my/exwm-init () (exwm-workspace-switch 1) @@ -206,11 +228,11 @@ _d_: Discord (general-define-key :keymaps '(exwm-mode-map) - "C-q" 'exwm-input-send-next-key + "C-q" #'exwm-input-send-next-key "" (my/app-command "flameshot gui") - " s-" 'perspective-exwm-cycle-exwm-buffers-backward - " s-" 'perspective-exwm-cycle-exwm-buffers-forward - "M-x" 'counsel-M-x + " s-" #'perspective-exwm-cycle-exwm-buffers-backward + " s-" #'perspective-exwm-cycle-exwm-buffers-forward + "M-x" #'counsel-M-x "M-SPC" (general-key "SPC")) (setq exwm-input-simulation-keys `((,(kbd "M-w") . ,(kbd "C-w")) (,(kbd "M-c") . ,(kbd "C-c")))) diff --git a/Desktop.org b/Desktop.org index 835bd12..b34dfe0 100644 --- a/Desktop.org +++ b/Desktop.org @@ -527,9 +527,7 @@ _v_: VK _s_: Slack _d_: Discord " - ("t" (lambda () (interactive) - (persp-switch "term") - (my/run-in-background "alacritty"))) + ("t" (lambda () (interactive) (my/run-in-background "alacritty"))) ("b" (lambda () (interactive) (my/run-in-background "firefox"))) ("v" (lambda () (interactive) (my/run-in-background "vk"))) ("s" (lambda () (interactive) (my/run-in-background "slack-wrapper"))) @@ -543,6 +541,27 @@ Run i3lock. (interactive) (my/run-in-background "i3lock -f -i /home/pavel/Pictures/lock-wallpaper.png")) #+end_src +*** Auto-assign apps +A function to automatially assign an app to its designated workspace and perspective. + +#+begin_src emacs-lisp +(defun my/exwm-configure-window () + (interactive) + (pcase exwm-class-name + ((or "Firefox" "Nightly") + (perspective-exwm-assign-window + :workspace-index 2 + :persp-name "browser")) + ("Alacritty" + (perspective-exwm-assign-window + :persp-name "term")) + ((or "VK" "Slack" "Discord" "TelegramDesktop") + (perspective-exwm-assign-window + :workspace-index 3 + :persp-name "comms")))) + +(add-hook 'exwm-manage-finish-hook #'my/exwm-configure-window) +#+end_src ** Keybindings Setting keybindings for EXWM. This actually has to be in the =:config= block of the =use-package= form, that is it has to be run after EXWM is loaded, so I use noweb to put this block in the correct place. @@ -693,6 +712,15 @@ A function to apply changes to =exwm-input-global-keys=. (backtrace) (buffer-string)))))) #+end_src +*** Improve floating windows behavior +#+begin_src emacs-lisp +(defun my/fix-exwm-floating-windows () + (setq-local exwm-workspace-warp-cursor nil) + (setq-local mouse-autoselect-window nil) + (setq-local focus-follows-mouse nil)) + +(add-hook 'exwm-floating-setup-hook #'my/fix-exwm-floating-windows) +#+end_src ** EXWM config And the EXWM config itself.