|
@@ -0,0 +1,110 @@
|
|
|
+(require 'exwm)
|
|
|
+(require 'ido)
|
|
|
+
|
|
|
+(define-obsolete-function-alias 'exwm-config-default
|
|
|
+ #'exwm-config-example "27.1")
|
|
|
+
|
|
|
+(defun exwm-config-spw ()
|
|
|
+ "Default configuration of EXWM."
|
|
|
+ ;; Set the initial workspace number.
|
|
|
+ (unless (get 'exwm-workspace-number 'saved-value)
|
|
|
+ (setq exwm-workspace-number 4))
|
|
|
+ ;; Make class name the buffer name
|
|
|
+ (add-hook 'exwm-update-class-hook
|
|
|
+ (lambda ()
|
|
|
+ (exwm-workspace-rename-buffer exwm-class-name)))
|
|
|
+ ;; Global keybindings.
|
|
|
+ (unless (get 'exwm-input-global-keys 'saved-value)
|
|
|
+ (setq exwm-input-global-keys
|
|
|
+ `(
|
|
|
+ ;; 's-r': Reset (to line-mode).
|
|
|
+ ([?\s-r] . exwm-reset)
|
|
|
+ ;; 's-w': Switch workspace.
|
|
|
+ ([?\s-w] . exwm-workspace-switch)
|
|
|
+ ;; 's-&': Launch application.
|
|
|
+ ([?\s-&] . (lambda (command)
|
|
|
+ (interactive (list (read-shell-command "$ ")))
|
|
|
+ (start-process-shell-command command nil command)))
|
|
|
+ ;; 's-N': Switch to certain workspace.
|
|
|
+ ,@(mapcar (lambda (i)
|
|
|
+ `(,(kbd (format "s-%d" i)) .
|
|
|
+ (lambda ()
|
|
|
+ (interactive)
|
|
|
+ (exwm-workspace-switch-create ,i))))
|
|
|
+ (number-sequence 0 9)))))
|
|
|
+ ;; Line-editing shortcuts
|
|
|
+ (unless (get 'exwm-input-simulation-keys 'saved-value)
|
|
|
+ (setq exwm-input-simulation-keys
|
|
|
+ '(([?\C-b] . [left])
|
|
|
+ ([?\C-f] . [right])
|
|
|
+ ([?\C-p] . [up])
|
|
|
+ ([?\C-n] . [down])
|
|
|
+ ([?\C-a] . [home])
|
|
|
+ ([?\C-e] . [end])
|
|
|
+ ([?\M-v] . [prior])
|
|
|
+ ([?\C-v] . [next])
|
|
|
+ ([?\C-d] . [delete])
|
|
|
+ ([?\C-k] . [S-end delete]))))
|
|
|
+
|
|
|
+ (require 'exwm-randr)
|
|
|
+ (setq exwm-randr-workspace-output-plist
|
|
|
+ '(0 "DisplayPort-0" 1 "DVI-0"))
|
|
|
+ (add-hook 'exwm-randr-screen-change-hook
|
|
|
+ (lambda ()
|
|
|
+ (start-process-shell-command
|
|
|
+ "xrandr" nil "xrandr --output DisplayPort-0 --below DVI-0 --auto")))
|
|
|
+ (exwm-randr-enable)
|
|
|
+
|
|
|
+ ;; Enable EXWM
|
|
|
+ (exwm-enable)
|
|
|
+ ;; Configure Ido
|
|
|
+ (exwm-config-ido)
|
|
|
+ ;; Other configurations
|
|
|
+ (exwm-config-misc))
|
|
|
+
|
|
|
+(defun exwm-config--fix/ido-buffer-window-other-frame ()
|
|
|
+ "Fix `ido-buffer-window-other-frame'."
|
|
|
+ (defalias 'exwm-config-ido-buffer-window-other-frame
|
|
|
+ (symbol-function #'ido-buffer-window-other-frame))
|
|
|
+ (defun ido-buffer-window-other-frame (buffer)
|
|
|
+ "This is a version redefined by EXWM.
|
|
|
+You can find the original one at `exwm-config-ido-buffer-window-other-frame'."
|
|
|
+ (with-current-buffer (window-buffer (selected-window))
|
|
|
+ (if (and (derived-mode-p 'exwm-mode)
|
|
|
+ exwm--floating-frame)
|
|
|
+ ;; Switch from a floating frame.
|
|
|
+ (with-current-buffer buffer
|
|
|
+ (if (and (derived-mode-p 'exwm-mode)
|
|
|
+ exwm--floating-frame
|
|
|
+ (eq exwm--frame exwm-workspace--current))
|
|
|
+ ;; Switch to another floating frame.
|
|
|
+ (frame-root-window exwm--floating-frame)
|
|
|
+ ;; Do not switch if the buffer is not on the current workspace.
|
|
|
+ (or (get-buffer-window buffer exwm-workspace--current)
|
|
|
+ (selected-window))))
|
|
|
+ (with-current-buffer buffer
|
|
|
+ (when (derived-mode-p 'exwm-mode)
|
|
|
+ (if (eq exwm--frame exwm-workspace--current)
|
|
|
+ (when exwm--floating-frame
|
|
|
+ ;; Switch to a floating frame on the current workspace.
|
|
|
+ (frame-selected-window exwm--floating-frame))
|
|
|
+ ;; Do not switch to exwm-mode buffers on other workspace (which
|
|
|
+ ;; won't work unless `exwm-layout-show-all-buffers' is set)
|
|
|
+ (unless exwm-layout-show-all-buffers
|
|
|
+ (selected-window)))))))))
|
|
|
+
|
|
|
+(defun exwm-config-ido ()
|
|
|
+ "Configure Ido to work with EXWM."
|
|
|
+ (ido-mode 1)
|
|
|
+ (add-hook 'exwm-init-hook #'exwm-config--fix/ido-buffer-window-other-frame))
|
|
|
+
|
|
|
+(defun exwm-config-misc ()
|
|
|
+ "Other configurations."
|
|
|
+ ;; Make more room
|
|
|
+ (menu-bar-mode -1)
|
|
|
+ (tool-bar-mode -1)
|
|
|
+ (scroll-bar-mode -1)
|
|
|
+ (fringe-mode 1))
|
|
|
+
|
|
|
+
|
|
|
+(provide 'exwm-config-spw)
|