about summary refs log tree commit diff
diff options
context:
space:
mode:
authorChris Feng <chris.w.feng@gmail.com>2015-10-28T10·55+0800
committerChris Feng <chris.w.feng@gmail.com>2015-10-28T10·57+0800
commit34d588599d2d7ef46db6a810c1549199f78cf8ba (patch)
treed2809f36c2d06bde937fd48664caf079b8a50822
parent2779d2e418bb07adf0408dc8fdaa0fb6e88bf13a (diff)
Add demo configurations
* exwm-config.el: Demo EXWM configurations.
* xinitrc: Demo xinitrc file.
* exwm.el (exwm-enable-ido-workaround, exwm-disable-ido-workaround): Partly
  moved to exwm-config.el.
-rw-r--r--exwm-config.el101
-rw-r--r--exwm.el45
-rw-r--r--xinitrc14
3 files changed, 122 insertions, 38 deletions
diff --git a/exwm-config.el b/exwm-config.el
new file mode 100644
index 000000000000..7f02303e2321
--- /dev/null
+++ b/exwm-config.el
@@ -0,0 +1,101 @@
+;;; exwm-config.el --- Predefined configurations  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2015 Free Software Foundation, Inc.
+
+;; Author: Chris Feng <chris.w.feng@gmail.com>
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; This module contains typical (yet minimal) configurations of EXWM.
+
+;;; Code:
+
+(require 'exwm)
+
+(defun exwm-config-default ()
+  "Default configuration of EXWM."
+  ;; Make class name the buffer name
+  (add-hook 'exwm-update-class-hook
+            (lambda ()
+              (exwm-workspace-rename-buffer exwm-class-name)))
+  ;; 's-r': Reset
+  (exwm-input-set-key (kbd "s-r") #'exwm-reset)
+  ;; 's-w': Switch workspace
+  (exwm-input-set-key (kbd "s-w") #'exwm-workspace-switch)
+  ;; 's-N': Switch to certain workspace
+  (dotimes (i exwm-workspace-number)
+    (exwm-input-set-key (kbd (format "s-%d" i))
+                        `(lambda () (interactive) (exwm-workspace-switch ,i))))
+  ;; 's-&': Launch application
+  (exwm-input-set-key (kbd "s-&")
+                      (lambda (command)
+                        (interactive (list (read-shell-command "$ ")))
+                        (start-process-shell-command command nil command)))
+  ;; Line-editing shortcuts
+  (exwm-input-set-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)))
+  ;; Enable EXWM
+  (exwm-enable)
+  ;; Configure Ido
+  (exwm-config-ido)
+  ;; Other configurations
+  (exwm-config-misc))
+
+(defun exwm-config--ido-buffer-window-other-frame (orig-fun buffer)
+  "Wrapper for `ido-buffer-window-other-frame' to exclude invisible windows."
+  (with-current-buffer buffer
+    (if (and (eq major-mode 'exwm-mode)
+             (or exwm--floating-frame
+                 (not exwm-layout-show-all-buffers)))
+        ;; `ido-mode' works well with `exwm-mode' buffers
+        (funcall orig-fun buffer)
+      ;; Other buffers should be selected within the same workspace
+      (get-buffer-window buffer exwm-workspace--current))))
+
+(defun exwm-config--fix/ido-buffer-window-other-frame ()
+  "Fix `ido-buffer-window-other-frame'."
+  (advice-add 'ido-buffer-window-other-frame :around
+              #'exwm-config--ido-buffer-window-other-frame))
+
+(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)
+  ;; Disable dialog boxes
+  (setq use-dialog-box nil))
+
+
+
+(provide 'exwm-config)
+
+;; exwm-config.el ends here
diff --git a/exwm.el b/exwm.el
index b5d246ed40b8..ba71e32ab6e4 100644
--- a/exwm.el
+++ b/exwm.el
@@ -43,22 +43,10 @@
 ;; 2. In '~/.emacs', add following lines (please modify accordingly):
 ;;
 ;;    (require 'exwm)
-;;    ;; We always need a way to go back from char-mode to line-mode
-;;    (exwm-input-set-key (kbd "s-r") 'exwm-reset)
-;;    ;; Bind a key to switch workspace interactively
-;;    (exwm-input-set-key (kbd "s-w") 'exwm-workspace-switch)
-;;    ;; Use class name to name an EXWM buffer
-;;    (add-hook 'exwm-update-class-hook
-;;              (lambda () (exwm-workspace-rename-buffer exwm-class-name t)))
-;;    ;; Enable EXWM
-;;    (exwm-enable)
-;;
-;; 3. Make a file '~/.xinitrc' with the following lines:
-;;
-;;    # You may need to comment out the next line to disable access control
-;;    #xhost +
-;;    exec emacs
+;;    (require 'exwm-config)
+;;    (exwm-config-default)
 ;;
+;; 3. Link or copy the file 'xinitrc' to '~/.xinitrc'.
 ;; 4. Launch EXWM in a console (e.g. tty1) with
 ;;
 ;;    xinit -- vt01
@@ -600,31 +588,12 @@
                ;; For other types, return the value as-is.
                (t result))))))
 
-(defun exwm--ido-buffer-window-other-frame (orig-fun buffer)
-  "Wrapper for `ido-buffer-window-other-frame' to exclude invisible windows."
-  (with-current-buffer buffer
-    (if (and (eq major-mode 'exwm-mode)
-             (or exwm--floating-frame
-                 (not exwm-layout-show-all-buffers)))
-        ;; `ido-mode' works well with `exwm-mode' buffers
-        (funcall orig-fun buffer)
-      ;; Other buffers should be selected within the same workspace
-      (get-buffer-window buffer exwm-workspace--current))))
-
-(defun exwm--fix-ido-buffer-window-other-frame ()
-  "Fix `ido-buffer-window-other-frame'."
-  (advice-add 'ido-buffer-window-other-frame :around
-              #'exwm--ido-buffer-window-other-frame))
-
-(defun exwm-enable-ido-workaround ()
-  "Enable workarounds for 'ido-mode'."
-  (add-hook 'exwm-init-hook #'exwm--fix-ido-buffer-window-other-frame))
+(define-obsolete-function-alias 'exwm-enable-ido-workaround 'exwm-config-ido
+  "25.1" "Enable workarounds for Ido.")
 
 (defun exwm-disable-ido-workaround ()
-  "Disable workarounds for 'ido-mode'."
-  (remove-hook 'exwm-init-hook #'exwm--fix-ido-buffer-window-other-frame)
-  (advice-remove 'ido-buffer-window-other-frame
-                 #'exwm--ido-buffer-window-other-frame))
+  "This function does nothing actually."
+  (declare (obsolete nil "25.1")))
 
 
 
diff --git a/xinitrc b/xinitrc
new file mode 100644
index 000000000000..3de5b0b51b04
--- /dev/null
+++ b/xinitrc
@@ -0,0 +1,14 @@
+# Disable access control
+xhost +
+
+# Themes, etc
+gnome-settings-daemon &
+
+# Fallback cursor
+xsetroot -cursor_name left_ptr
+
+# Keyboard repeat rate
+xset r rate 200 60
+
+# Start Emacs
+exec dbus-launch --exit-with-session emacs