From 34d588599d2d7ef46db6a810c1549199f78cf8ba Mon Sep 17 00:00:00 2001 From: Chris Feng Date: Wed, 28 Oct 2015 18:55:49 +0800 Subject: [PATCH] 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. --- exwm-config.el | 101 +++++++++++++++++++++++++++++++++++++++++++++++++ exwm.el | 45 ++++------------------ xinitrc | 14 +++++++ 3 files changed, 122 insertions(+), 38 deletions(-) create mode 100644 exwm-config.el create mode 100644 xinitrc diff --git a/exwm-config.el b/exwm-config.el new file mode 100644 index 0000000..7f02303 --- /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 + +;; 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 . + +;;; 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 b5d246e..ba71e32 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 0000000..3de5b0b --- /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