;; Time-stamp: <2020-03-24 10:11:51 (tslil@bison)> (defun adjust-volume (mixer adjust) (let ((tail " | tail -n 1") (sed (concat " | sed 's/.*\\[\\([0-9]*.\\)\\] " "\\[.*dB\\] \\[\\(.*\\)\\]$/" mixer " \\1 \\2/'"))) (shell-command (concat (cond ((string-equal "+" adjust) (concat "amixer set " mixer " 2%+")) ((string-equal "-" adjust) (concat "amixer set " mixer " 2%-")) (t (concat "amixer set " mixer " toggle"))) tail sed)))) (defun banish-rat () (interactive) (shell-command "xdotool mousemove 1280 800") (message "Rat banished.")) (use-package exwm :if (window-system) :ensure t :demand :config (setq exwm-workspace-number 1 exwm-workspace-switch-create-limit 5 exwm-workspace-show-all-buffers nil) (add-hook 'exwm-update-class-hook (lambda () (exwm-workspace-rename-buffer exwm-class-name))) ;; ------------------------------------------------------------------- ;; Global key binds (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-s] . [C-f]) ;;([?\C-d] . [delete]) ;;([?\C-k] . [S-end delete]) )) ;; IME (defvar exwm-workman-intl t) (defun exwm-toggle-intl-ime () (interactive) (let ((result (call-process-shell-command (concat "setxkbmap -layout us -variant workman" (if exwm-workman-intl "-intl" "") " -option terminate:ctrl_alt_bksp -option ctrl:nocaps")))) (if (not (= 0 result)) (message "Unable to switch keyboard layouts.") (message (concat (if exwm-workman-intl "INTERNATIONAL" "STANDARD") " layout selected.")) (setq exwm-workman-intl (not exwm-workman-intl))))) (exwm-input-set-key (kbd "s-i") 'exwm-toggle-intl-ime) ;; reset (exwm-input-set-key (kbd "s-r") 'exwm-reset) ;; workspaces (exwm-input-set-key (kbd "s-e") 'exwm-workspace-switch) (dotimes (i 10) (exwm-input-set-key (kbd (format "s-%d" i)) `(lambda () (interactive) (exwm-workspace-switch-create ,i)))) ;; buffer and window management (exwm-input-set-key (kbd "s-") 'next-buffer) (defvar exwm-last-workspace-index 0) (defun exwm-last-workspace () (interactive) (let ((temp exwm-workspace-current-index)) (exwm-workspace-switch exwm-last-workspace-index) (setq exwm-last-workspace-index temp))) (defun exwm-last-buffer () (interactive) (switch-to-buffer (other-buffer (current-buffer) 1))) (exwm-input-set-key (kbd "s-n") 'ivy-switch-buffer) (exwm-input-set-key (kbd "s-o") 'exwm-last-buffer) (exwm-input-set-key (kbd "s-\\") 'exwm-last-workspace) (exwm-input-set-key (kbd "s-b") 'banish-rat) ;; run command (exwm-input-set-key (kbd "s-c") (lambda () (interactive) (start-process "" nil "st"))) (exwm-input-set-key (kbd "s-q") (lambda () (interactive) (start-process "" nil "iceweasel"))) (exwm-input-set-key (kbd "s-") (lambda () (interactive) (start-process "" nil "lock"))) (exwm-input-set-key (kbd "s-p") (lambda (command) (interactive (list (read-shell-command "$ "))) (start-process-shell-command command nil command))) ;; Volume (exwm-input-set-key (kbd "") (lambda () (interactive) (adjust-volume "Master" "+"))) (exwm-input-set-key (kbd "") (lambda () (interactive) (adjust-volume "Master" "-"))) (exwm-input-set-key (kbd "") (lambda () (interactive) (adjust-volume "Master" "toggle"))) (exwm-input-set-key (kbd "S-") (lambda () (interactive) (adjust-volume "Headphone" "+"))) (exwm-input-set-key (kbd "S-") (lambda () (interactive) (adjust-volume "Headphone" "-"))) (exwm-input-set-key (kbd "S-") (lambda () (interactive) (adjust-volume "Headphone" "toggle"))) ;; ------------------------------------------------------------------- ;; RandR (require 'exwm-randr) (exwm-randr-enable) (setq exwm-randr-workspace-monitor-plist '(1 "LVDS1" 0 "VGA1")) (exwm-enable)) ;; ----------------------------------------------------------------------------- ;; EXWM-edit (use-package exwm-edit :ensure t :config (add-hook 'exwm-edit-compose-hook (lambda () (text-mode))))