123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- (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]))))
-
- (if (file-exists-p "~/.exwm-work")
- (progn
- (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")))
- (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)
|