From 865f40ea60e1540ebbcafa7af35d1e1caacebb4e Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Wed, 14 Jan 2015 23:10:50 -0500 Subject: [PATCH 01/28] Move perforce command prefix to the perforce layer config.el file --- contrib/perforce/config.el | 15 +++++++++++++++ spacemacs/config.el | 1 - 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 contrib/perforce/config.el diff --git a/contrib/perforce/config.el b/contrib/perforce/config.el new file mode 100644 index 000000000000..01cf59697999 --- /dev/null +++ b/contrib/perforce/config.el @@ -0,0 +1,15 @@ +;;; config.el --- Perforce Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(setq perforce/key-binding-prefixes '(("p4" . "perforce"))) +(mapc (lambda (x) (spacemacs/declare-prefix (car x) (cdr x))) + perforce/key-binding-prefixes) diff --git a/spacemacs/config.el b/spacemacs/config.el index c94d516e826d..4f94b1674230 100644 --- a/spacemacs/config.el +++ b/spacemacs/config.el @@ -30,7 +30,6 @@ ("j" . "join/split") ("n" . "narrow/numbers") ("p" . "projects") - ("p4" . "perforce") ("q" . "quit") ("r" . "registers/rings") ("s" . "search/symbol") From 916444d486e0b493c234621ffe16b40567defccf Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Wed, 14 Jan 2015 23:13:06 -0500 Subject: [PATCH 02/28] Move setq magit-completing-read-function to init-magit function --- contrib/git/config.el | 2 -- contrib/git/packages.el | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/contrib/git/config.el b/contrib/git/config.el index e884519e347a..ea0c3cf082ec 100644 --- a/contrib/git/config.el +++ b/contrib/git/config.el @@ -14,8 +14,6 @@ "If non nil the Github packages and extensions are enabled.") (setq git/key-binding-prefixes '(("gh" . "gutter-hunks/highlight"))) -(setq magit-completing-read-function 'magit-ido-completing-read) - (when git-enable-github-support (push (cons "gf" "file") git/key-binding-prefixes) (push (cons "gg" "gist") git/key-binding-prefixes)) diff --git a/contrib/git/packages.el b/contrib/git/packages.el index 0474cf60529f..fd897dcc46f8 100644 --- a/contrib/git/packages.el +++ b/contrib/git/packages.el @@ -170,6 +170,7 @@ which require an initialization must be listed explicitly in the list.") (use-package magit :defer t :init + (setq magit-completing-read-function 'magit-ido-completing-read) (evil-leader/set-key "gb" 'magit-blame-mode "gl" 'magit-log From 6c723ad728dd32e8850ec477c1c177d04929380b Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Wed, 14 Jan 2015 23:22:15 -0500 Subject: [PATCH 03/28] Move configuration variables to config.el in several layers Layers: - erlang-elixir - git - ruby --- contrib/git/config.el | 14 ++++++++++++-- contrib/git/packages.el | 9 --------- contrib/lang/erlang-elixir/config.el | 18 ++++++++++++++++++ contrib/lang/erlang-elixir/packages.el | 7 ------- contrib/lang/ruby/config.el | 17 +++++++++++++++++ contrib/lang/ruby/packages.el | 3 --- 6 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 contrib/lang/erlang-elixir/config.el create mode 100644 contrib/lang/ruby/config.el diff --git a/contrib/git/config.el b/contrib/git/config.el index ea0c3cf082ec..82738c909248 100644 --- a/contrib/git/config.el +++ b/contrib/git/config.el @@ -10,8 +10,7 @@ ;; ;;; License: GPLv3 -(defvar git-enable-github-support nil - "If non nil the Github packages and extensions are enabled.") +;; Command prefixes (setq git/key-binding-prefixes '(("gh" . "gutter-hunks/highlight"))) (when git-enable-github-support @@ -19,3 +18,14 @@ (push (cons "gg" "gist") git/key-binding-prefixes)) (mapc (lambda (x) (spacemacs/declare-prefix (car x) (cdr x))) git/key-binding-prefixes) + +;; Variables + +(defvar git-enable-github-support nil + "If non nil the Github packages and extensions are enabled.") + +(defvar git-magit-status-fullscreen nil + "If non nil magit-status buffer is displayed in fullscreen.") + +(defvar git-gutter-use-fringe t + "If non nil the fringe is used to display git-gutter icons.") diff --git a/contrib/git/packages.el b/contrib/git/packages.el index fd897dcc46f8..8e5baa085ae8 100644 --- a/contrib/git/packages.el +++ b/contrib/git/packages.el @@ -22,15 +22,6 @@ "List of all packages to install and/or initialize. Built-in packages which require an initialization must be listed explicitly in the list.") -(defvar git-enable-github-support nil - "If non nil enable Github packages.") - -(defvar git-magit-status-fullscreen nil - "If non nil magit-status buffer is displayed in fullscreen.") - -(defvar git-gutter-use-fringe t - "If non nil the fringe is used to display git-gutter icons.") - (when git-enable-github-support (mapc (lambda (x) (push x git-packages)) '( diff --git a/contrib/lang/erlang-elixir/config.el b/contrib/lang/erlang-elixir/config.el new file mode 100644 index 000000000000..59b3ea114e62 --- /dev/null +++ b/contrib/lang/erlang-elixir/config.el @@ -0,0 +1,18 @@ +;;; config.el --- Erlang, Elixir Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar spacemacs-erlang-elixir-use-edts nil + "If non-nil then `EDTS' is loaded with `erlang-mode'. This variable +must be defined in `dotspacemacs/init' function to take effect.") + diff --git a/contrib/lang/erlang-elixir/packages.el b/contrib/lang/erlang-elixir/packages.el index ae1f66c26cd3..8d60c8c4bca2 100644 --- a/contrib/lang/erlang-elixir/packages.el +++ b/contrib/lang/erlang-elixir/packages.el @@ -28,13 +28,6 @@ "List of all packages to install and/or initialize. Built-in packages which require an initialization must be listed explicitly in the list.") -(defvar erlang-elixir-excluded-packages '() - "List of packages to exclude.") - -(defvar spacemacs-erlang-elixir-use-edts nil - "If non-nil then `EDTS' is loaded with `erlang-mode'. This variable -must be defined in `dotspacemacs/init' function to take effect.") - (defun erlang-elixir/init-auto-complete () (add-hook 'erlang-mode-hook 'auto-complete-mode)) diff --git a/contrib/lang/ruby/config.el b/contrib/lang/ruby/config.el new file mode 100644 index 000000000000..df57a9132516 --- /dev/null +++ b/contrib/lang/ruby/config.el @@ -0,0 +1,17 @@ +;;; config.el --- Ruby Layer configuration File for Spacemacs +;; +;; Copyright (c) 2012-2014 Sylvain Benner +;; Copyright (c) 2014-2015 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +;; Variables + +(defvar ruby-version-manager nil + "If non nil defines the Ruby version manager (i.e. rbenv, rvm)") + diff --git a/contrib/lang/ruby/packages.el b/contrib/lang/ruby/packages.el index 9154ec420949..b2dc88fdb62a 100644 --- a/contrib/lang/ruby/packages.el +++ b/contrib/lang/ruby/packages.el @@ -10,9 +10,6 @@ "List of all packages to install and/or initialize. Built-in packages which require an initialization must be listed explicitly in the list.") -(defvar ruby-version-manager nil - "If non nil defines the Ruby version manager (i.e. rbenv, rvm)") - (when ruby-version-manager (add-to-list 'ruby-packages ruby-version-manager)) From c31d987668f97c3fb50cd7f4d8ee60e76709f8f5 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Wed, 14 Jan 2015 23:23:08 -0500 Subject: [PATCH 04/28] Move hi2 related functions in init-hi2 function in haskell layer --- contrib/lang/haskell/funcs.el | 7 ------- contrib/lang/haskell/packages.el | 9 +++++++++ 2 files changed, 9 insertions(+), 7 deletions(-) delete mode 100644 contrib/lang/haskell/funcs.el diff --git a/contrib/lang/haskell/funcs.el b/contrib/lang/haskell/funcs.el deleted file mode 100644 index 3b3d9f3c5177..000000000000 --- a/contrib/lang/haskell/funcs.el +++ /dev/null @@ -1,7 +0,0 @@ -(defun spacemacs/haskell-show-hi2-guides () - (when (and (boundp 'hi2-mode) hi2-mode) - (hi2-enable-show-indentations))) - -(defun spacemacs/haskell-hide-hi2-guides () - (when (and (boundp 'hi2-mode) hi2-mode) - (hi2-disable-show-indentations))) diff --git a/contrib/lang/haskell/packages.el b/contrib/lang/haskell/packages.el index 2d1c3d63325e..034aae32570a 100644 --- a/contrib/lang/haskell/packages.el +++ b/contrib/lang/haskell/packages.el @@ -175,6 +175,15 @@ (add-hook 'haskell-mode-hook 'turn-on-hi2) :config (progn + + (defun spacemacs/haskell-show-hi2-guides () + (when (and (boundp 'hi2-mode) hi2-mode) + (hi2-enable-show-indentations))) + + (defun spacemacs/haskell-hide-hi2-guides () + (when (and (boundp 'hi2-mode) hi2-mode) + (hi2-disable-show-indentations))) + ;; Show indentation guides for hi2 only in insert state. (add-hook 'evil-normal-state-entry-hook 'spacemacs/haskell-hide-hi2-guides) (add-hook 'evil-insert-state-entry-hook 'spacemacs/haskell-show-hi2-guides) From 1ff2084da20f3a26bd4d7f68635452a2fa98d21e Mon Sep 17 00:00:00 2001 From: Bob Date: Thu, 15 Jan 2015 20:25:51 +0800 Subject: [PATCH 05/28] defvar `git-enable-github-support` --- contrib/git/config.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/contrib/git/config.el b/contrib/git/config.el index 82738c909248..d9e2f45aaca7 100644 --- a/contrib/git/config.el +++ b/contrib/git/config.el @@ -12,6 +12,9 @@ ;; Command prefixes +(defvar git-enable-github-support nil + "If non nil enable Github packages.") + (setq git/key-binding-prefixes '(("gh" . "gutter-hunks/highlight"))) (when git-enable-github-support (push (cons "gf" "file") git/key-binding-prefixes) From fa70d5993f77d152bbe435beda144c437d57465d Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 09:49:32 -0500 Subject: [PATCH 06/28] Move git defvars at the beginning of the layer --- contrib/git/config.el | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/contrib/git/config.el b/contrib/git/config.el index d9e2f45aaca7..484de39b0e94 100644 --- a/contrib/git/config.el +++ b/contrib/git/config.el @@ -10,18 +10,6 @@ ;; ;;; License: GPLv3 -;; Command prefixes - -(defvar git-enable-github-support nil - "If non nil enable Github packages.") - -(setq git/key-binding-prefixes '(("gh" . "gutter-hunks/highlight"))) -(when git-enable-github-support - (push (cons "gf" "file") git/key-binding-prefixes) - (push (cons "gg" "gist") git/key-binding-prefixes)) -(mapc (lambda (x) (spacemacs/declare-prefix (car x) (cdr x))) - git/key-binding-prefixes) - ;; Variables (defvar git-enable-github-support nil @@ -32,3 +20,12 @@ (defvar git-gutter-use-fringe t "If non nil the fringe is used to display git-gutter icons.") + +;; Command prefixes + +(setq git/key-binding-prefixes '(("gh" . "gutter-hunks/highlight"))) +(when git-enable-github-support + (push (cons "gf" "file") git/key-binding-prefixes) + (push (cons "gg" "gist") git/key-binding-prefixes)) +(mapc (lambda (x) (spacemacs/declare-prefix (car x) (cdr x))) + git/key-binding-prefixes) From 5a5c6cdb1c91de79a9f98b6b58e23e7a91a8155b Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 09:50:02 -0500 Subject: [PATCH 07/28] Fix helm-spacemacs with defvar declaration in config.el files --- core/configuration-layer.el | 3 +-- spacemacs/extensions/helm-spacemacs/helm-spacemacs.el | 2 ++ 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/configuration-layer.el b/core/configuration-layer.el index 7589942e043b..427ef3a6e316 100644 --- a/core/configuration-layer.el +++ b/core/configuration-layer.el @@ -237,8 +237,7 @@ the following keys: (dir (plist-get (cdr layer) :dir))) (dolist (file files) (let ((file (concat dir file))) - (if (file-exists-p file) - (load file))))))) + (if (file-exists-p file) (configuration-layer/load-file file))))))) (defsubst configuration-layer//add-layer-to-hash (pkg layer hash) "Add LAYER to the list value stored in HASH with key PKG." diff --git a/spacemacs/extensions/helm-spacemacs/helm-spacemacs.el b/spacemacs/extensions/helm-spacemacs/helm-spacemacs.el index 93a7ed38919b..bc2ac7e86f21 100644 --- a/spacemacs/extensions/helm-spacemacs/helm-spacemacs.el +++ b/spacemacs/extensions/helm-spacemacs/helm-spacemacs.el @@ -46,6 +46,8 @@ (mapc (lambda (layer) (push (configuration-layer//declare-layer layer) helm-spacemacs-all-layers)) (configuration-layer/get-layers-list)) + (configuration-layer//load-layer-files helm-spacemacs-all-layers + '("funcs.el" "config.el")) (setq helm-spacemacs-all-packages (configuration-layer/get-packages helm-spacemacs-all-layers))) (setq helm-spacemacs-all-layers nil From a5cc56208d5e9cb4267f03875ed447d869301e06 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 16:09:57 -0500 Subject: [PATCH 08/28] Change Windows fallback font to `Lucida Sans Unicode` --- core/spacemacs-mode.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/spacemacs-mode.el b/core/spacemacs-mode.el index f18ff92f890d..2b739e22e8f2 100644 --- a/core/spacemacs-mode.el +++ b/core/spacemacs-mode.el @@ -125,7 +125,7 @@ (`mac (spacemacs/set-font font 12)) (`w32 (spacemacs/set-font font 9) - (let ((fallback-font "MS Gothic:mono")) + (let ((fallback-font "Lucida Sans Unicode")) ;; window numbers (set-fontset-font "fontset-default" '(#x2776 . #x2793) fallback-font nil 'append) @@ -137,7 +137,7 @@ '(#x2295 . #x22a1) fallback-font nil 'append) ;; new version lighter (set-fontset-font "fontset-default" - '(#x2190 . #x21ea) fallback-font nil 'append))) + '(#x2190 . #x2200) fallback-font nil 'append))) (other (spacemacs/set-font font 10))))) ;; banner From 6bdbc72ec2d73181df34790d6559c77dc64183e6 Mon Sep 17 00:00:00 2001 From: Roman Gonzalez Date: Wed, 14 Jan 2015 09:24:05 -0800 Subject: [PATCH 09/28] Diminish subword-mode only in older versions of Emacs --- spacemacs/packages.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 2ad2c55a9708..baeb3d7869cd 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -468,7 +468,8 @@ which require an initialization must be listed explicitly in the list.") (eval-after-load "abbrev" '(diminish 'abbrev-mode)) (eval-after-load "subword" - '(diminish 'subword-mode))) + '(when (eval-when-compile (version< "24.3.1" emacs-version)) + (diminish 'subword-mode)))) (defun spacemacs/init-dired+ () (use-package dired+ From a863139c09f3b91cd7140dd4589b771ac6a1b253 Mon Sep 17 00:00:00 2001 From: Tristan Hume Date: Wed, 14 Jan 2015 14:44:04 -0500 Subject: [PATCH 10/28] Add nix expression syntax and remove aggressive-indent --- contrib/usr/trishume/packages.el | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/contrib/usr/trishume/packages.el b/contrib/usr/trishume/packages.el index f146873e6cfe..f908dcdc59b6 100644 --- a/contrib/usr/trishume/packages.el +++ b/contrib/usr/trishume/packages.el @@ -7,10 +7,10 @@ julia-mode helm-ag lua-mode + nix-mode racket-mode yaml-mode ag - aggressive-indent hungry-delete )) @@ -23,6 +23,9 @@ (defun trishume/init-scad-mode () (use-package scad-mode :defer t)) +(defun trishume/init-nix-mode () + (use-package nix-mode :defer t)) + (defun trishume/init-qml-mode () (use-package qml-mode :defer t)) @@ -63,15 +66,6 @@ '(lambda () (define-key racket-mode-map (kbd "H-r") 'racket-run)))))) -(defun trishume/init-aggressive-indent () - (use-package aggressive-indent - :defer t - :init - (evil-leader/set-key - "tA" 'aggressive-indent-mode) - :config - (spacemacs|hide-lighter aggressive-indent-mode))) - (defun trishume/init-hungry-delete () (use-package hungry-delete :init (global-hungry-delete-mode) From 99e734110b7dab33f56c29175bd2858b35785cef Mon Sep 17 00:00:00 2001 From: Daniel Wu Date: Thu, 15 Jan 2015 16:11:39 -0500 Subject: [PATCH 11/28] fix bug: SPC f f doesn't work in yaml buffer --- spacemacs/packages.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index baeb3d7869cd..499f1ec1d12f 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -1321,7 +1321,8 @@ which require an initialization must be listed explicitly in the list.") (define-key ido-completion-map (kbd "C-d") 'ido-delete-file-at-head) (define-key ido-completion-map (kbd "C-k") 'ido-prev-match) (define-key ido-completion-map (kbd "C-") 'ido-select-text) - (define-key ido-completion-map (kbd "M-") 'ido-select-text) + ;; use M-RET in terminal + (define-key ido-completion-map "\M-\r" 'ido-select-text) (define-key ido-completion-map (kbd "C-h") 'ido-delete-backward-updir) (define-key ido-completion-map (kbd "C-j") 'ido-next-match) (define-key ido-completion-map (kbd "C-l") 'ido-exit-minibuffer) From 6942a947dd409548520126dbcc76acf5f9a264f7 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 22:17:58 -0500 Subject: [PATCH 12/28] Move ido split keys to `C-s` and `C-v` to mirror `SPC w` behavior --- doc/DOCUMENTATION.md | 10 +++++----- spacemacs/packages.el | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index 25d81e30a22e..4d1c79e9a9b7 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -1092,7 +1092,6 @@ Key Binding | Description ------------------------|---------------------------------------------------------------- C-\ | open a `dired buffer` M-\ | open a `dired buffer` in terminal -C-b | open selected file in a horizontally split window C-d | delete selected file (ask for confirmation) C-h | go to parent directory C-j | select next file or directory @@ -1101,10 +1100,11 @@ Key Binding | Description C-S-k | go to previous directory C-l | open the selected file C-n | next history element +C-o | open selected file in other window C-p | previous history element +C-s | open selected file in a vertically split window C-t | open selected file in a new frame -C-v | open selected file in a vertically split window -C-o | open selected file in other window +C-v | open selected file in a horizontally split window #### Experimental Ido feature @@ -1115,9 +1115,9 @@ When evil leader is triggered the following commands are available: Key Binding | Description --------------|---------------------------------------------------------------- -b | open selected file in a horizontally split window +s | open selected file in a vertically split window t | open selected file in a new frame -v | open selected file in a vertically split window +v | open selected file in a horizontally split window x | open selected file in other window ### NeoTree file tree diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 499f1ec1d12f..1a26d6651448 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -1333,9 +1333,9 @@ which require an initialization must be listed explicitly in the list.") (define-key ido-completion-map (kbd "C-p") 'previous-history-element) ;; ido-other window maps (define-key ido-completion-map (kbd "C-o") 'ido-invoke-in-other-window) - (define-key ido-completion-map (kbd "C-v") 'ido-invoke-in-vertical-split) - (define-key ido-completion-map (kbd "C-b") 'ido-invoke-in-horizontal-split) + (define-key ido-completion-map (kbd "C-s") 'ido-invoke-in-vertical-split) (define-key ido-completion-map (kbd "C-t") 'ido-invoke-in-new-frame) + (define-key ido-completion-map (kbd "C-v") 'ido-invoke-in-horizontal-split) ;; more natural navigation keys: up, down to change current item ;; left to go up dir ;; right to open the selected item @@ -1345,9 +1345,9 @@ which require an initialization must be listed explicitly in the list.") (define-key ido-completion-map (kbd "") 'ido-exit-minibuffer) (when dotspacemacs-feature-toggle-leader-on-jk (evil-leader/set-key-for-mode 'ido-mode - "b" 'ido-invoke-in-horizontal-split + "s" 'ido-invoke-in-vertical-split "t" 'ido-invoke-in-new-frame - "v" 'ido-invoke-in-vertical-split + "v" 'ido-invoke-in-horizontal-split "x" 'ido-invoke-in-other-window) (key-chord-define ido-completion-map (kbd "jk") (cdr (assoc 'ido-mode evil-leader--mode-maps))))) From abdf87bad8bf18bcf1b175ef7083fdbdd18e4d22 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 22:36:36 -0500 Subject: [PATCH 13/28] Add toggles for tool bar and menu bar Resolves #361 --- doc/DOCUMENTATION.md | 2 ++ spacemacs/funcs.el | 15 +++++++++++++++ spacemacs/keybindings.el | 2 ++ 3 files changed, 19 insertions(+) diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index 4d1c79e9a9b7..f9298047b1ef 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -696,6 +696,8 @@ Some UI indicators can be toggled on and off (toggles start with `t`): SPC t M | toggle frame maximize SPC t n | show the absolute line numbers SPC t t | toggle frame transparency +SPC t T | toggle tool bar +SPC t U | toggle menu bar ## Mode-line diff --git a/spacemacs/funcs.el b/spacemacs/funcs.el index ae609a5ba0f4..2e5e24611ce8 100644 --- a/spacemacs/funcs.el +++ b/spacemacs/funcs.el @@ -876,6 +876,21 @@ If ASCII si not provided then UNICODE is used instead." (evil-end-of-line) (eval-last-sexp nil))) +(defun spacemacs/toggle-tool-bar () + "Toggle the tool bar. +It has no effect in a terminal." + (interactive) + (when window-system + (tool-bar-mode (if tool-bar-mode -1 1)))) + +(defun spacemacs/toggle-menu-bar () + "Toggle the menu bar. +It has no effect in a terminal if the Emacs version is < `24.4'." + (interactive) + (when (or window-system + (version<= "24.3.1" emacs-version)) + (menu-bar-mode (if menu-bar-mode -1 1)))) + (defun spacemacs/open-in-external-app () "Open current file in external application." (interactive) diff --git a/spacemacs/keybindings.el b/spacemacs/keybindings.el index bbbf819011d0..c51e735721bd 100644 --- a/spacemacs/keybindings.el +++ b/spacemacs/keybindings.el @@ -137,6 +137,8 @@ "tM" 'toggle-frame-maximized "tn" 'global-linum-mode "tt" 'toggle-transparency + "tT" 'spacemacs/toggle-tool-bar + "tU" 'spacemacs/toggle-menu-bar "t SPC" 'whitespace-mode) ;; quit ----------------------------------------------------------------------- (evil-leader/set-key From 949ae9dd61522ce81fcf59c53471db2ef61aab88 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 22:38:07 -0500 Subject: [PATCH 14/28] Minor change to emacs version test --- core/spacemacs-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spacemacs-mode.el b/core/spacemacs-mode.el index 2b739e22e8f2..1b29d0dbf6f1 100644 --- a/core/spacemacs-mode.el +++ b/core/spacemacs-mode.el @@ -205,7 +205,7 @@ FILE-TO-LOAD is an explicit file to load after the installation." pkg-elpa-dir)))) (defun spacemacs/emacs-version-ok () - (not (version< emacs-version spacemacs-min-version))) + (version<= spacemacs-min-version emacs-version)) (defun spacemacs/display-and-copy-version () "Echo the current spacemacs version and copy it." From 409cb96944064d85c73ad804394184476f630373 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 23:22:54 -0500 Subject: [PATCH 15/28] Lazy loading of evil-nerd-commenter --- spacemacs/packages.el | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 1a26d6651448..8eaae51b5ad7 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -701,6 +701,12 @@ which require an initialization must be listed explicitly in the list.") (defun spacemacs/init-evil-nerd-commenter () (use-package evil-nerd-commenter + :commands (evilnc-comment-operator + evilnc-comment-or-uncomment-lines + evilnc-toggle-invert-comment-line-by-line + evilnc-comment-or-uncomment-paragraphs + evilnc-quick-comment-or-uncomment-to-the-line + evilnc-copy-and-comment-lines) :init (progn (evil-leader/set-key From 4644fa74333e80e78d50defdc6653d5ba4394d54 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 23:36:18 -0500 Subject: [PATCH 16/28] Fix potential errors when activating hs-minor-mode --- spacemacs/config.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spacemacs/config.el b/spacemacs/config.el index 4f94b1674230..17fb9ccdc71e 100644 --- a/spacemacs/config.el +++ b/spacemacs/config.el @@ -70,8 +70,9 @@ ;; required for evil folding (defun spacemacs//enable-hs-minor-mode () "Enable hs-minor-mode for code folding." - (hs-minor-mode) - (spacemacs|hide-lighter hs-minor-mode)) + (ignore-errors + (hs-minor-mode) + (spacemacs|hide-lighter hs-minor-mode))) (add-hook 'prog-mode-hook 'spacemacs//enable-hs-minor-mode) ;; Hack to fix a bug with tabulated-list.el From 02d2d6c2718d977f75ed9611e8ad28751164f132 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 23:45:53 -0500 Subject: [PATCH 17/28] Add evil-matchit and enable it in html and auctex layers --- contrib/auctex/README.md | 4 ++++ contrib/auctex/packages.el | 4 ++++ contrib/lang/html/README.md | 3 +++ contrib/lang/html/packages.el | 4 ++++ doc/DOCUMENTATION.md | 3 +++ spacemacs/packages.el | 5 +++++ 6 files changed, 23 insertions(+) diff --git a/contrib/auctex/README.md b/contrib/auctex/README.md index de0fd6f78c0a..3ac49c64e1b4 100644 --- a/contrib/auctex/README.md +++ b/contrib/auctex/README.md @@ -6,6 +6,8 @@ Includes support for Auctex including some bindings, sane defaults, and manual l Along with other things this layer includes company-auctex, it's only enabled if you also enable my other contrib layer `company-mode`. +Tags navigation can be performed with key `%` thanks to [evil-matchit][]. + ## Keybindings Key Binding | Description @@ -30,3 +32,5 @@ Key Binding | Description This layer was created by and is maintained by @trishume, ping me in the Gitter chat if you have questions. Feel free to submit PRs for this layer though if you have improvements. + +[evil-matchit]: https://github.com/redguardtoo/evil-matchit diff --git a/contrib/auctex/packages.el b/contrib/auctex/packages.el index 00e46145769f..dc356a5567e6 100644 --- a/contrib/auctex/packages.el +++ b/contrib/auctex/packages.el @@ -1,6 +1,7 @@ (defvar auctex-packages '( auctex + evil-matchit )) (when (member 'company-mode dotspacemacs-configuration-layers) @@ -61,3 +62,6 @@ (setq-default TeX-parse-self t) (setq-default TeX-master nil) (setq-default TeX-PDF-mode t)))) + +(defun auctex/init-evil-matchit () + (add-hook 'web-mode-hook 'evil-matchit-mode)) diff --git a/contrib/lang/html/README.md b/contrib/lang/html/README.md index d70d470c40cc..6ac13d94d43b 100644 --- a/contrib/lang/html/README.md +++ b/contrib/lang/html/README.md @@ -20,6 +20,7 @@ Features: - Editing HTML and CSS file using [web-mode][] - Support for Scss and Less files - Generate HTML and CSS coding using [emmet-mode][] +- Tags navigation on key `%` using [evil-matchit][] ## Install @@ -41,3 +42,5 @@ To use this contribution add it to your `~/.spacemacs` [web-mode]: http://web-mode.org/ [emmet-mode]: https://github.com/smihica/emmet-mode +[evil-matchit]: https://github.com/redguardtoo/evil-matchit + diff --git a/contrib/lang/html/packages.el b/contrib/lang/html/packages.el index 89b51a9e3a7e..52f038b415ea 100644 --- a/contrib/lang/html/packages.el +++ b/contrib/lang/html/packages.el @@ -13,6 +13,7 @@ (defvar html-packages '( emmet-mode + evil-matchit flycheck helm-css-scss less-css-mode @@ -58,6 +59,9 @@ which require an initialization must be listed explicitly in the list.") (local-set-key (kbd "") 'emmet-expand-yas) (spacemacs|hide-lighter emmet-mode)))) +(defun html/init-evil-matchit () + (add-hook 'web-mode-hook 'evil-matchit-mode)) + (defun html/init-scss-mode () (use-package scss-mode :defer t diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index f9298047b1ef..b8f7528b999a 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -627,6 +627,7 @@ your `~/.spacemacs`): [evil-visualstar][] | search for current selection with `*` [evil-exchange][] | port of [vim-exchange][] [evil-surround][] | port of [vim-surround][] +[evil-matchit][] | port of [matchit.vim][] [evil-nerd-commenter][] | port of [nerdcommenter][] [evil-search-highlight-persist][] | emulation of hlsearch behavior [evil-numbers][] | like C-a/C-x in vim @@ -2064,6 +2065,8 @@ developers to elisp hackers! [vim-surround]: https://github.com/tpope/vim-surround [evil-nerd-commenter]: https://github.com/redguardtoo/evil-nerd-commenter [nerdcommenter]: https://github.com/scrooloose/nerdcommenter +[evil-matchit]: https://github.com/redguardtoo/evil-matchit +[matchit.vim]: http://www.vim.org/scripts/script.php?script_id=39 [source code pro]: https://github.com/adobe-fonts/source-code-pro [evil-escape]: https://github.com/syl20bnr/evil-escape [evil-args]: https://github.com/wcsmith/evil-args diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 8eaae51b5ad7..1a2f14ef5b73 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -39,6 +39,7 @@ evil-jumper evil-leader evil-nerd-commenter + evil-matchit evil-numbers evil-org evil-search-highlight-persist @@ -717,6 +718,10 @@ which require an initialization must be listed explicitly in the list.") "ct" 'evilnc-quick-comment-or-uncomment-to-the-line "cy" 'evilnc-copy-and-comment-lines)))) +(defun spacemacs/init-evil-matchit () + (use-package evil-matchit + :defer t)) + (defun spacemacs/init-evil-numbers () (use-package evil-numbers :config From ea7f8a49c607da3814e40e640f71d5a15b199f5b Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 15 Jan 2015 23:48:42 -0500 Subject: [PATCH 18/28] Reformat auctex layer README --- contrib/auctex/README.md | 36 +++++++++++++++++++++++++++++++++-- contrib/auctex/img/latex.png | Bin 0 -> 17387 bytes 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 contrib/auctex/img/latex.png diff --git a/contrib/auctex/README.md b/contrib/auctex/README.md index 3ac49c64e1b4..e8c625b96f03 100644 --- a/contrib/auctex/README.md +++ b/contrib/auctex/README.md @@ -1,11 +1,43 @@ -# Auctex Layer +# Auctex Layer for Spacemacs + +![logo](img/latex.png) + + +**Table of Contents** + +- [Auctex Layer for Spacemacs](#auctex-layer-for-spacemacs) + - [Description](#description) + - [Install](#install) + - [Features](#features) + - [Company Auctex](#company-auctex) + - [Tags navigation](#tags-navigation) + - [Keybindings](#keybindings) + - [Maintainer](#maintainer) + + + +## Description Includes support for Auctex including some bindings, sane defaults, and manual loading for better startup times. -## Company Auctex +## Install + +To use this contribution add it to your `~/.spacemacs` + +```elisp +(setq-default dotspacemacs-configuration-layers '(auctex) + "List of contribution to load." +) +``` + +## Features + +### Company Auctex Along with other things this layer includes company-auctex, it's only enabled if you also enable my other contrib layer `company-mode`. +### Tags navigation + Tags navigation can be performed with key `%` thanks to [evil-matchit][]. ## Keybindings diff --git a/contrib/auctex/img/latex.png b/contrib/auctex/img/latex.png new file mode 100644 index 0000000000000000000000000000000000000000..13f1f8435cba2ca496d659bd3b98145d765e2022 GIT binary patch literal 17387 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 dVg3$J@%`wvkuGc%_*Mr7R7p#*Qr_zQ{{ Date: Thu, 15 Jan 2015 23:49:59 -0500 Subject: [PATCH 19/28] Resize latex logo --- contrib/auctex/img/latex.png | Bin 17387 -> 24312 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/contrib/auctex/img/latex.png b/contrib/auctex/img/latex.png index 13f1f8435cba2ca496d659bd3b98145d765e2022..af5d0f9edafa8c5caa2d682a406793be964da32b 100644 GIT binary patch literal 24312 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 dVg3$J@%`wvkuGc%_*Mr7R7p#*Qr_zQ{{ Date: Fri, 16 Jan 2015 14:28:08 -0500 Subject: [PATCH 20/28] Fix display error of mode-line when anzu package is excluded --- spacemacs/packages.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 1a2f14ef5b73..4edd5342fe73 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -1712,6 +1712,7 @@ which require an initialization must be listed explicitly in the list.") (state-face (if active (spacemacs/current-state-face) face2)) (window-numberingp (and (boundp 'window-numbering-mode) (symbol-value window-numbering-mode))) + (anzup (and (boundp 'anzu--state) anzu--state)) (flycheckp (and (boundp 'flycheck-mode) (symbol-value flycheck-mode) (or flycheck-current-errors @@ -1729,7 +1730,7 @@ which require an initialization must be listed explicitly in the list.") (if (and window-numberingp (spacemacs/window-number)) (list (powerline-raw (spacemacs/window-number) state-face)) (list (powerline-raw (evil-state-property evil-state :tag t) state-face))) - (if (and active anzu--state) + (if (and active anzup) (list (funcall separator-right state-face face1) (powerline-raw (anzu--update-mode-line) face1) From 7ecfcdce37d1bb4f7b5fc839a7f7c814ba567863 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 16 Jan 2015 22:38:18 -0500 Subject: [PATCH 21/28] Fix :nohl ex command to clear persistent highlights --- spacemacs/packages.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 4edd5342fe73..3f7836cea63f 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -769,7 +769,7 @@ which require an initialization must be listed explicitly in the list.") (progn (global-evil-search-highlight-persist) (evil-leader/set-key "sc" 'evil-search-highlight-persist-remove-all) - (evil-ex-define-cmd "noh" 'evil-search-highlight-persist-remove-all)))) + (evil-ex-define-cmd "nohl" 'evil-search-highlight-persist-remove-all)))) (defun spacemacs/init-evil-surround () (use-package evil-surround From 850211f8b40401c2dbf14db43e2328e2731e9476 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 16 Jan 2015 23:12:17 -0500 Subject: [PATCH 22/28] Fixes #442 Error with `n` and `N` with recent update of anzu --- spacemacs/packages.el | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 3f7836cea63f..32ef37d391db 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -209,7 +209,10 @@ which require an initialization must be listed explicitly in the list.") "Show anzu status when pressing `n` or `N`" (anzu--cons-mode-line-search) (funcall func arg) - (anzu--update) + (let ((query (if evil-regexp-search + (car-safe regexp-search-ring) + (car-safe search-ring)))) + (anzu--update query)) (if spacemacs-anzu-timer (cancel-timer spacemacs-anzu-timer)) (setq spacemacs-anzu-timer (run-at-time "2 sec" nil 'spacemacs/anzu-ephemeral-display))) @@ -223,8 +226,8 @@ which require an initialization must be listed explicitly in the list.") :repeat ignore (interactive "P") (spacemacs/anzu-evil-search arg 'evil-search-previous)) - (define-key evil-normal-state-map "n" 'spacemacs/anzu-evil-search-next) - (define-key evil-normal-state-map "N" 'spacemacs/anzu-evil-search-previous) + ;; (define-key evil-normal-state-map "n" 'spacemacs/anzu-evil-search-next) + ;; (define-key evil-normal-state-map "N" 'spacemacs/anzu-evil-search-previous) (define-key evil-motion-state-map "n" 'spacemacs/anzu-evil-search-next) (define-key evil-motion-state-map "N" 'spacemacs/anzu-evil-search-previous) From d716d0a9f1272e350dbd0d3f32e28a7a2361b8b2 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 16 Jan 2015 23:29:07 -0500 Subject: [PATCH 23/28] Run prog-mode hooked functions with erlang-mode-hook --- contrib/lang/erlang-elixir/packages.el | 34 ++------------------------ 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/contrib/lang/erlang-elixir/packages.el b/contrib/lang/erlang-elixir/packages.el index 8d60c8c4bca2..0afe868e5476 100644 --- a/contrib/lang/erlang-elixir/packages.el +++ b/contrib/lang/erlang-elixir/packages.el @@ -12,28 +12,15 @@ (defvar erlang-elixir-packages '( - auto-complete - auto-highlight-symbol edts elixir-mode erlang flycheck - git-gutter-fringe - evil-iedit-state - rainbow-delimiters ruby-end - smartparens - yasnippet ) "List of all packages to install and/or initialize. Built-in packages which require an initialization must be listed explicitly in the list.") -(defun erlang-elixir/init-auto-complete () - (add-hook 'erlang-mode-hook 'auto-complete-mode)) - -(defun erlang-elixir/init-auto-highlight-symbol () - (add-hook 'erlang-mode-hook 'auto-highlight-symbol-mode)) - (defun erlang-elixir/init-edts () (defun erlang-elixir//load-edts () @@ -65,6 +52,8 @@ which require an initialization must be listed explicitly in the list.") ("\\.hrl?$" . erlang-mode) ("\\.spec?$" . erlang-mode)) :defer t + :init + (add-hook 'erlang-mode-hook (lambda () (run-hooks 'prog-mode-hook))) :config (progn (setq erlang-root-dir "/usr/lib/erlang/erts-5.10.3") @@ -98,26 +87,7 @@ which require an initialization must be listed explicitly in the list.") (unless spacemacs-erlang-elixir-use-edts (add-hook 'erlang-mode-hook 'flycheck-mode))) -(defun erlang-elixir/init-git-gutter-fringe () - (add-hook 'erlang-mode-hook 'git-gutter-mode)) - -(defun erlang-elixir/init-evil-iedit-state () - (add-hook 'erlang-mode-hook 'spacemacs/evil-state-lazy-loading)) - - -(defun erlang-elixir/init-rainbow-delimiters () - (add-hook 'erlang-mode-hook 'turn-on-rainbow-delimiters-mode)) - (defun erlang-elixir/init-ruby-end () (use-package ruby-end :defer t :config (spacemacs|hide-lighter ruby-end-mode))) - -(defun erlang-elixir/init-smartparens () - (add-hook 'erlang-mode-hook - (if dotspacemacs-smartparens-strict-mode - 'smartparens-strict-mode - 'smartparens-mode))) - -(defun erlang-elixir/init-yasnippet () - (add-hook 'erlang-mode-hook 'spacemacs/load-yasnippet)) From 5dcb78ed1d2313a7973239cb98aa6498c46b056e Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Sat, 17 Jan 2015 23:01:09 -0500 Subject: [PATCH 24/28] Remove key-chord dependency Resolves #371 #439 --- contrib/smex/packages.el | 5 +- spacemacs/extensions.el | 13 +- spacemacs/extensions/evil-escape/README.md | 86 ++++ .../extensions/evil-escape/evil-escape.el | 269 +++++++++++++ spacemacs/extensions/key-chord/key-chord.el | 370 ------------------ spacemacs/packages.el | 76 ++-- 6 files changed, 402 insertions(+), 417 deletions(-) create mode 100644 spacemacs/extensions/evil-escape/README.md create mode 100644 spacemacs/extensions/evil-escape/evil-escape.el delete mode 100644 spacemacs/extensions/key-chord/key-chord.el diff --git a/contrib/smex/packages.el b/contrib/smex/packages.el index 053a6d4b4729..f2902bc64d65 100644 --- a/contrib/smex/packages.el +++ b/contrib/smex/packages.el @@ -41,8 +41,9 @@ which require an initialization must be listed explicitly in the list.") "g" 'smex-find-function "hdf" 'smex-describe-function "hw" 'smex-where-is)) - (key-chord-define ido-completion-map (kbd "jk") - (cdr (assoc 'ido-mode evil-leader--mode-maps)))) + ;; (key-chord-define ido-completion-map (kbd "jk") + ;; (cdr (assoc 'ido-mode evil-leader--mode-maps))) + ) (evil-leader/set-key dotspacemacs-command-key 'spacemacs/smex) (evil-leader/set-key "m:" 'spacemacs/smex-major-mode-commands) diff --git a/spacemacs/extensions.el b/spacemacs/extensions.el index 0681ba65bc27..f5ca37f8f33a 100644 --- a/spacemacs/extensions.el +++ b/spacemacs/extensions.el @@ -12,16 +12,14 @@ ;; Extensions are in emacs_paths/extensions ;; Pre extensions are loaded *before* the packages -(defvar spacemacs-pre-extensions - '( - key-chord - )) +(defvar spacemacs-pre-extensions '()) ;; Post extensions are loaded *after* the packages (defvar spacemacs-post-extensions '( centered-cursor emoji-cheat-sheet + evil-escape evil-lisp-state helm-rcirc helm-spacemacs @@ -60,6 +58,13 @@ (use-package emoji-cheat-sheet :commands emoji-cheat-sheet)) +(defun spacemacs/init-evil-escape () + (use-package evil-escape + :init + (evil-escape-mode) + :config + (spacemacs|hide-lighter evil-escape-mode))) + (defun spacemacs/init-evil-lisp-state () (require 'evil-lisp-state)) diff --git a/spacemacs/extensions/evil-escape/README.md b/spacemacs/extensions/evil-escape/README.md new file mode 100644 index 000000000000..63bf39ed67b2 --- /dev/null +++ b/spacemacs/extensions/evil-escape/README.md @@ -0,0 +1,86 @@ +# evil-escape +[![MELPA](http://melpa.org/packages/evil-escape-badge.svg)](http://melpa.org/#/evil-escape) +[![MELPA Stable](http://stable.melpa.org/packages/evil-escape-badge.svg)](http://stable.melpa.org/#/evil-escape) + + +**Table of Contents** + +- [evil-escape](#evil-escape) + - [Install](#install) + - [Usage](#usage) + - [Customization](#customization) + - [Key sequence](#key-sequence) + - [Delay between keys](#delay-between-keys) + + + +Customizable key sequence to escape from insert state and everything else in +Emacs. + +Press quickly `fd` (or the 2-keys sequence of your choice) to: + +- escape from all evil states to normal state +- escape from evil-lisp-state to normal state +- abort evil ex command +- quit minibuffer +- abort isearch +- quit magit buffers +- quit help buffers +- quit apropos buffers +- quit ert buffers +- quit undo-tree buffer +- quit paradox +- quit gist-list menu +- hide neotree buffer + +And more to come ! + +Contributions to support more buffers are _very welcome_: +**Escape Everything !** + +## Install + +The package _will be available soon_ in [MELPA][]. + +If you have MELPA in `package-archives`, use + + M-x package-install RET evil-escape RET + +If you don't, open `evil-escape.el` in Emacs and call +`package-install-from-buffer`. + +## Usage + +To toggle the `evil-escape` mode globally: + + M-x evil-escape-mode + +## Customization + +### Key sequence + +The key sequence can be customized with the variable `evil-escape-key-sequence`. +For instance to change it for `jk`: + +```elisp +(setq-default evil-escape-key-sequence "jk") +``` + +**Note:** The variable `evil-escape-key-sequence` must be set before requiring +`evil-escape`. + +### Delay between keys + +The delay between the two key presses can be customized with the variable +`evil-escape-delay`. The default value is `0.1`. If your key sequence is +composed with the two same characters it is recommended to set the delay to +`0.2`. + +```elisp +(setq-default evil-escape-delay 0.2) +``` + +**Note:** The variable `evil-escape-delay` must be set before requiring +`evil-escape`. + +[MELPA]: http://melpa.org/ diff --git a/spacemacs/extensions/evil-escape/evil-escape.el b/spacemacs/extensions/evil-escape/evil-escape.el new file mode 100644 index 000000000000..a21737f5d065 --- /dev/null +++ b/spacemacs/extensions/evil-escape/evil-escape.el @@ -0,0 +1,269 @@ +;;; evil-escape.el --- Escape from anything with a customizable key sequence + +;; Copyright (C) 2014-2015 syl20bnr +;; +;; Author: Sylvain Benner +;; Keywords: convenience editing evil +;; Created: 22 Oct 2014 +;; Version: 2.0 +;; Package-Requires: ((emacs "24") (evil "1.0.9")) +;; URL: https://github.com/syl20bnr/evil-escape + +;; This file is not part of GNU Emacs. + +;; This program 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. + +;; This program 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 this program. If not, see . + +;;; Commentary: + +;; Press `fd` quickly to: +;; ---------------------- + +;; - escape from all evil states to normal state +;; - escape from evil-lisp-state to normal state +;; - abort evil ex command +;; - quit minibuffer +;; - abort isearch +;; - quit magit buffers +;; - quit help buffers +;; - quit apropos buffers +;; - quit ert buffers +;; - quit undo-tree buffer +;; - quit paradox +;; - quit gist-list menu +;; - hide neotree buffer +;; And more to come ! + +;; Configuration: +;; -------------- + +;; The key sequence can be customized with the variable +;; `evil-escape-key-sequence' +;; It must be set before requiring evil-escape. + +;; The delay between the two key presses can be customized with +;; the variable `evil-escape-delay'. Default is `0.1'. +;; It must be set before requiring evil-escape. + +;; More information in the readme of the repository: +;; https://github.com/syl20bnr/evil-escape + +;;; Code: + +(require 'evil) + +(defgroup evil-escape nil + "Key sequence to escape insert state and everything else." + :prefix "evil-escape-" + :group 'evil) + +(eval-and-compile + (defcustom evil-escape-key-sequence (kbd "fd") + "Two keys sequence to escape from insert state." + :type 'key-sequence + :group 'evil-escape) + + (defcustom evil-escape-delay 0.1 + "Max time delay between the two key press to be considered successful." + :type 'number + :group 'evil-escape)) + +(defvar evil-escape-motion-state-shadowed-func nil + "Original function of `evil-motion-state' shadowed by `evil-espace'. +This variable is used to restore the original function bound to the +first key of the escape key sequence when `evil-escape' +mode is disabled.") + +(defvar evil-escape-isearch-shadowed-func nil + "Original function of `isearch-mode-map' shadowed by `evil-escape'. +This variable is used to restore the original function bound to the +first key of the escape key sequence when `evil-escape' +mode is disabled.") + +;;;###autoload +(define-minor-mode evil-escape-mode + "Buffer-local minor mode to escape insert state and everythin else +with a key sequence." + :lighter (:eval (concat " " evil-escape-key-sequence)) + :group 'evil + :global t + (if evil-escape-mode + (progn + (evil-escape--define-keys) + (message "evil-escape enabled, press \"%s\" to escape from anything." + evil-escape-key-sequence)) + (evil-escape--undefine-keys))) + +(eval-and-compile + (defun evil-escape--first-key () + "Return the first key string in the key sequence." + (let* ((first-key (elt evil-escape-key-sequence 0)) + (fkeystr (char-to-string first-key))) + fkeystr))) + +(defmacro evil-escape-define-escape (from map command &rest properties) + "Define a function to escape from FROM in MAP keymap by executing COMMAND. + +`:shadowed-func FUNCTION' + If non nil specify the shadowed function from the first key of the + sequence. + +`:insert-func FUNCTION' + Specify the insert function to call when inserting the first key. + +`:delete-func FUNCTION' + Specify the delete function to call when deleting the first key." + (let ((shadowed-func (plist-get properties :shadowed-func)) + (insert-func (plist-get properties :insert-func)) + (delete-func (plist-get properties :delete-func))) + `(progn + (define-key ,map ,(evil-escape--first-key) + (evil-define-motion ,(intern (format "evil-escape-%s" from)) + (count) + ;; called by the user + (if (called-interactively-p 'interactive) + (evil-escape--escape ,evil-escape-key-sequence + ',command + ',shadowed-func + ',insert-func + ',delete-func) + ;; not called by the user, i.e. called by a keyboard macro + (when (fboundp ',insert-func) + (funcall ',insert-func ,(evil-escape--first-key))))))))) + +(defun evil-escape--define-keys () + "Set the key bindings to escape _everything!_" + (setq evil-escape-motion-state-shadowed-func + (lookup-key evil-motion-state-map (evil-escape--first-key))) + ;; evil states + ;; insert state + (eval `(evil-escape-define-escape "insert-state" evil-insert-state-map evil-normal-state + :insert-func evil-escape--default-insert-func + :delete-func evil-escape--default-delete-func)) + ;; emacs state + (let ((exit-func (lambda () (interactive) + (cond ((string-match "magit" (symbol-name major-mode)) + (evil-escape--escape-with-q)) + ((eq 'paradox-menu-mode major-mode) + (paradox-quit-and-close)) + ((eq 'gist-list-menu-mode major-mode) + (quit-window)) + (t evil-normal-state))))) + (eval `(evil-escape-define-escape "emacs-state" evil-emacs-state-map ,exit-func))) + ;; visual state + (eval `(evil-escape-define-escape "visual-state" evil-visual-state-map evil-exit-visual-state + :shadowed-func ,evil-escape-motion-state-shadowed-func)) + ;; motion state + (let ((exit-func (lambda () (interactive) + (cond ((or (eq 'apropos-mode major-mode) + (eq 'help-mode major-mode) + (eq 'ert-results-mode major-mode) + (eq 'ert-simple-view-mode major-mode)) + (quit-window)) + ((eq 'undo-tree-visualizer-mode major-mode) + (undo-tree-visualizer-quit)) + ((eq 'neotree-mode major-mode) (neotree-hide)) + (t (evil-normal-state)))))) + (eval `(evil-escape-define-escape "motion-state" evil-motion-state-map ,exit-func + :shadowed-func ,evil-escape-motion-state-shadowed-func))) + ;; mini-buffer + (eval `(evil-escape-define-escape "minibuffer" minibuffer-local-map abort-recursive-edit + :insert-func evil-escape--default-insert-func + :delete-func evil-escape--default-delete-func)) + ;; evil ex command + (eval `(evil-escape-define-escape "ex-command" evil-ex-completion-map abort-recursive-edit + :insert-func evil-escape--default-insert-func + :delete-func evil-escape--default-delete-func)) + ;; isearch + (setq evil-escape-isearch-shadowed-func + (lookup-key isearch-mode-map (evil-escape--first-key))) + (eval `(evil-escape-define-escape "isearch" isearch-mode-map isearch-abort + :insert t + :delete t + :shadowed-func ,evil-escape-isearch-shadowed-func + :insert-func evil-escape--isearch-insert-func + :delete-func isearch-delete-char)) + ;; lisp state if installed + (eval-after-load 'evil-lisp-state + '(eval '(evil-escape-define-escape "lisp-state" evil-lisp-state-map evil-normal-state)))) + +(defun evil-escape--undefine-keys () + "Unset the key bindings defined in `evil-escape--define-keys'." + (let ((first-key (evil-escape--first-key))) + ;; motion state + (if evil-escape-motion-state-shadowed-func + (define-key evil-motion-state-map + (kbd first-key) evil-escape-motion-state-shadowed-func)) + ;; isearch + (if evil-escape-isearch-shadowed-func + (define-key isearch-mode-map + (kbd first-key) evil-escape-isearch-shadowed-func)))) + +(defun evil-escape--default-insert-func (key) + "Insert KEY in current buffer if not read only." + (when (not buffer-read-only) (insert key))) + +(defun evil-escape--isearch-insert-func (key) + "Insert KEY in current buffer if not read only." + (isearch-printing-char)) + +(defun evil-escape--default-delete-func () + "Delete char in current buffer if not read only." + (when (not buffer-read-only) (delete-char -1))) + +(defun evil-escape--escape-with-q () + "Send `q' key press event to exit from a buffer." + (setq unread-command-events (listify-key-sequence "q"))) + +(defun evil-escape--escape + (keys callback &optional shadowed-func insert-func delete-func) + "Execute the passed CALLBACK using KEYS. KEYS is a cons cell of 2 characters. + +If the first key insertion shadowed a function then pass the shadowed function +in SHADOWED-FUNC and it will be executed if the key sequence was not + successfull. + +If INSERT-FUNC is not nil then the first key pressed is inserted using the + function INSERT-FUNC. + +If DELETE-FUNC is not nil then the first key is deleted using the function +DELETE-FUNC when calling CALLBACK. " + (let* ((modified (buffer-modified-p)) + (insertf (if insert-func + insert-func 'evil-escape--default-insert-func)) + (deletef (if delete-func + delete-func 'evil-escape--default-delete-func)) + (fkey (elt keys 0)) + (fkeystr (char-to-string fkey)) + (skey (elt keys 1))) + (if insert-func (funcall insert-func fkey)) + (let* ((evt (read-event nil nil evil-escape-delay))) + (cond + ((null evt) + (unless (eq 'insert evil-state) + (if shadowed-func (call-interactively shadowed-func)))) + ((and (integerp evt) + (char-equal evt skey)) + ;; remove the f character + (if delete-func (funcall delete-func)) + (set-buffer-modified-p modified) + (call-interactively callback)) + (t ; otherwise + (setq unread-command-events + (append unread-command-events (list evt))) + (unless (eq 'insert evil-state) + (if shadowed-func (call-interactively shadowed-func)))))))) + +(provide 'evil-escape) + +;;; evil-escape.el ends here diff --git a/spacemacs/extensions/key-chord/key-chord.el b/spacemacs/extensions/key-chord/key-chord.el deleted file mode 100644 index b76531cbaad8..000000000000 --- a/spacemacs/extensions/key-chord/key-chord.el +++ /dev/null @@ -1,370 +0,0 @@ -;;; key-chord.el --- map pairs of simultaneously pressed keys to commands -;;------------------------------------------------------------------- -;; -;; Copyright (C) 2003,2005,2008,2012 David Andersson -;; -;; This file is NOT part of Emacs. -;; -;; This program 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 2 of -;; the License, or (at your option) any later version. -;; -;; This program 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 this program; if not, write to the Free -;; Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, -;; MA 02111-1307 USA -;; -;;------------------------------------------------------------------- - -;; Author: David Andersson -;; Created: 27 April 2003 -;; Version: 20140929.2246 -;; X-Original-Version: 0.6 (2012-10-23) -;; Keywords: keyboard chord input - -;;; Commentary: - -;; ######## Compatibility ######################################## -;; -;; Works with Emacs-20.3, 20.6, 20.7, 21.2, 21.4, 22.1 and 23.1 -;; Does not work with Emacs-19.31 nor XEmacs-20.4 and 21.4. - -;; ######## Quick start ######################################## -;; -;; Add to your ~/.emacs -;; -;; (require 'key-chord) -;; (key-chord-mode 1) -;; -;; and some chords, for example -;; -;; (key-chord-define-global "hj" 'undo) -;; (key-chord-define-global ",." "<>\C-b") - -;; ######## Terminology ######################################## -;; -;; In this package, a "key chord" is two keys pressed simultaneously, -;; or a single key quickly pressed twice. -;; -;; (Sometimes pressing SHIFT and/or META plus another key is call a chord, -;; but not here. However SHIFT plus two normal keys can be a "key chord".) - -;; ######## Description ######################################## -;; -;; Key chord mode acts like a global minor mode controlled by the function -;; `key-chord-mode'. -;; -;; Key chord definitions are stored in ordinary key-maps. -;; The function `key-chord-define-global' defines a chord in the global -;; key-map and `key-chord-define' defines a chord in a specified key-map, -;; for example for a specific mode. -;; -;; A TWO-key chord is two distinct keys pressed simultaneously (within -;; one tenth of a second, or so). -;; -;; Examples: -;; -;; (key-chord-define-global ",." "<>\C-b") -;; (key-chord-define-global "hj" 'undo) -;; (key-chord-define-global [?h ?j] 'undo) ; the same -;; (key-chord-define-global "jk" 'dabbrev-expand) -;; (key-chord-define-global "cv" 'reindent-then-newline-and-indent) -;; (key-chord-define-global "4r" "$") -;; -;; Comma and dot pressed together insert a pair of angle brackets. -;; `h' and `j' pressed together invoke the undo command. -;; `j' and `k' pressed together invoke the dabbrev-expand command. -;; 'c' and 'v' pressed together insert a newline. -;; `4' and `r' pressed together insert a dollar sign. -;; -;; A ONE-key chord is a single key quickly pressed twice (within one third -;; of a second or so). -;; -;; Examples: -;; -;; (key-chord-define-global "''" "`'\C-b") -;; (key-chord-define-global ",," 'indent-for-comment) -;; (key-chord-define-global "qq" "the ") -;; (key-chord-define-global "QQ" "The ") -;; -;; Tick (') pressed twice inserts a back-tick and a tick (`'). -;; Comma (,) pressed twice indents for and/or inserts a comment. -;; `q' pressed twice inserts the word "the ". -;; -;; Examples: Mode specific chords -;; -;; (key-chord-define c++-mode-map ";;" "\C-e;") -;; (key-chord-define c++-mode-map "{}" "{\n\n}\C-p\t") -;; -;; The command `key-chord-describe' lists currently defined key chords. -;; The standard command `describe-bindings' (C-h b) will also show key chords. -;; -;; The standard command `describe-key' (C-h k) will accept a key chord and -;; show its definition. (Isn't that amazing. There is no explicit code to -;; carry out this functionality.) - -;; ######## Tips ######################################## -;; -;; Don't chord key combinations that exists in the languages you typically -;; write. Otherwise, if you are typing fast, two key intended to be separate -;; letters might instead trig a chord. -;; E.g. "uu" would be a good chord in spanish but not in finnish, and -;; "hj" would be a good chord in english but not in swedish. -;; -;; Don't rely solely on /usr/dict/words to find unusual combination. -;; For example "cv" or "fg" can be quite common in certain kinds of -;; programming. Grep your own texts to verify that a combination is unusual. -;; And don't forget to check both permutations: "fg" and "gf". -;; -;; Choose two keys that are close to each other on the keyboard, so they -;; can be quickly typed without effort. Chords involving two hands (as -;; opposed to two fingers on one hand) are harder to type (quickly). -;; The idea is that key chords are to replace function keys for functions -;; that are frequently performed while the hands are in writing position. -;; -;; Key chords might not work well over a slow network. - -;; ######## Limitations ######################################## -;; -;; When recording keyboard macros, the time between keyboard inputs are not -;; recorded. Thus, the key-chord-input-method cannot know for sure if two keys -;; in a macro was a chord or not. The current solution remembers the first key -;; of the chords typed during macro recording, and keys that match those (and -;; are defined as chords) are considered key-chords during macro execution. -;; This knowledge is not saved with `name-last-kbd-macro', so they may -;; execute wrong if they contain pair of keys that match defined chords. -;; -;; Emacs will not call input-method-function for keys that have non numeric -;; codes or whos code is outside the range 32..126. Thus you cannot define -;; key chords involving function keys, control keys, or even your non-english -;; letters (on national keyboards) that otherwise are well positioned for -;; chording on your keyboard. -;; (I think chording left and right arrow keys would be useful, but cannot do. -;; I consider this a bug in Emacs. Input methods could happily return -;; unmodified *any* key they don't know about.) -;; -;; Key chords longer that 2 keys are not supported. It could be done, but I -;; don't think it is worth the trubbel since most keyboards will not reliably -;; send all key codes when 3 or more keys are pressed simultaneously. -;; It might also be a bit trickier to maintain performance. -;; -;; Key chord mode uses input-method-function. And so do internationalisation -;; packages (mule, quail, etc). Do not expect them to work well together. -;; The last one that gets the input-method-function rules. - -;; ######## Implementation ######################################## -;; -;; Key chords piggy back in ordinary key maps, so they can be defined -;; per mode without having to add hooks to all modes. -;; -;; Key chord key codes are vectors beginning with the atom `key-chord'. -;; A two key chord, e.g. "hj", will add two entries in the key-map. -;; E.g. [key-chord ?h ?j] and [key-chord ?j ?h]. -;; -;; When key-chord-mode is enabled input-method-function is set to -;; key-chord-input-method. - -;; ######## To do ######################################## -;; -;; * Find a way to save key-chord info in keyboard macros. -;; -;; * Save previous value of input-method-function? And call it? -;; -;; * input-method-function is reset in *info* buffers! What to do? -;; -;; * How to enter interactively command OR string in key-chord-define-global? -;; -;; * Customize public vars (defcustom). - -;; ######## History ######################################## -;; -;; 0.6 (2012-10-23) l.david.andersson(at)sverige.nu -;; Add key-chord-define-local, key-chord-unset-local, key-chord-unset-global -;; 0.5 (2008-09-15) david(at)symsoft.se -;; Bugfix sit-for; Improved examples; New E-mail in comment -;; 0.4 (2005-05-07) david(at)symsoft.se -;; Slightly better macro heuristics; Added option key-chord-in-macros -;; 0.3 (2005-04-14) david(at)symsoft.se -;; Require advice; More examples -;; 0.2 (2003-09-13) david(at)symsoft.se -;; Quick and dirty fix for keyboard macros -;; 0.1 (2003-04-27) david(at)symsoft.se -;; First release - -;;; Code: - -(defvar key-chord-two-keys-delay 0.1 ; 0.05 or 0.1 - "Max time delay between two key press to be considered a key chord.") - -(defvar key-chord-one-key-delay 0.2 ; 0.2 or 0.3 to avoid first autorepeat - "Max time delay between two press of the same key to be considered a key chord. -This should normally be a little longer than `key-chord-two-keys-delay'.") - -(defvar key-chord-in-macros t - "If nil, don't expand key chords when executing keyboard macros. -If non-nil, expand chord sequenses in macros, but only if a similar chord was -entered during the last interactive macro recording. (This carries a bit of -guesswork. We can't know for sure when executing whether two keys were -typed quickly or slowly when recorded.)") - -;; Internal vars -(defvar key-chord-mode nil) - -;; Shortcut for key-chord-input-method: no need to test a key again if it -;; didn't matched a chord the last time. Improves feedback during autorepeat. -(defvar key-chord-last-unmatched nil) - -;; Macro heuristics: Keep track of which chords was used when the last macro -;; was defined. Or rather, only the first-char of the chords. Only expand -;; matching chords during macro execution. -(defvar key-chord-in-last-kbd-macro nil) -(defvar key-chord-defining-kbd-macro nil) - -;;;###autoload -(defun key-chord-mode (arg) - "Toggle key chord mode. -With positive ARG enable the mode. With zero or negative arg disable the mode. -A key chord is two keys that are pressed simultaneously, or one key quickly -pressed twice. -\nSee functions `key-chord-define-global', `key-chord-define-local', and -`key-chord-define' and variables `key-chord-two-keys-delay' and -`key-chord-one-key-delay'." - - (interactive "P") - (setq key-chord-mode (if arg - (> (prefix-numeric-value arg) 0) - (not key-chord-mode))) - (cond (key-chord-mode - (setq input-method-function 'key-chord-input-method) - (message "Key Chord mode on")) - (t - (setq input-method-function nil) - (message "Key Chord mode off")))) - -;;;###autoload -(defun key-chord-define-global (keys command) - "Define a key-chord of the two keys in KEYS starting a COMMAND. -\nKEYS can be a string or a vector of two elements. Currently only elements -that corresponds to ascii codes in the range 32 to 126 can be used. -\nCOMMAND can be an interactive function, a string, or nil. -If COMMAND is nil, the key-chord is removed. -\nNote that KEYS defined locally in the current buffer will have precedence." - (interactive "sSet key chord globally (2 keys): \nCSet chord \"%s\" to command: ") - (key-chord-define (current-global-map) keys command)) - -;;;###autoload -(defun key-chord-define-local (keys command) - "Locally define a key-chord of the two keys in KEYS starting a COMMAND. -\nKEYS can be a string or a vector of two elements. Currently only elements -that corresponds to ascii codes in the range 32 to 126 can be used. -\nCOMMAND can be an interactive function, a string, or nil. -If COMMAND is nil, the key-chord is removed. -\nThe binding goes in the current buffer's local map, -which in most cases is shared with all other buffers in the same major mode." - (interactive "sSet key chord locally (2 keys): \nCSet chord \"%s\" to command: ") - (key-chord-define (current-local-map) keys command)) - -(defun key-chord-unset-global (keys) - "Remove global key-chord of the two keys in KEYS." - (interactive "sUnset key chord globally (2 keys): ") - (key-chord-define (current-local-map) keys nil)) - -(defun key-chord-unset-local (keys) - "Remove local key-chord of the two keys in KEYS." - (interactive "sUnset key chord locally (2 keys): ") - (key-chord-define (current-local-map) keys nil)) - -;;;###autoload -(defun key-chord-define (keymap keys command) - "Define in KEYMAP, a key-chord of the two keys in KEYS starting a COMMAND. -\nKEYS can be a string or a vector of two elements. Currently only elements -that corresponds to ascii codes in the range 32 to 126 can be used. -\nCOMMAND can be an interactive function, a string, or nil. -If COMMAND is nil, the key-chord is removed." - (if (/= 2 (length keys)) - (error "Key-chord keys must have two elements")) - ;; Exotic chars in a string are >255 but define-key wants 128..255 for those - (let ((key1 (logand 255 (aref keys 0))) - (key2 (logand 255 (aref keys 1)))) - (if (eq key1 key2) - (define-key keymap (vector 'key-chord key1 key2) command) - ;; else - (define-key keymap (vector 'key-chord key1 key2) command) - (define-key keymap (vector 'key-chord key2 key1) command)))) - -(defun key-chord-lookup-key1 (keymap key) - "Like lookup-key but no third arg and no numeric return value." - (let ((res (lookup-key keymap key))) - (if (numberp res) - nil - ;; else - res))) - -(defun key-chord-lookup-key (key) - "Lookup KEY in all current key maps." - (let ((maps (current-minor-mode-maps)) - res) - (while (and maps (not res)) - (setq res (key-chord-lookup-key1 (car maps) key) - maps (cdr maps))) - (or res - (if (current-local-map) - (key-chord-lookup-key1 (current-local-map) key)) - (key-chord-lookup-key1 (current-global-map) key)))) - -(defun key-chord-describe () - "List key chord bindings in a help buffer. -\nTwo key chords will be listed twice and there will be Prefix Commands. -Please ignore that." - (interactive) - (describe-bindings [key-chord])) - -(defun key-chord-input-method (first-char) - "Input method controlled by key bindings with the prefix `key-chord'." - (if (and (not (eq first-char key-chord-last-unmatched)) - (key-chord-lookup-key (vector 'key-chord first-char))) - (let ((delay (if (key-chord-lookup-key (vector 'key-chord first-char first-char)) - key-chord-one-key-delay - ;; else - key-chord-two-keys-delay))) - (if (if executing-kbd-macro - (not (memq first-char key-chord-in-last-kbd-macro)) - (sit-for delay 0 'no-redisplay)) - (progn - (setq key-chord-last-unmatched nil) - (list first-char)) - ;; else input-pending-p - (let* ((input-method-function nil) - (next-char (read-event)) - (res (vector 'key-chord first-char next-char))) - (if (key-chord-lookup-key res) - (progn - (setq key-chord-defining-kbd-macro - (cons first-char key-chord-defining-kbd-macro)) - (list 'key-chord first-char next-char)) - ;; else put back next-char and return first-char - (setq unread-command-events (cons next-char unread-command-events)) - (if (eq first-char next-char) - (setq key-chord-last-unmatched first-char)) - (list first-char))))) - ;; else no key-chord keymap - (setq key-chord-last-unmatched first-char) - (list first-char))) - -(require 'advice) - -(defadvice start-kbd-macro (after key-chord activate) - (setq key-chord-defining-kbd-macro nil)) - -(defadvice end-kbd-macro (after key-chord activate) - (setq key-chord-in-last-kbd-macro key-chord-defining-kbd-macro)) - -(provide 'key-chord) - -;;; key-chord.el ends here diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 32ef37d391db..98d292f383cd 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -32,7 +32,6 @@ eldoc evil evil-args - evil-escape evil-exchange evil-iedit-state evil-indent-textobject @@ -624,13 +623,6 @@ which require an initialization must be listed explicitly in the list.") (define-key evil-inner-text-objects-map "a" 'evil-inner-arg) (define-key evil-outer-text-objects-map "a" 'evil-outer-arg)))) -(defun spacemacs/init-evil-escape () - (use-package evil-escape - :init - (evil-escape-mode) - :config - (spacemacs|hide-lighter evil-escape-mode))) - (defun spacemacs/init-evil-exchange () (use-package evil-exchange :init (evil-exchange-install))) @@ -647,14 +639,15 @@ which require an initialization must be listed explicitly in the list.") (define-key evil-iedit-state-map (kbd evil-leader/leader) evil-leader--default-map) ;; evil-escape support - (when (and (boundp 'evil-escape-mode) - (symbol-value evil-escape-mode)) - (key-chord-define evil-iedit-state-map - evil-escape-key-sequence - 'evil-iedit-state/quit-iedit-mode) - (key-chord-define evil-iedit-insert-state-map - evil-escape-key-sequence - 'evil-iedit-state/quit-iedit-mode))) + ;; (when (and (boundp 'evil-escape-mode) + ;; (symbol-value evil-escape-mode)) + ;; (key-chord-define evil-iedit-state-map + ;; evil-escape-key-sequence + ;; 'evil-iedit-state/quit-iedit-mode) + ;; (key-chord-define evil-iedit-insert-state-map + ;; evil-escape-key-sequence + ;; 'evil-iedit-state/quit-iedit-mode)) + ) (evil-leader/set-key "se" 'evil-iedit-state/iedit-mode) (add-to-hooks 'spacemacs/evil-state-lazy-loading '(prog-mode-hook @@ -695,9 +688,9 @@ which require an initialization must be listed explicitly in the list.") (define-key evil-motion-state-map (kbd dotspacemacs-leader-key) evil-leader--default-map) ;; experimental: invoke leader with "jk" in insert mode - (when dotspacemacs-feature-toggle-leader-on-jk - (key-chord-define evil-insert-state-map (kbd "jk") - evil-leader--default-map)) + ;; (when dotspacemacs-feature-toggle-leader-on-jk + ;; (key-chord-define evil-insert-state-map (kbd "jk") + ;; evil-leader--default-map)) ;; experimental: map SPC m to , (when dotspacemacs-major-mode-leader-key (add-hook 'after-change-major-mode-hook 'spacemacs/activate-major-mode-leader)) @@ -1193,20 +1186,20 @@ which require an initialization must be listed explicitly in the list.") (define-key helm-map (kbd "C-h") 'helm-next-source) (define-key helm-map (kbd "C-l") 'helm-previous-source) ;; experimental: toggle evil-leader with "jk" with helm specific commands - (when dotspacemacs-feature-toggle-leader-on-jk - (evil-leader/set-key-for-mode 'helm-mode - "1" (lambda () (interactive) (helm-select-nth-action 0)) - "2" (lambda () (interactive) (helm-select-nth-action 1)) - "3" (lambda () (interactive) (helm-select-nth-action 2)) - "4" (lambda () (interactive) (helm-select-nth-action 3)) - "5" (lambda () (interactive) (helm-select-nth-action 4)) - "6" (lambda () (interactive) (helm-select-nth-action 5)) - "7" (lambda () (interactive) (helm-select-nth-action 6)) - "8" (lambda () (interactive) (helm-select-nth-action 7)) - "9" (lambda () (interactive) (helm-select-nth-action 8)) - "0" (lambda () (interactive) (helm-select-nth-action 9)) - "a" 'helm-select-action) - (key-chord-define helm-map (kbd "jk") (cdr (assoc 'helm-mode evil-leader--mode-maps)))) + ;; (when dotspacemacs-feature-toggle-leader-on-jk + ;; (evil-leader/set-key-for-mode 'helm-mode + ;; "1" (lambda () (interactive) (helm-select-nth-action 0)) + ;; "2" (lambda () (interactive) (helm-select-nth-action 1)) + ;; "3" (lambda () (interactive) (helm-select-nth-action 2)) + ;; "4" (lambda () (interactive) (helm-select-nth-action 3)) + ;; "5" (lambda () (interactive) (helm-select-nth-action 4)) + ;; "6" (lambda () (interactive) (helm-select-nth-action 5)) + ;; "7" (lambda () (interactive) (helm-select-nth-action 6)) + ;; "8" (lambda () (interactive) (helm-select-nth-action 7)) + ;; "9" (lambda () (interactive) (helm-select-nth-action 8)) + ;; "0" (lambda () (interactive) (helm-select-nth-action 9)) + ;; "a" 'helm-select-action) + ;; (key-chord-define helm-map (kbd "jk") (cdr (assoc 'helm-mode evil-leader--mode-maps)))) ;; eshell (defun spacemacs/helm-eshell-history () @@ -1357,14 +1350,15 @@ which require an initialization must be listed explicitly in the list.") (define-key ido-completion-map (kbd "") 'ido-next-match) (define-key ido-completion-map (kbd "") 'ido-delete-backward-updir) (define-key ido-completion-map (kbd "") 'ido-exit-minibuffer) - (when dotspacemacs-feature-toggle-leader-on-jk - (evil-leader/set-key-for-mode 'ido-mode - "s" 'ido-invoke-in-vertical-split - "t" 'ido-invoke-in-new-frame - "v" 'ido-invoke-in-horizontal-split - "x" 'ido-invoke-in-other-window) - (key-chord-define ido-completion-map (kbd "jk") - (cdr (assoc 'ido-mode evil-leader--mode-maps))))) + ;; (when dotspacemacs-feature-toggle-leader-on-jk + ;; (evil-leader/set-key-for-mode 'ido-mode + ;; "s" 'ido-invoke-in-vertical-split + ;; "t" 'ido-invoke-in-new-frame + ;; "v" 'ido-invoke-in-horizontal-split + ;; "x" 'ido-invoke-in-other-window) + ;; (key-chord-define ido-completion-map (kbd "jk") + ;; (cdr (assoc 'ido-mode evil-leader--mode-maps)))) + ) (add-to-list 'ido-setup-hook 'spacemacs//ido-vertical-define-keys)) )) From 27710e56d0a68d9a653e639a0605f69974aacb31 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Sat, 17 Jan 2015 23:15:35 -0500 Subject: [PATCH 25/28] Bump version to 0.48.0 --- core/spacemacs-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spacemacs-mode.el b/core/spacemacs-mode.el index 1b29d0dbf6f1..ba70044c65bd 100644 --- a/core/spacemacs-mode.el +++ b/core/spacemacs-mode.el @@ -17,7 +17,7 @@ (require 'emacs-backports) (require 'themes-support) -(defconst spacemacs-version "0.47.0" +(defconst spacemacs-version "0.48.0" "Spacemacs version.") (defconst spacemacs-min-version "24.3" "Mininal required version of Emacs.") From c8c14a4137bef6da2fc276283a09fcfbf228fa28 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Sat, 17 Jan 2015 23:40:31 -0500 Subject: [PATCH 26/28] Fixes #437 Tips For Emacs Users Missing Remove the mention from documentation since it does not longer exists. --- doc/DOCUMENTATION.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index b8f7528b999a..2e2bb91ada2f 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -229,7 +229,7 @@ It is also a good fit for people wanting to **lower the [risk of RSI][RSI]** induced by the default Emacs key bindings. Emacs users wanting to learn **a different way to edit files** or wanting to -learn Vim key bindings (see [Tips for Emacs users](#tips-for-emacs-users)). +learn Vim key bindings. As a side note, if you are a programmer and you don't know Vim key bindings yet, I deeply recommend you to learn the basics as recommended in From ff10d727ad3d18e4e77e6c401e0eedc28a2e35cc Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Sun, 18 Jan 2015 00:13:27 -0500 Subject: [PATCH 27/28] Fix multiple insertion of `f` in isearch and ex-command contexts --- .../extensions/evil-escape/evil-escape.el | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/spacemacs/extensions/evil-escape/evil-escape.el b/spacemacs/extensions/evil-escape/evil-escape.el index a21737f5d065..1395c2fd12e4 100644 --- a/spacemacs/extensions/evil-escape/evil-escape.el +++ b/spacemacs/extensions/evil-escape/evil-escape.el @@ -5,7 +5,7 @@ ;; Author: Sylvain Benner ;; Keywords: convenience editing evil ;; Created: 22 Oct 2014 -;; Version: 2.0 +;; Version: 2.01 ;; Package-Requires: ((emacs "24") (evil "1.0.9")) ;; URL: https://github.com/syl20bnr/evil-escape @@ -225,6 +225,14 @@ with a key sequence." "Send `q' key press event to exit from a buffer." (setq unread-command-events (listify-key-sequence "q"))) +(defun evil-escape--execute-shadow-func (func) + "Execute the passed FUNC if the context allows it." + (unless (or (null func) + (eq 'insert evil-state) + (and (boundp 'isearch-mode) (symbol-value 'isearch-mode)) + (minibufferp)) + (call-interactively func))) + (defun evil-escape--escape (keys callback &optional shadowed-func insert-func delete-func) "Execute the passed CALLBACK using KEYS. KEYS is a cons cell of 2 characters. @@ -239,10 +247,6 @@ If INSERT-FUNC is not nil then the first key pressed is inserted using the If DELETE-FUNC is not nil then the first key is deleted using the function DELETE-FUNC when calling CALLBACK. " (let* ((modified (buffer-modified-p)) - (insertf (if insert-func - insert-func 'evil-escape--default-insert-func)) - (deletef (if delete-func - delete-func 'evil-escape--default-delete-func)) (fkey (elt keys 0)) (fkeystr (char-to-string fkey)) (skey (elt keys 1))) @@ -250,8 +254,7 @@ DELETE-FUNC when calling CALLBACK. " (let* ((evt (read-event nil nil evil-escape-delay))) (cond ((null evt) - (unless (eq 'insert evil-state) - (if shadowed-func (call-interactively shadowed-func)))) + (evil-escape--execute-shadow-func shadowed-func)) ((and (integerp evt) (char-equal evt skey)) ;; remove the f character @@ -261,8 +264,7 @@ DELETE-FUNC when calling CALLBACK. " (t ; otherwise (setq unread-command-events (append unread-command-events (list evt))) - (unless (eq 'insert evil-state) - (if shadowed-func (call-interactively shadowed-func)))))))) + (evil-escape--execute-shadow-func shadowed-func)))))) (provide 'evil-escape) From d7273a5d5f39651a2eeb1bf97ab0ef52e0e7bd31 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Sun, 18 Jan 2015 00:14:16 -0500 Subject: [PATCH 28/28] Bump version to 0.48.1 --- core/spacemacs-mode.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/spacemacs-mode.el b/core/spacemacs-mode.el index ba70044c65bd..e0c841758c37 100644 --- a/core/spacemacs-mode.el +++ b/core/spacemacs-mode.el @@ -17,7 +17,7 @@ (require 'emacs-backports) (require 'themes-support) -(defconst spacemacs-version "0.48.0" +(defconst spacemacs-version "0.48.1" "Spacemacs version.") (defconst spacemacs-min-version "24.3" "Mininal required version of Emacs.")