From 885d092e72aeaa470253c19831ba42e2eecf3514 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 18 Dec 2014 18:51:43 -0500 Subject: [PATCH 1/9] Attempt to fix #298 error with undo-tree --- spacemacs/packages.el | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index cd0285533e72..8bd3d7ab7f01 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -1879,14 +1879,13 @@ determine the state to enable when escaping from the insert state.") (defun spacemacs/init-undo-tree () (use-package undo-tree - :idle (global-undo-tree-mode) :defer t :init - (setq undo-tree-auto-save-history t - undo-tree-history-directory-alist - `(("." . ,(concat spacemacs-cache-directory "undo")))) - (unless (file-exists-p (concat spacemacs-cache-directory "undo")) - (make-directory (concat spacemacs-cache-directory "undo"))) + ;; (setq undo-tree-auto-save-history t + ;; undo-tree-history-directory-alist + ;; `(("." . ,(concat spacemacs-cache-directory "undo")))) + ;; (unless (file-exists-p (concat spacemacs-cache-directory "undo")) + ;; (make-directory (concat spacemacs-cache-directory "undo"))) (setq undo-tree-visualizer-timestamps t) (setq undo-tree-visualizer-diff t) :config From cb427b66b4667d0afe80a88370efc31b976832c8 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 18 Dec 2014 19:47:48 -0500 Subject: [PATCH 2/9] Enable undo-tree mode at startup (no lazy-loading) Attempt to fix #298 --- spacemacs/packages.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index 8bd3d7ab7f01..ceedcb538a3b 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -1879,8 +1879,8 @@ determine the state to enable when escaping from the insert state.") (defun spacemacs/init-undo-tree () (use-package undo-tree - :defer t :init + (global-undo-tree-mode) ;; (setq undo-tree-auto-save-history t ;; undo-tree-history-directory-alist ;; `(("." . ,(concat spacemacs-cache-directory "undo")))) From 12fad08d9a225b0efc8b1a392c7381ff667d1788 Mon Sep 17 00:00:00 2001 From: Andrew Oppenlander Date: Thu, 18 Dec 2014 11:08:36 -0500 Subject: [PATCH 3/9] git-gutter-fringe is now loaded properly before calling git-gutter-mode --- contrib/git/packages.el | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/contrib/git/packages.el b/contrib/git/packages.el index 0585b48b2c98..120f8dfd41b3 100644 --- a/contrib/git/packages.el +++ b/contrib/git/packages.el @@ -43,15 +43,18 @@ which require an initialization must be listed explicitly in the list.") )) (defun git/init-git-gutter-fringe () - (use-package git-gutter + (use-package git-gutter-fringe :defer t :init - (add-to-hooks 'git-gutter-mode '(markdown-mode-hook - org-mode-hook - prog-mode-hook)) + (add-to-hooks + '(lambda () + (require 'git-gutter-fringe) + (git-gutter-mode)) + '(markdown-mode-hook + org-mode-hook + prog-mode-hook)) :config (progn - (require 'git-gutter-fringe) (setq git-gutter:hide-gutter t) ;; Don't need log/message. (setq git-gutter:verbosity 0) From f1187e4bbd1e7febc08eba723f0f3abedb23343b Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 18 Dec 2014 21:27:27 -0500 Subject: [PATCH 4/9] Improve support for git-gutter in terminal and with linum --- contrib/git/packages.el | 58 +++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/contrib/git/packages.el b/contrib/git/packages.el index 120f8dfd41b3..d95c09d415dd 100644 --- a/contrib/git/packages.el +++ b/contrib/git/packages.el @@ -44,15 +44,21 @@ which require an initialization must be listed explicitly in the list.") (defun git/init-git-gutter-fringe () (use-package git-gutter-fringe - :defer t + :commands git-gutter-mode :init - (add-to-hooks - '(lambda () - (require 'git-gutter-fringe) - (git-gutter-mode)) - '(markdown-mode-hook - org-mode-hook - prog-mode-hook)) + (progn + (defun git/load-git-gutter () + "Lazy load git gutter and choose between fringe and no fringe +implementation." + (if (display-graphic-p) + (progn + (require 'git-gutter-fringe) + (git-gutter-mode)) + (git-gutter-mode) + (if global-linum-mode (git-gutter:linum-setup)))) + (add-to-hooks 'git/load-git-gutter '(markdown-mode-hook + org-mode-hook + prog-mode-hook))) :config (progn (setq git-gutter:hide-gutter t) @@ -62,26 +68,26 @@ which require an initialization must be listed explicitly in the list.") ;; (setq git-gutter:update-hooks '(after-save-hook after-revert-hook)) ;; custom graphics that works nice with half-width fringes (fringe-helper-define 'git-gutter-fr:added nil - "..X...." - "..X...." - "XXXXX.." - "..X...." - "..X...." - ) + "..X...." + "..X...." + "XXXXX.." + "..X...." + "..X...." + ) (fringe-helper-define 'git-gutter-fr:deleted nil - "......." - "......." - "XXXXX.." - "......." - "......." - ) + "......." + "......." + "XXXXX.." + "......." + "......." + ) (fringe-helper-define 'git-gutter-fr:modified nil - "..X...." - ".XXX..." - "XXXXX.." - ".XXX..." - "..X...." - ) + "..X...." + ".XXX..." + "XXXXX.." + ".XXX..." + "..X...." + ) (spacemacs|hide-lighter git-gutter-mode)))) (defun git/init-git-messenger () From f2a406abe6c1671f8d9e2aa8478c58689b40d066 Mon Sep 17 00:00:00 2001 From: Andrew Oppenlander Date: Thu, 18 Dec 2014 09:46:46 -0500 Subject: [PATCH 5/9] Fixed tern-auto-complete to load correctly --- contrib/lang/javascript/packages.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/lang/javascript/packages.el b/contrib/lang/javascript/packages.el index 4ca9510221d1..953ca0a4a249 100644 --- a/contrib/lang/javascript/packages.el +++ b/contrib/lang/javascript/packages.el @@ -129,4 +129,4 @@ which require an initialization must be listed explicitly in the list.") (defun javascript/init-tern-auto-complete () (use-package tern-auto-complete :defer t - :config (tern-ac-setup))) + :init (eval-after-load 'tern '(tern-ac-setup)))) From be338e9ee41ba1958d43716144b937f4b898e084 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Thu, 18 Dec 2014 21:39:41 -0500 Subject: [PATCH 6/9] Refactoring of some javascript layer package initialisation --- contrib/lang/javascript/packages.el | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/contrib/lang/javascript/packages.el b/contrib/lang/javascript/packages.el index 953ca0a4a249..f0801bd36a80 100644 --- a/contrib/lang/javascript/packages.el +++ b/contrib/lang/javascript/packages.el @@ -51,7 +51,12 @@ which require an initialization must be listed explicitly in the list.") (defun javascript/init-js2-refactor () (use-package js2-refactor :defer t - :init (eval-after-load 'js2-mode '(require 'js2-refactor)) + :init + (progn + (defun javascript/load-js2-refactor () + "Lazy load js2-refactor" + (require 'js2-refactor)) + (add-hook 'js2-mode-hook 'javascript/load-js2-refactor)) :config (progn ;;(spacemacs/declare-prefix-for-mode 'js2-mode "mr" "refactor") @@ -116,7 +121,7 @@ which require an initialization must be listed explicitly in the list.") (defun javascript/init-tern () (use-package tern :defer t - :init (add-hook 'js2-mode-hook (lambda () (tern-mode t))) + :init (add-hook 'js2-mode-hook 'tern-mode) :config (progn (evil-leader/set-key-for-mode 'js2-mode "mc" 'tern-rename-variable) @@ -129,4 +134,4 @@ which require an initialization must be listed explicitly in the list.") (defun javascript/init-tern-auto-complete () (use-package tern-auto-complete :defer t - :init (eval-after-load 'tern '(tern-ac-setup)))) + :init (add-hook 'tern-mode-hook 'tern-ac-setup))) From a730a9cb572b04d01cba207dbefb0eb3483a55e5 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 19 Dec 2014 00:35:14 -0500 Subject: [PATCH 7/9] Fixes #283 Find a way to map ` m` to `,` --- core/dotspacemacs.el | 4 ++++ core/templates/.spacemacs.template | 3 +++ doc/DOCUMENTATION.md | 21 +++++++++++++++++---- spacemacs/keybindings.el | 13 +++++++++++-- 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/core/dotspacemacs.el b/core/dotspacemacs.el index 4ed27d77316f..b6a0d9fdb5ad 100644 --- a/core/dotspacemacs.el +++ b/core/dotspacemacs.el @@ -13,6 +13,10 @@ Paths must have a trailing slash (ie. `~/.mycontribs/')" (defvar dotspacemacs-leader-key "SPC" "The leader key.") +(defvar dotspacemacs-major-mode-leader-key "," + "Major mode leader key is a shortcut key which is the equivalent of +pressing ` m`") + (defvar dotspacemacs-command-key ":" "The key used for Evil commands (ex-commands) and Emacs commands (M-x). By default the command key is `:' so ex-commands are executed like in Vim diff --git a/core/templates/.spacemacs.template b/core/templates/.spacemacs.template index e1cfa35a6832..6492a15fdd3a 100644 --- a/core/templates/.spacemacs.template +++ b/core/templates/.spacemacs.template @@ -23,6 +23,9 @@ dotspacemacs-default-theme 'solarized-light ;; The leader key dotspacemacs-leader-key "SPC" + ;; Major mode leader key is a shortcut key which is the equivalent of + ;; pressing ` m` + dotspacemacs-major-mode-leader-key "," ;; The command key used for Evil commands (ex-commands) and ;; Emacs commands (M-x). ;; By default the command key is `:' so ex-commands are executed like in Vim diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index 2f9d272e6327..8d00c2920de8 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -113,6 +113,7 @@ - [Errors handling](#errors-handling) - [Compiling](#compiling) - [Modes](#modes) + - [Major Mode leader key](#major-mode-leader-key) - [Helm](#helm) - [Experimental Helm feature](#experimental-helm-feature) - [Ledger](#ledger) @@ -1769,11 +1770,23 @@ Custom fringe bitmaps: ## Modes -`Spacemacs` tries to add more natural Vi key bindings to some modes or -simply add new leader key bindings. +### Major Mode leader key -Leader key bindings start with `m` because they are bindings related to -the current `major mode`. +Key bindings specific to the current `major mode` start with SPC m. +For convenience a shortcut key called the major mode leader key is set by +default on , which saves one precious keystroke. + +It is possible to change the major mode leader key by defining the variable +`dotspacemacs-major-mode-leader-key` in your `~/.spacemacs`. For example to +setup the key on tabulation: + +```elisp +(setq-default dotspacemacs-major-mode-leader-key "\t") +``` + +Caveats: It seems that the `guide-key` does not work with the major mode leader +key, to get the list of the available commands in the `guide-key` buffer you'll +have to use explicitly SPC m. ### Helm diff --git a/spacemacs/keybindings.el b/spacemacs/keybindings.el index 8f7062b68ada..59437e15c793 100644 --- a/spacemacs/keybindings.el +++ b/spacemacs/keybindings.el @@ -7,9 +7,18 @@ (define-key isearch-mode-map (kbd "S-") 'isearch-repeat-forward) (define-key isearch-mode-map (kbd "M-S-") 'isearch-repeat-backward) -;; --------------------------------------------------------------------------- +;; `SPC m' shortcut defined by `dotspacemacs-major-mode-leader-key' +(defun spacemacs/major-mode-leader-key () + "Construct input events to simulate ` m` keys." + (interactive) + (setq unread-command-events (listify-key-sequence + (concat (kbd evil-leader/leader) "m")))) +(define-key evil-normal-state-map + dotspacemacs-major-mode-leader-key 'spacemacs/major-mode-leader-key) +(define-key evil-motion-state-map + dotspacemacs-major-mode-leader-key 'spacemacs/major-mode-leader-key) + ;; Make quit as much as possible -;; --------------------------------------------------------------------------- (define-key minibuffer-local-map (kbd "") 'keyboard-escape-quit) (define-key evil-visual-state-map (kbd "") 'keyboard-quit) (define-key minibuffer-local-ns-map (kbd "") 'keyboard-escape-quit) From cea9af8ae7842595ca0d901bdd9e8bc5d0ed62d2 Mon Sep 17 00:00:00 2001 From: Daniel Wu Date: Thu, 18 Dec 2014 23:04:23 -0500 Subject: [PATCH 8/9] Fixes #283 Find a way to map ` m` to `,` Better version from danielwuz --- doc/DOCUMENTATION.md | 16 ++++++---------- spacemacs/funcs.el | 10 ++++++++++ spacemacs/keybindings.el | 11 ----------- spacemacs/packages.el | 7 ++++++- 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index 8d00c2920de8..6d7ae03088f1 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -1752,8 +1752,8 @@ Errors management commands (star with `f` for `flycheck`): Custom fringe bitmaps: - Symbol | Description -:----------------------------------------------------------------------------------------------:|------------ + Symbol | Description +:----------------------------------:|------------ ![dot-error](img/dot-error.png) | Error ![dot-warning](img/dot-warning.png) | warning ![dot-info](img/dot-info.png) | Info @@ -1764,9 +1764,9 @@ Custom fringe bitmaps: Key Binding | Description ---------------------|------------------------------------------------------------ -SPC c c | use `helm-make` via projectile -SPC c C | compile -SPC c r | recompile +SPC c c | use `helm-make` via projectile +SPC c C | compile +SPC c r | recompile ## Modes @@ -1781,13 +1781,9 @@ It is possible to change the major mode leader key by defining the variable setup the key on tabulation: ```elisp -(setq-default dotspacemacs-major-mode-leader-key "\t") +(setq-default dotspacemacs-major-mode-leader-key "") ``` -Caveats: It seems that the `guide-key` does not work with the major mode leader -key, to get the list of the available commands in the `guide-key` buffer you'll -have to use explicitly SPC m. - ### Helm `Spacemacs` add `hjkl` navigation to `helm` buffers: diff --git a/spacemacs/funcs.el b/spacemacs/funcs.el index e7d8614a0500..fe43d1147f21 100644 --- a/spacemacs/funcs.el +++ b/spacemacs/funcs.el @@ -79,6 +79,16 @@ a key sequence. NAME is a symbol name used as the prefix command." "Remove the evil-leader binding from the passed MAP." (spacemacs/activate-evil-leader-for-maps `(,map))) +(defun spacemacs/activate-major-mode-leader () + "Bind major mode key map to `dotspacemacs-major-mode-leader-key'." + (setq mode-map (cdr (assoc major-mode evil-leader--mode-maps))) + (when mode-map + (setq major-mode-map (lookup-key mode-map (kbd "m"))) + (define-key evil-normal-state-local-map + (kbd dotspacemacs-major-mode-leader-key) major-mode-map) + (define-key evil-motion-state-local-map + (kbd dotspacemacs-major-mode-leader-key) major-mode-map))) + (defmacro spacemacs|evilify (map &rest body) "Add `hjkl' navigation, search and visual state to MAP and set additional bindings contained in BODY." diff --git a/spacemacs/keybindings.el b/spacemacs/keybindings.el index 59437e15c793..912fdd45ad5c 100644 --- a/spacemacs/keybindings.el +++ b/spacemacs/keybindings.el @@ -7,17 +7,6 @@ (define-key isearch-mode-map (kbd "S-") 'isearch-repeat-forward) (define-key isearch-mode-map (kbd "M-S-") 'isearch-repeat-backward) -;; `SPC m' shortcut defined by `dotspacemacs-major-mode-leader-key' -(defun spacemacs/major-mode-leader-key () - "Construct input events to simulate ` m` keys." - (interactive) - (setq unread-command-events (listify-key-sequence - (concat (kbd evil-leader/leader) "m")))) -(define-key evil-normal-state-map - dotspacemacs-major-mode-leader-key 'spacemacs/major-mode-leader-key) -(define-key evil-motion-state-map - dotspacemacs-major-mode-leader-key 'spacemacs/major-mode-leader-key) - ;; Make quit as much as possible (define-key minibuffer-local-map (kbd "") 'keyboard-escape-quit) (define-key evil-visual-state-map (kbd "") 'keyboard-quit) diff --git a/spacemacs/packages.el b/spacemacs/packages.el index ceedcb538a3b..29ce9a1eec58 100644 --- a/spacemacs/packages.el +++ b/spacemacs/packages.el @@ -677,7 +677,11 @@ determine the state to enable when escaping from the insert state.") ;; 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))))) + 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)) + ))) (defun spacemacs/init-evil-lisp-state () (use-package evil-lisp-state @@ -1056,6 +1060,7 @@ determine the state to enable when escaping from the insert state.") (setq guide-key/guide-key-sequence `("C-x" "C-c" ,dotspacemacs-leader-key + ,dotspacemacs-major-mode-leader-key "g" "z" "C-h") From 2c399a2dd21afdcd8c84b80a52e698b1e82837b8 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Fri, 19 Dec 2014 01:07:35 -0500 Subject: [PATCH 9/9] Update achievements --- doc/DOCUMENTATION.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/DOCUMENTATION.md b/doc/DOCUMENTATION.md index 6d7ae03088f1..4f1657b0b70b 100644 --- a/doc/DOCUMENTATION.md +++ b/doc/DOCUMENTATION.md @@ -2006,9 +2006,12 @@ Achievements | Account [First contribution layer][1st-clayer] | [trishume][] [First blog article on Spacemacs][1st-article] | [Wolfy87][] [100th issue (was a PR)][100th-issue] | [danielwuz][] +[200th issue (question)][200th-issue] | [justrajdeep][] +[300th issue (was a PR)][300th-issue] | [danielwuz][] [100th pull request][100th-PR] | [bru][] 100th star | [Jackneill][] 200th star | [jb55][] +400th star | [dbohdan][] # Thank you @@ -2097,10 +2100,14 @@ developers to elisp hackers! [1st-clayer]: https://github.com/syl20bnr/spacemacs/commit/e802027d75d0c0aed55539b0da2dfa0df94dfd39 [1st-article]: http://oli.me.uk/2014/11/06/spacemacs-emacs-vim/ [100th-issue]: https://github.com/syl20bnr/spacemacs/pull/100 +[200th-issue]: https://github.com/syl20bnr/spacemacs/pull/200 +[300th-issue]: https://github.com/syl20bnr/spacemacs/pull/300 [100th-PR]: https://github.com/syl20bnr/spacemacs/pull/228 [trishume]:https://github.com/trishume [Wolfy87]:https://github.com/Wolfy87 [danielwuz]:https://github.com/danielwuz +[justrajdeep]:https://github.com/justrajdeep +[dbohdan]:https://github.com/dbohdan [bru]:https://github.com/bru [Jackneill]:https://github.com/Jackneill [jb55]:https://github.com/jb55