Created
March 5, 2018 14:47
-
-
Save asconix/0d79e9247a7b546f28153cb75a1ccb66 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; Disable menu-bar, tool-bar and scroll-bar to increase the usable space. | |
(menu-bar-mode -1) | |
(tool-bar-mode -1) | |
(scroll-bar-mode -1) | |
;; Also shrink fringes to 1 pixel. | |
(fringe-mode 1) | |
;; Turn on `display-time-mode' if you don't use an external bar. | |
(setq display-time-default-load-average nil) | |
(display-time-mode t) | |
;; You are strongly encouraged to enable something like `ido-mode' to alter | |
;; the default behavior of 'C-x b', or you will take great pains to switch | |
;; to or back from a floating frame (remember 'C-x 5 o' if you refuse this | |
;; proposal however). | |
;; You may also want to call `exwm-config-ido' later (see below). | |
(ido-mode 1) | |
;; Emacs server is not required to run EXWM but it has some interesting uses | |
;; (see next section). | |
(server-start) | |
;;;; Below are configurations for EXWM. | |
;; Add paths (not required if EXWM is installed from GNU ELPA). | |
;(add-to-list 'load-path "/path/to/xelb/") | |
;(add-to-list 'load-path "/path/to/exwm/") | |
;; Load EXWM. | |
(require 'exwm) | |
;; Fix problems with Ido (if you use it). | |
(require 'exwm-config) | |
(exwm-config-ido) | |
;; Set the initial number of workspaces (they can also be created later). | |
(setq exwm-workspace-number 4) | |
;; All buffers created in EXWM mode are named "*EXWM*". You may want to | |
;; change it in `exwm-update-class-hook' and `exwm-update-title-hook', which | |
;; are run when a new X window class name or title is available. Here's | |
;; some advice on this topic: | |
;; + Always use `exwm-workspace-rename-buffer` to avoid naming conflict. | |
;; + For applications with multiple windows (e.g. GIMP), the class names of | |
; all windows are probably the same. Using window titles for them makes | |
;; more sense. | |
;; In the following example, we use class names for all windows expect for | |
;; Java applications and GIMP. | |
(add-hook 'exwm-update-class-hook | |
(lambda () | |
(unless (or (string-prefix-p "sun-awt-X11-" exwm-instance-name) | |
(string= "gimp" exwm-instance-name)) | |
(exwm-workspace-rename-buffer exwm-class-name)))) | |
(add-hook 'exwm-update-title-hook | |
(lambda () | |
(when (or (not exwm-instance-name) | |
(string-prefix-p "sun-awt-X11-" exwm-instance-name) | |
(string= "gimp" exwm-instance-name)) | |
(exwm-workspace-rename-buffer exwm-title)))) | |
;; Global keybindings can be defined with `exwm-input-global-keys'. | |
;; Here are a few examples: | |
(setq exwm-input-global-keys | |
`( | |
;; Bind "s-r" to exit char-mode and fullscreen mode. | |
([?\s-r] . exwm-reset) | |
;; Bind "s-w" to switch workspace interactively. | |
([?\s-w] . exwm-workspace-switch) | |
;; Bind "s-0" to "s-9" to switch to a workspace by its index. | |
,@(mapcar (lambda (i) | |
`(,(kbd (format "s-%d" i)) . | |
(lambda () | |
(interactive) | |
(exwm-workspace-switch-create ,i)))) | |
(number-sequence 0 9)) | |
;; Bind "s-&" to launch applications ('M-&' also works if the output | |
;; buffer does not bother you). | |
([?\s-&] . (lambda (command) | |
(interactive (list (read-shell-command "$ "))) | |
(start-process-shell-command command nil command))) | |
;; Bind "s-<f2>" to "slock", a simple X display locker. | |
([s-f2] . (lambda () | |
(interactive) | |
(start-process "" nil "/usr/bin/slock"))))) | |
;; To add a key binding only available in line-mode, simply define it in | |
;; `exwm-mode-map'. The following example shortens 'C-c q' to 'C-q'. | |
(define-key exwm-mode-map [?\C-q] #'exwm-input-send-next-key) | |
;; The following example demonstrates how to use simulation keys to mimic | |
;; the behavior of Emacs. The value of `exwm-input-simulation-keys` is a | |
;; list of cons cells (SRC . DEST), where SRC is the key sequence you press | |
;; and DEST is what EXWM actually sends to application. Note that both SRC | |
;; and DEST should be key sequences (vector or string). | |
(setq exwm-input-simulation-keys | |
'( | |
;; movement | |
([?\C-b] . [left]) | |
([?\M-b] . [C-left]) | |
([?\C-f] . [right]) | |
([?\M-f] . [C-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]) | |
;; cut/paste. | |
([?\C-w] . [?\C-x]) | |
([?\M-w] . [?\C-c]) | |
([?\C-y] . [?\C-v]) | |
;; search | |
([?\C-s] . [?\C-f]))) | |
;; You can hide the minibuffer and echo area when they're not used, by | |
;; uncommenting the following line. | |
;(setq exwm-workspace-minibuffer-position 'bottom) | |
;; Do not forget to enable EXWM. It will start by itself when things are | |
;; ready. You can put it _anywhere_ in your configuration. | |
(exwm-enable) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment