2015-01-27 03:51:47 +00:00
|
|
|
;;; core-dotspacemacs.el --- Spacemacs Core File
|
2015-01-14 04:12:56 +00:00
|
|
|
;;
|
2016-01-12 02:40:54 +00:00
|
|
|
;; Copyright (c) 2012-2016 Sylvain Benner & Contributors
|
2015-01-14 04:12:56 +00:00
|
|
|
;;
|
|
|
|
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
|
|
|
|
;; URL: https://github.com/syl20bnr/spacemacs
|
|
|
|
;;
|
|
|
|
;; This file is not part of GNU Emacs.
|
|
|
|
;;
|
|
|
|
;;; License: GPLv3
|
2014-12-25 20:24:26 +00:00
|
|
|
(defconst dotspacemacs-template-directory
|
|
|
|
(expand-file-name (concat spacemacs-core-directory "templates/"))
|
|
|
|
"Templates directory.")
|
|
|
|
|
2015-09-01 01:52:47 +00:00
|
|
|
(defconst dotspacemacs-test-results-buffer "*dotfile-test-results*"
|
|
|
|
"Name of the buffer to display dotfile test results.")
|
|
|
|
|
2015-05-29 17:08:48 +00:00
|
|
|
(defconst dotspacemacs-directory
|
|
|
|
(let* ((env (getenv "SPACEMACSDIR"))
|
2015-06-05 23:50:03 +00:00
|
|
|
(env-dir (when env (expand-file-name (concat env "/"))))
|
2015-05-29 17:08:48 +00:00
|
|
|
(no-env-dir-default (expand-file-name
|
|
|
|
(concat user-home-directory
|
|
|
|
".spacemacs.d/"))))
|
|
|
|
(cond
|
|
|
|
((and env (file-exists-p env-dir))
|
|
|
|
env-dir)
|
|
|
|
((file-exists-p no-env-dir-default)
|
|
|
|
no-env-dir-default)
|
|
|
|
(t
|
|
|
|
nil)))
|
|
|
|
"Optional spacemacs directory, which defaults to
|
|
|
|
~/.spacemacs.d. This setting can be overridden using the
|
|
|
|
SPACEMACSDIR environment variable. If neither of these
|
|
|
|
directories exist, this variable will be nil.")
|
|
|
|
|
2015-04-30 08:03:06 +00:00
|
|
|
(defconst dotspacemacs-filepath
|
2015-05-29 17:08:48 +00:00
|
|
|
(let* ((default (concat user-home-directory ".spacemacs"))
|
2015-06-05 23:50:03 +00:00
|
|
|
(spacemacs-dir-init (when dotspacemacs-directory
|
2015-05-29 17:08:48 +00:00
|
|
|
(concat dotspacemacs-directory
|
|
|
|
"init.el"))))
|
|
|
|
(if (and (not (file-exists-p default))
|
|
|
|
dotspacemacs-directory
|
|
|
|
(file-exists-p spacemacs-dir-init))
|
|
|
|
spacemacs-dir-init
|
|
|
|
default))
|
|
|
|
"Filepath to the installed dotfile. If ~/.spacemacs exists,
|
|
|
|
then this is used. If ~/.spacemacs does not exist, then check
|
|
|
|
for init.el in dotspacemacs-directory and use this if it
|
|
|
|
exists. Otherwise, fallback to ~/.spacemacs")
|
2015-03-31 02:18:32 +00:00
|
|
|
|
2015-09-12 11:35:41 +00:00
|
|
|
(defvar dotspacemacs-distribution 'spacemacs
|
2015-09-08 01:16:15 +00:00
|
|
|
"Base distribution to use. This is a layer contained in the directory
|
2015-09-16 09:24:25 +00:00
|
|
|
`+distribution'. For now available distributions are `spacemacs-base'
|
2015-09-08 01:16:15 +00:00
|
|
|
or `spacemacs'.")
|
|
|
|
|
2015-11-18 18:49:41 +00:00
|
|
|
(defvar dotspacemacs-elpa-https t
|
|
|
|
"If non nil ELPA repositories are contacted via HTTPS whenever it's
|
|
|
|
possible. Set it to nil if you have no way to use HTTPS in your
|
|
|
|
environment, otherwise it is strongly recommended to let it set to t.")
|
|
|
|
|
2015-12-06 07:22:49 +00:00
|
|
|
(defvar dotspacemacs-elpa-timeout 5
|
|
|
|
"Maximum allowed time in seconds to contact an ELPA repository.")
|
|
|
|
|
2014-11-22 02:19:50 +00:00
|
|
|
(defvar dotspacemacs-configuration-layer-path '()
|
|
|
|
"List of additional paths where to look for configuration layers.
|
2015-02-15 03:15:25 +00:00
|
|
|
Paths must have a trailing slash (ie. `~/.mycontribs/')")
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2015-04-21 04:33:23 +00:00
|
|
|
(defvar dotspacemacs-additional-packages '()
|
|
|
|
"List of additional packages that will be installed wihout being
|
|
|
|
wrapped in a layer. If you need some configuration for these
|
|
|
|
packages then consider to create a layer, you can also put the
|
2015-09-28 06:05:18 +00:00
|
|
|
configuration in `dotspacemacs/user-config'.")
|
2015-04-21 04:33:23 +00:00
|
|
|
|
2015-03-19 04:29:42 +00:00
|
|
|
(defvar dotspacemacs-editing-style 'vim
|
|
|
|
"Either `vim' or `emacs'. Evil is always enabled but if the variable
|
|
|
|
is `emacs' then the `holy-mode' is enabled at startup.")
|
|
|
|
|
2015-03-13 03:55:38 +00:00
|
|
|
(defvar dotspacemacs-startup-banner 'official
|
|
|
|
"Specify the startup banner. Default value is `official', it displays
|
|
|
|
the official spacemacs logo. An integer value is the index of text
|
|
|
|
banner, `random' chooses a random text banner in `core/banners'
|
|
|
|
directory. A string value must be a path to a .PNG file.
|
|
|
|
If the value is nil then no banner is displayed.")
|
2014-12-25 20:38:13 +00:00
|
|
|
|
2016-01-05 15:17:23 +00:00
|
|
|
(defvar dotspacemacs-scratch-mode 'text-mode
|
|
|
|
"Default major mode of the scratch buffer.")
|
|
|
|
|
2015-12-11 06:47:34 +00:00
|
|
|
(defvar dotspacemacs-check-for-update t
|
|
|
|
"If non nil then spacemacs will check for updates at startup
|
|
|
|
when the current branch is not `develop'")
|
2015-11-22 15:49:20 +00:00
|
|
|
|
2015-09-12 03:00:33 +00:00
|
|
|
(defvar dotspacemacs-configuration-layers '(emacs-lisp)
|
2015-02-15 03:15:25 +00:00
|
|
|
"List of configuration layers to load. If it is the symbol `all' instead
|
|
|
|
of a list then all discovered layers will be installed.")
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2015-07-05 03:51:32 +00:00
|
|
|
(defvar dotspacemacs-themes '(spacemacs-dark
|
|
|
|
spacemacs-light
|
2015-01-28 02:45:39 +00:00
|
|
|
solarized-dark
|
2015-07-05 03:51:32 +00:00
|
|
|
solarized-light
|
2015-07-09 05:01:20 +00:00
|
|
|
leuven)
|
2015-01-24 03:02:08 +00:00
|
|
|
"List of themes, the first of the list is loaded when spacemacs starts.
|
|
|
|
Press <SPC> T n to cycle to the next theme in the list (works great
|
|
|
|
with 2 themes variants, one dark and one light")
|
2014-11-28 04:14:51 +00:00
|
|
|
|
2015-02-24 05:41:50 +00:00
|
|
|
(defvar dotspacemacs-colorize-cursor-according-to-state t
|
2015-10-02 17:50:45 +00:00
|
|
|
"If non nil the cursor color matches the state color in GUI Emacs.")
|
2015-02-24 05:41:50 +00:00
|
|
|
|
2014-12-06 22:55:20 +00:00
|
|
|
(defvar dotspacemacs-leader-key "SPC"
|
|
|
|
"The leader key.")
|
|
|
|
|
2015-03-23 23:06:48 +00:00
|
|
|
(defvar dotspacemacs-emacs-leader-key "M-m"
|
2015-03-19 04:29:42 +00:00
|
|
|
"The leader key accessible in `emacs state' and `insert state'")
|
|
|
|
|
2014-12-19 05:35:14 +00:00
|
|
|
(defvar dotspacemacs-major-mode-leader-key ","
|
|
|
|
"Major mode leader key is a shortcut key which is the equivalent of
|
2015-03-08 03:24:42 +00:00
|
|
|
pressing `<leader> m`. Set it to `nil` to disable it.")
|
2014-12-19 05:35:14 +00:00
|
|
|
|
2015-03-23 23:06:48 +00:00
|
|
|
(defvar dotspacemacs-major-mode-emacs-leader-key "C-M-m"
|
2015-03-19 04:29:42 +00:00
|
|
|
"Major mode leader key accessible in `emacs state' and `insert state'")
|
|
|
|
|
2016-01-09 07:23:04 +00:00
|
|
|
(defvar dotspacemacs-command-key "SPC"
|
2016-01-09 06:53:24 +00:00
|
|
|
"The key used for Emacs commands (M-x) (after pressing on the leader key).")
|
2016-01-09 07:23:04 +00:00
|
|
|
(defvaralias 'dotspacemacs-emacs-command-key 'dotspacemacs-command-key
|
|
|
|
"New official name for `dotspacemacs-command-key'")
|
2016-01-09 06:53:24 +00:00
|
|
|
|
2015-12-02 00:25:37 +00:00
|
|
|
(defvar dotspacemacs-distinguish-gui-tab nil
|
|
|
|
"If non nil, distinguish C-i and tab in the GUI version of
|
|
|
|
emacs.")
|
|
|
|
|
|
|
|
;; (defvar dotspacemacs-distinguish-gui-ret nil
|
|
|
|
;; "If non nil, distinguish C-m and return in the GUI version of
|
|
|
|
;; emacs.")
|
|
|
|
|
2015-01-27 03:40:02 +00:00
|
|
|
(defvar dotspacemacs-default-font '("Source Code Pro"
|
|
|
|
:size 13
|
|
|
|
:weight normal
|
|
|
|
:width normal
|
2015-01-28 02:46:37 +00:00
|
|
|
:powerline-scale 1.1)
|
2015-02-08 01:05:24 +00:00
|
|
|
"Default font. `powerline-scale' allows to quickly tweak the mode-line
|
2015-01-27 03:40:02 +00:00
|
|
|
size to make separators look not too crappy.")
|
|
|
|
|
2016-01-11 05:56:43 +00:00
|
|
|
(defvar dotspacemacs-remap-Y-to-y$ nil
|
|
|
|
"If non nil `Y' is remapped to `y$' in Evil states.")
|
2015-09-29 03:09:44 +00:00
|
|
|
|
2016-01-11 05:56:43 +00:00
|
|
|
(defvar dotspacemacs-ex-substitute-global nil
|
|
|
|
"If non nil, inverse the meaning of `g' in `:substitute' Evil ex-command.")
|
2016-01-08 14:16:26 +00:00
|
|
|
|
2015-11-11 05:55:42 +00:00
|
|
|
(defvar dotspacemacs-default-layout-name "Default"
|
|
|
|
" Name of the default layout.")
|
|
|
|
|
|
|
|
(defvar dotspacemacs-display-default-layout nil
|
|
|
|
"If non nil the default layout name is displayed in the mode-line.")
|
|
|
|
|
2015-11-11 05:58:09 +00:00
|
|
|
(defvar dotspacemacs-auto-resume-layouts nil
|
|
|
|
"If non nil then the last auto saved layouts are resume automatically upon
|
|
|
|
start.")
|
2015-11-09 04:51:29 +00:00
|
|
|
|
2015-11-11 05:14:46 +00:00
|
|
|
(defvar dotspacemacs-max-rollback-slots 5
|
|
|
|
"Maximum number of rollback slots to keep in the cache.")
|
|
|
|
|
2015-06-01 01:48:16 +00:00
|
|
|
(defvar dotspacemacs-use-ido nil
|
|
|
|
"If non nil then `ido' replaces `helm' for some commands. For now only
|
|
|
|
`find-files' (SPC f f) is replaced.")
|
|
|
|
|
2015-08-28 06:38:29 +00:00
|
|
|
(defvar dotspacemacs-helm-resize nil
|
2015-10-12 23:02:36 +00:00
|
|
|
"If non nil, `helm' will try to minimize the space it uses.")
|
2015-08-28 06:38:29 +00:00
|
|
|
|
2015-09-07 00:51:07 +00:00
|
|
|
(defvar dotspacemacs-helm-no-header nil
|
|
|
|
"if non nil, the helm header is hidden when there is only one source.")
|
|
|
|
|
2015-08-28 06:35:40 +00:00
|
|
|
(defvar dotspacemacs-helm-position 'bottom
|
|
|
|
"Position in which to show the `helm' mini-buffer.")
|
|
|
|
|
2015-06-19 03:54:07 +00:00
|
|
|
(defvar dotspacemacs-auto-save-file-location 'cache
|
|
|
|
"Location where to auto-save files. Possible values are `original' to
|
|
|
|
auto-save the file in-place, `cache' to auto-save the file to another
|
|
|
|
file stored in the cache directory and `nil' to disable auto-saving.
|
|
|
|
Default value is `cache'.")
|
2015-05-04 12:12:39 +00:00
|
|
|
|
2015-03-10 00:57:58 +00:00
|
|
|
(defvar dotspacemacs-enable-paste-micro-state t
|
|
|
|
"If non nil the paste micro-state is enabled. While enabled pressing `p`
|
|
|
|
several times cycle between the kill ring content.'")
|
|
|
|
|
2015-07-25 16:56:06 +00:00
|
|
|
(defvar dotspacemacs-which-key-delay 0.4
|
2015-08-28 16:41:52 +00:00
|
|
|
"Delay in seconds starting from the last keystroke after which
|
|
|
|
the which-key buffer will be shown if you have not completed a
|
|
|
|
key sequence. Setting this variable is equivalent to setting
|
|
|
|
`which-key-idle-delay'.")
|
|
|
|
|
|
|
|
(defvar dotspacemacs-which-key-position 'bottom
|
|
|
|
"Location of the which-key popup buffer. Possible choices are bottom,
|
|
|
|
right, and right-then-bottom. The last one will display on the
|
|
|
|
right if possible and fallback to bottom if not.")
|
2015-07-25 16:56:06 +00:00
|
|
|
|
2015-02-16 02:25:12 +00:00
|
|
|
(defvar dotspacemacs-loading-progress-bar t
|
|
|
|
"If non nil a progress bar is displayed when spacemacs is loading. This
|
|
|
|
may increase the boot time on some systems and emacs builds, set it to nil
|
|
|
|
to boost the loading time.")
|
|
|
|
|
2015-01-13 04:27:07 +00:00
|
|
|
(defvar dotspacemacs-fullscreen-at-startup nil
|
|
|
|
"If non nil the frame is fullscreen when Emacs starts up (Emacs 24.4+ only).")
|
|
|
|
|
2015-01-12 17:22:17 +00:00
|
|
|
(defvar dotspacemacs-fullscreen-use-non-native nil
|
|
|
|
"If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen. Use
|
|
|
|
to disable fullscreen animations in OSX.")
|
|
|
|
|
2014-12-15 13:19:24 +00:00
|
|
|
(defvar dotspacemacs-maximized-at-startup nil
|
2014-12-16 02:13:01 +00:00
|
|
|
"If non nil the frame is maximized when Emacs starts up (Emacs 24.4+ only).
|
|
|
|
Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil.")
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2014-12-27 18:15:18 +00:00
|
|
|
(defvar dotspacemacs-active-transparency 90
|
|
|
|
"A value from the range (0..100), in increasing opacity, which describes the
|
|
|
|
transparency level of a frame when it's active or selected. Transparency
|
|
|
|
can be toggled through `toggle-transparency'.")
|
|
|
|
|
|
|
|
(defvar dotspacemacs-inactive-transparency 90
|
|
|
|
"A value from the range (0..100), in increasing opacity, which describes the
|
|
|
|
transparency level of a frame when it's inactive or deselected. Transparency
|
|
|
|
can be toggled through `toggle-transparency'.")
|
|
|
|
|
2014-12-23 21:39:57 +00:00
|
|
|
(defvar dotspacemacs-mode-line-unicode-symbols t
|
|
|
|
"If non nil unicode symbols are displayed in the mode-line (eg. for lighters)")
|
|
|
|
|
2014-11-22 02:19:50 +00:00
|
|
|
(defvar dotspacemacs-smooth-scrolling t
|
|
|
|
"If non nil smooth scrolling (native-scrolling) is enabled. Smooth scrolling
|
|
|
|
overrides the default behavior of Emacs which recenters the point when
|
|
|
|
it reaches the top or bottom of the screen.")
|
|
|
|
|
2015-11-03 04:29:16 +00:00
|
|
|
(defvar dotspacemacs-line-numbers nil
|
2015-11-02 18:42:17 +00:00
|
|
|
"If non nil line numbers are turned on in all `prog-mode' and `text-mode'
|
2015-11-03 04:29:16 +00:00
|
|
|
derivatives. If set to `relative', also turns on relative line numbers.")
|
2015-10-26 17:12:41 +00:00
|
|
|
|
2014-12-12 22:59:49 +00:00
|
|
|
(defvar dotspacemacs-persistent-server nil
|
|
|
|
"If non nil advises quit functions to keep server open when quitting.")
|
|
|
|
|
2014-12-12 05:08:30 +00:00
|
|
|
(defvar dotspacemacs-smartparens-strict-mode nil
|
|
|
|
"If non-nil smartparens-strict-mode will be enabled in programming modes.")
|
|
|
|
|
2015-04-19 05:04:05 +00:00
|
|
|
(defvar dotspacemacs-highlight-delimiters 'all
|
2015-07-24 00:41:52 +00:00
|
|
|
"Select a scope to highlight delimiters. Possible values are `any',
|
2016-01-05 05:37:19 +00:00
|
|
|
`current', `all' or `nil'. Default is `all' (highlight any scope and
|
|
|
|
emphasis the current one.")
|
2015-04-16 11:15:50 +00:00
|
|
|
|
2016-01-05 05:37:19 +00:00
|
|
|
(defvar dotspacemacs-whitespace-cleanup nil
|
|
|
|
"delete whitespace while saving buffer. possible values are `all'
|
|
|
|
to aggressively delete empty lines and long sequences of whitespace, `trailing'
|
|
|
|
to delete only the whitespace at end of lines, `changed' to delete only
|
|
|
|
whitespace for changed lines or `nil' to disable cleanup.")
|
2015-10-16 16:56:57 +00:00
|
|
|
|
2015-02-17 18:31:51 +00:00
|
|
|
(defvar dotspacemacs-delete-orphan-packages t
|
2015-02-15 03:03:30 +00:00
|
|
|
"If non-nil spacemacs will delete any orphan packages, i.e. packages that are
|
|
|
|
declared in a layer which is not a member of
|
2016-01-05 05:37:19 +00:00
|
|
|
`dotspacemacs-configuration-layers'")
|
2015-02-15 03:03:30 +00:00
|
|
|
|
2015-04-15 02:23:57 +00:00
|
|
|
(defvar dotspacemacs-search-tools '("ag" "pt" "ack" "grep")
|
|
|
|
"List of search tool executable names. Spacemacs uses the first installed
|
|
|
|
tool of the list. Supported tools are `ag', `pt', `ack' and `grep'.")
|
|
|
|
|
2014-11-22 02:19:50 +00:00
|
|
|
(defvar dotspacemacs-default-package-repository 'melpa-stable
|
|
|
|
"The default package repository used if no explicit repository has been
|
|
|
|
specified with an installed package.
|
2015-02-15 03:15:25 +00:00
|
|
|
NOT USED FOR NOW :-)")
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2015-04-02 04:12:19 +00:00
|
|
|
(defvar dotspacemacs-startup-lists '(recents projects)
|
|
|
|
"List of items to show in the startup buffer. If nil it is disabled.
|
|
|
|
Possible values are: `recents' `bookmarks' `projects'.")
|
2015-03-28 14:30:56 +00:00
|
|
|
|
2015-07-17 05:38:34 +00:00
|
|
|
(defvar dotspacemacs-startup-recent-list-size 5
|
|
|
|
"Number of recent files to show in the startup buffer. Ignored if
|
|
|
|
`dotspacemacs-startup-lists' doesn't include `recents'.")
|
|
|
|
|
2014-11-22 02:19:50 +00:00
|
|
|
(defvar dotspacemacs-excluded-packages '()
|
2016-01-18 03:06:04 +00:00
|
|
|
"A list of packages that will not be install and loaded.")
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2015-04-19 03:40:24 +00:00
|
|
|
;; only for backward compatibility
|
|
|
|
(defalias 'dotspacemacs-mode 'emacs-lisp-mode)
|
2015-03-01 17:49:39 +00:00
|
|
|
|
2015-12-17 03:27:22 +00:00
|
|
|
(defmacro dotspacemacs|call-func (func &optional msg)
|
|
|
|
"Call the function from the dotfile only if it is bound.
|
|
|
|
If MSG is not nil then display a message in `*Messages'. Errors
|
|
|
|
are caught and signalled to user in spacemacs buffer."
|
|
|
|
`(progn
|
|
|
|
(when ,msg (spacemacs-buffer/message ,msg))
|
|
|
|
(when (fboundp ',func)
|
|
|
|
(condition-case-unless-debug err
|
|
|
|
(,func)
|
|
|
|
(error
|
2016-01-12 04:58:47 +00:00
|
|
|
(configuration-layer//increment-error-count)
|
2015-12-17 03:27:22 +00:00
|
|
|
(spacemacs-buffer/append (format "Error in %s: %s\n"
|
|
|
|
',(symbol-name func)
|
|
|
|
(error-message-string err))
|
|
|
|
t))))))
|
|
|
|
|
2015-03-31 03:16:33 +00:00
|
|
|
(defun dotspacemacs/sync-configuration-layers (&optional arg)
|
2015-03-02 05:27:36 +00:00
|
|
|
"Synchronize declared layers in dotfile with spacemacs.
|
|
|
|
|
2015-09-12 03:04:55 +00:00
|
|
|
Called with `C-u' skips `dotspacemacs/user-config'.
|
2015-09-28 06:05:18 +00:00
|
|
|
Called with `C-u C-u' skips `dotspacemacs/user-config' _and_ preleminary tests."
|
2015-03-02 05:27:36 +00:00
|
|
|
(interactive "P")
|
2015-03-31 03:16:33 +00:00
|
|
|
(when (file-exists-p dotspacemacs-filepath)
|
2015-09-01 03:26:47 +00:00
|
|
|
(with-current-buffer (find-file-noselect dotspacemacs-filepath)
|
|
|
|
(let ((dotspacemacs-loading-progress-bar nil))
|
|
|
|
(setq spacemacs-loading-string "")
|
|
|
|
(save-buffer)
|
2015-09-12 03:04:55 +00:00
|
|
|
(let ((tests-ok (or (equal arg '(16)) (dotspacemacs/test-dotfile t))))
|
2015-09-01 03:26:47 +00:00
|
|
|
(if tests-ok
|
|
|
|
(progn
|
|
|
|
(load-file buffer-file-name)
|
|
|
|
(dotspacemacs|call-func dotspacemacs/init
|
|
|
|
"Calling dotfile init...")
|
|
|
|
(configuration-layer/sync)
|
2015-11-01 11:03:18 +00:00
|
|
|
(if (member arg '((4) (16)))
|
2016-01-18 03:06:04 +00:00
|
|
|
(message (concat "Done (`dotspacemacs/user-config' "
|
|
|
|
"function has been skipped)."))
|
|
|
|
(dotspacemacs|call-func dotspacemacs/user-config
|
|
|
|
"Calling dotfile user config...")
|
2015-09-01 03:26:47 +00:00
|
|
|
(message "Done."))
|
2015-10-11 04:16:47 +00:00
|
|
|
(when (configuration-layer/package-usedp 'spaceline)
|
2015-09-01 03:26:47 +00:00
|
|
|
(spacemacs//restore-powerline (current-buffer))))
|
|
|
|
(switch-to-buffer-other-window dotspacemacs-test-results-buffer)
|
|
|
|
(spacemacs-buffer/warning "Some tests failed, check `%s' buffer"
|
2015-10-08 07:44:59 +00:00
|
|
|
dotspacemacs-test-results-buffer))))))
|
|
|
|
(when (configuration-layer/package-usedp 'spaceline)
|
|
|
|
(spacemacs//set-powerline-for-startup-buffers)))
|
2015-03-02 04:02:14 +00:00
|
|
|
|
2015-09-01 03:16:14 +00:00
|
|
|
(defun dotspacemacs/get-variable-string-list ()
|
|
|
|
"Return a list of all the dotspacemacs variables as strings."
|
|
|
|
(all-completions "" obarray
|
|
|
|
(lambda (x)
|
|
|
|
(and (boundp x)
|
|
|
|
(not (keywordp x))
|
|
|
|
(string-prefix-p "dotspacemacs"
|
|
|
|
(symbol-name x))))))
|
|
|
|
|
|
|
|
(defun dotspacemacs/get-variable-list ()
|
|
|
|
"Return a list of all dotspacemacs variable symbols."
|
|
|
|
(mapcar 'intern (dotspacemacs/get-variable-string-list)))
|
|
|
|
|
2015-08-14 16:25:54 +00:00
|
|
|
(defmacro dotspacemacs|symbol-value (symbol)
|
|
|
|
"Return the value of SYMBOL corresponding to a dotspacemacs variable.
|
|
|
|
If SYMBOL value is `display-graphic-p' then return the result of
|
|
|
|
`(display-graphic-p)', otherwise return the value of the symbol."
|
|
|
|
`(if (eq 'display-graphic-p ,symbol) (display-graphic-p) ,symbol))
|
|
|
|
|
2014-11-22 02:19:50 +00:00
|
|
|
(defun dotspacemacs/location ()
|
|
|
|
"Return the absolute path to the spacemacs dotfile."
|
2015-04-30 08:03:06 +00:00
|
|
|
dotspacemacs-filepath)
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2015-03-31 02:18:32 +00:00
|
|
|
(defun dotspacemacs/copy-template ()
|
|
|
|
"Copy `.spacemacs.template' in home directory. Ask for confirmation
|
|
|
|
before copying the file if the destination already exists."
|
2014-11-22 03:33:54 +00:00
|
|
|
(interactive)
|
2015-03-31 02:18:32 +00:00
|
|
|
(let* ((copy? (if (file-exists-p dotspacemacs-filepath)
|
|
|
|
(y-or-n-p
|
|
|
|
(format "%s already exists. Do you want to overwite it ? "
|
|
|
|
dotspacemacs-filepath)) t)))
|
|
|
|
(when copy?
|
|
|
|
(copy-file (concat dotspacemacs-template-directory
|
|
|
|
".spacemacs.template") dotspacemacs-filepath t)
|
|
|
|
(message "%s has been installed." dotspacemacs-filepath))))
|
|
|
|
|
|
|
|
(defun dotspacemacs//ido-completing-read (prompt candidates)
|
|
|
|
"Call `ido-completing-read' with a CANDIDATES alist where the key is
|
|
|
|
a display strng and the value is the actual value to return."
|
2015-03-31 03:16:33 +00:00
|
|
|
(let ((ido-max-window-height (1+ (length candidates))))
|
|
|
|
(cadr (assoc (ido-completing-read prompt (mapcar 'car candidates))
|
|
|
|
candidates))))
|
2015-03-31 02:18:32 +00:00
|
|
|
|
|
|
|
(defun dotspacemacs/install (arg)
|
2015-03-31 03:16:33 +00:00
|
|
|
"Install the dotfile, return non nil if the doftile has been installed.
|
2015-03-31 02:18:32 +00:00
|
|
|
|
|
|
|
If ARG is non nil then Ask questions to the user before installing the dotfile."
|
|
|
|
(interactive "P")
|
|
|
|
;; preferences is an alist where the key is the text to replace by
|
|
|
|
;; the value in the dotfile
|
|
|
|
(let ((preferences
|
|
|
|
(when arg
|
|
|
|
;; editing style
|
|
|
|
`(("dotspacemacs-editing-style 'vim"
|
2015-09-01 02:08:10 +00:00
|
|
|
,(format
|
|
|
|
"dotspacemacs-editing-style '%S"
|
|
|
|
(dotspacemacs//ido-completing-read
|
2016-01-09 19:19:01 +00:00
|
|
|
"What is your preferred editing style? "
|
2015-09-01 02:08:10 +00:00
|
|
|
'(("Among the stars aboard the Evil flagship (vim)"
|
|
|
|
vim)
|
|
|
|
("On the planet Emacs in the Holy control tower (emacs)"
|
2015-09-11 14:28:30 +00:00
|
|
|
emacs)))))
|
2015-09-19 05:05:17 +00:00
|
|
|
("dotspacemacs-distribution 'spacemacs"
|
2015-09-11 14:28:30 +00:00
|
|
|
,(format
|
|
|
|
"dotspacemacs-distribution '%S"
|
|
|
|
(dotspacemacs//ido-completing-read
|
|
|
|
"What distribution of spacemacs would you like to start with? "
|
2016-01-09 19:19:01 +00:00
|
|
|
`(("The standard distribution, recommended (spacemacs)"
|
2015-09-11 14:28:30 +00:00
|
|
|
spacemacs)
|
2016-01-09 19:19:01 +00:00
|
|
|
(,(concat "A minimalist distribution that you can build on "
|
|
|
|
"(spacemacs-base)")
|
|
|
|
spacemacs-base)))))
|
|
|
|
("spacemacs-helm"
|
|
|
|
,(dotspacemacs//ido-completing-read
|
|
|
|
"What type of completion framework do you want? "
|
|
|
|
'(("An heavy one but full-featured (helm)"
|
|
|
|
"spacemacs-helm")
|
|
|
|
("A lighter one but still very powerful (ivy)"
|
|
|
|
"spacemacs-ivy")
|
|
|
|
;; For now, None works only if the user selected
|
|
|
|
;; the spacemacs-base distribution
|
|
|
|
("None (not recommended)" ""))))))))
|
2015-03-31 02:18:32 +00:00
|
|
|
(with-current-buffer (find-file-noselect
|
2016-01-09 19:19:01 +00:00
|
|
|
(concat dotspacemacs-template-directory
|
|
|
|
".spacemacs.template"))
|
2015-03-31 02:18:32 +00:00
|
|
|
(dolist (p preferences)
|
2015-12-16 14:45:08 +00:00
|
|
|
(goto-char (point-min))
|
2015-03-31 02:18:32 +00:00
|
|
|
(re-search-forward (car p))
|
|
|
|
(replace-match (cadr p)))
|
|
|
|
(let ((install
|
|
|
|
(if (file-exists-p dotspacemacs-filepath)
|
|
|
|
(y-or-n-p
|
|
|
|
(format "%s already exists. Do you want to overwite it ? "
|
|
|
|
dotspacemacs-filepath)) t)))
|
2015-03-31 03:16:33 +00:00
|
|
|
(when install
|
|
|
|
(write-file dotspacemacs-filepath)
|
|
|
|
(message "%s has been installed." dotspacemacs-filepath)
|
|
|
|
t)))))
|
2015-03-31 02:18:32 +00:00
|
|
|
|
|
|
|
(defun dotspacemacs//install-and-replace (&optional values)
|
|
|
|
"Install the dotfile and replace its content according to VALUES.
|
|
|
|
|
|
|
|
VALUES is an alist where the key is the text to replace and value is the new
|
|
|
|
value."
|
|
|
|
)
|
2014-11-22 03:33:54 +00:00
|
|
|
|
2015-03-01 04:33:57 +00:00
|
|
|
(defun dotspacemacs/load-file ()
|
2015-02-18 00:04:16 +00:00
|
|
|
"Load ~/.spacemacs if it exists."
|
2014-11-22 02:19:50 +00:00
|
|
|
(let ((dotspacemacs (dotspacemacs/location)))
|
2015-08-26 05:58:01 +00:00
|
|
|
(if (file-exists-p dotspacemacs)
|
2015-10-13 18:58:19 +00:00
|
|
|
(unless (with-demoted-errors "Error loading .spacemacs: %S" (load dotspacemacs))
|
2015-08-26 05:58:01 +00:00
|
|
|
(dotspacemacs/safe-load)))))
|
|
|
|
|
|
|
|
(defun dotspacemacs/safe-load ()
|
|
|
|
"Error recovery from malformed .spacemacs.
|
|
|
|
Loads default .spacemacs template and suspends pruning of orphan packages.
|
|
|
|
Informs users of error and prompts for default editing style for use during
|
|
|
|
error recovery."
|
|
|
|
(load (concat dotspacemacs-template-directory
|
|
|
|
".spacemacs.template"))
|
|
|
|
(defadvice dotspacemacs/layers
|
|
|
|
(after error-recover-preserve-packages activate)
|
|
|
|
(progn
|
|
|
|
(setq-default dotspacemacs-delete-orphan-packages nil)
|
|
|
|
(ad-disable-advice 'dotspacemacs/layers 'after
|
|
|
|
'error-recover-preserve-packages)
|
|
|
|
(ad-activate 'dotspacemacs/layers)))
|
|
|
|
(defadvice dotspacemacs/init
|
|
|
|
(after error-recover-prompt-for-style activate)
|
|
|
|
(progn
|
|
|
|
(setq-default dotspacemacs-editing-style
|
|
|
|
(intern
|
|
|
|
(ido-completing-read
|
2015-09-17 01:37:42 +00:00
|
|
|
(format
|
|
|
|
(concat
|
|
|
|
"Spacemacs encountered an error while "
|
|
|
|
"loading your `%s' file.\n"
|
|
|
|
"Pick your editing style for recovery "
|
|
|
|
"(use left and right arrows): ")
|
|
|
|
dotspacemacs-filepath)
|
2015-08-26 05:58:01 +00:00
|
|
|
'(("vim" vim)
|
|
|
|
("emacs" emacs)
|
|
|
|
("hybrid" hybrid))
|
2015-09-17 01:37:42 +00:00
|
|
|
nil t nil nil 'vim)))
|
2015-08-26 05:58:01 +00:00
|
|
|
(ad-disable-advice 'dotspacemacs/init 'after
|
|
|
|
'error-recover-prompt-for-style)
|
|
|
|
(ad-activate 'dotspacemacs/init))))
|
2014-11-22 02:19:50 +00:00
|
|
|
|
2015-06-26 16:27:40 +00:00
|
|
|
(defun dotspacemacs//test-dotspacemacs/layers ()
|
|
|
|
"Tests for `dotspacemacs/layers'"
|
2015-06-30 02:53:51 +00:00
|
|
|
(insert
|
2015-09-01 02:08:10 +00:00
|
|
|
(format (concat "\n* Testing settings in dotspacemacs/layers "
|
|
|
|
"[[file:%s::dotspacemacs/layers][Show in File]]\n")
|
2015-06-30 02:53:51 +00:00
|
|
|
dotspacemacs-filepath))
|
2015-06-26 16:27:40 +00:00
|
|
|
;; protect global values of these variables
|
|
|
|
(let (dotspacemacs-configuration-layer-path dotspacemacs-configuration-layers
|
|
|
|
dotspacemacs-additional-packages dotspacemacs-excluded-packages
|
|
|
|
dotspacemacs-delete-orphan-packages
|
|
|
|
(passed-tests 0) (total-tests 0))
|
|
|
|
(load dotspacemacs-filepath)
|
|
|
|
(dotspacemacs/layers)
|
|
|
|
(spacemacs//test-list
|
2015-09-01 02:08:10 +00:00
|
|
|
'stringp 'dotspacemacs-configuration-layer-path
|
|
|
|
"is a string" "path")
|
2015-06-26 16:27:40 +00:00
|
|
|
(spacemacs//test-list
|
2015-09-01 02:08:10 +00:00
|
|
|
'file-directory-p 'dotspacemacs-configuration-layer-path
|
|
|
|
"exists in filesystem" "path")
|
2015-06-26 16:27:40 +00:00
|
|
|
(setq dotspacemacs-configuration-layers
|
2015-09-01 02:08:10 +00:00
|
|
|
(mapcar (lambda (l) (if (listp l) (car l) l))
|
|
|
|
dotspacemacs-configuration-layers))
|
2015-06-26 16:27:40 +00:00
|
|
|
(spacemacs//test-list
|
2015-06-30 02:53:51 +00:00
|
|
|
'configuration-layer/get-layer-path
|
|
|
|
'dotspacemacs-configuration-layers "can be found" "layer")
|
|
|
|
(insert (format
|
2015-09-01 02:08:10 +00:00
|
|
|
(concat "** RESULTS: "
|
|
|
|
"[[file:%s::dotspacemacs/layers][dotspacemacs/layers]] "
|
|
|
|
"passed %s out of %s tests\n")
|
2015-09-01 01:52:47 +00:00
|
|
|
dotspacemacs-filepath passed-tests total-tests))
|
|
|
|
(equal passed-tests total-tests)))
|
2015-06-26 16:27:40 +00:00
|
|
|
|
2015-09-01 03:16:14 +00:00
|
|
|
(defmacro dotspacemacs||let-init-test (&rest body)
|
|
|
|
"Macro to protect dotspacemacs variables"
|
|
|
|
`(let ((fpath dotspacemacs-filepath)
|
|
|
|
,@(dotspacemacs/get-variable-list)
|
|
|
|
(passed-tests 0) (total-tests 0))
|
|
|
|
(setq dotspacemacs-filepath fpath)
|
|
|
|
(load dotspacemacs-filepath)
|
|
|
|
,@body))
|
|
|
|
|
2015-06-26 16:27:40 +00:00
|
|
|
(defun dotspacemacs//test-dotspacemacs/init ()
|
|
|
|
"Tests for `dotspacemacs/init'"
|
2015-06-30 02:53:51 +00:00
|
|
|
(insert
|
2015-09-01 02:08:10 +00:00
|
|
|
(format (concat "\n* Testing settings in dotspacemacs/init "
|
|
|
|
"[[file:%s::dotspacemacs/init][Show in File]]\n")
|
2015-06-30 02:53:51 +00:00
|
|
|
dotspacemacs-filepath))
|
2015-09-01 03:16:14 +00:00
|
|
|
(dotspacemacs||let-init-test
|
|
|
|
(dotspacemacs/init)
|
|
|
|
(spacemacs//test-var
|
2015-09-01 03:35:28 +00:00
|
|
|
(lambda (x) (member x '(vim emacs hybrid)))
|
|
|
|
'dotspacemacs-editing-style "is \'vim, \'emacs or \'hybrid")
|
2015-09-01 03:16:14 +00:00
|
|
|
(spacemacs//test-var
|
|
|
|
(lambda (x) (member x '(original cache nil)))
|
|
|
|
'dotspacemacs-auto-save-file-location (concat "is one of \'original, "
|
|
|
|
"\'cache or nil"))
|
|
|
|
(spacemacs//test-var
|
2015-09-12 22:16:36 +00:00
|
|
|
(lambda (x) (member x '(all any current nil)))
|
|
|
|
'dotspacemacs-highlight-delimiters "is one of \'all, \'any, \'current or nil")
|
2015-09-01 03:16:14 +00:00
|
|
|
(spacemacs//test-list
|
|
|
|
(lambda (x) (member x '(recents bookmarks projects)))
|
|
|
|
'dotspacemacs-startup-lists (concat "includes only \'recents, "
|
|
|
|
"\'bookmarks or \'projects"))
|
|
|
|
(spacemacs//test-var 'stringp 'dotspacemacs-leader-key "is a string")
|
|
|
|
(spacemacs//test-var 'stringp 'dotspacemacs-emacs-leader-key "is a string")
|
|
|
|
(spacemacs//test-var
|
2015-10-02 19:29:13 +00:00
|
|
|
(lambda (x) (or (null x) (stringp x)))
|
|
|
|
'dotspacemacs-major-mode-leader-key "is a string or nil")
|
|
|
|
(spacemacs//test-var
|
|
|
|
(lambda (x) (or (null x) (stringp x)))
|
|
|
|
'dotspacemacs-major-mode-emacs-leader-key "is a string or nil")
|
2016-01-09 06:53:24 +00:00
|
|
|
(spacemacs//test-var 'stringp 'dotspacemacs-emacs-command-key "is a string")
|
2015-09-01 03:16:14 +00:00
|
|
|
(insert (format
|
|
|
|
(concat "** RESULTS: "
|
|
|
|
"[[file:%s::dotspacemacs/init][dotspacemacs/init]] "
|
|
|
|
"passed %s out of %s tests\n")
|
|
|
|
dotspacemacs-filepath passed-tests total-tests))
|
|
|
|
(equal passed-tests total-tests)))
|
2015-06-26 16:27:40 +00:00
|
|
|
|
2015-09-01 01:52:47 +00:00
|
|
|
(defun dotspacemacs/test-dotfile (&optional hide-buffer)
|
|
|
|
"Test settings in dotfile for correctness.
|
|
|
|
Return non-nil if all the tests passed."
|
2015-06-26 16:27:40 +00:00
|
|
|
(interactive)
|
|
|
|
(let ((min-version "0.0"))
|
|
|
|
;; dotspacemacs-version not implemented yet
|
|
|
|
;; (if (version< dotspacemacs-version min-version)
|
|
|
|
(if nil
|
2015-09-01 02:08:10 +00:00
|
|
|
(error (format (concat "error: dotspacemacs/test-dotfile requires "
|
|
|
|
"dotspacemacs-version %s") min-version))
|
2015-09-01 01:52:47 +00:00
|
|
|
(with-current-buffer (get-buffer-create dotspacemacs-test-results-buffer)
|
|
|
|
(unless hide-buffer
|
|
|
|
(switch-to-buffer-other-window dotspacemacs-test-results-buffer))
|
2015-06-30 02:53:51 +00:00
|
|
|
(org-mode)
|
2015-09-01 02:13:56 +00:00
|
|
|
(org-indent-mode)
|
|
|
|
(view-mode)
|
|
|
|
(when (bound-and-true-p flyspell-mode)
|
|
|
|
(flyspell-mode -1))
|
|
|
|
(let (buffer-read-only)
|
|
|
|
(erase-buffer)
|
|
|
|
(insert (format "* Running tests on [[file:%s][%s]] (v%s)\n"
|
|
|
|
dotspacemacs-filepath dotspacemacs-filepath "0.0"))
|
|
|
|
;; dotspacemacs-version not implemented yet
|
|
|
|
;; (insert (format "* Running tests on %s (v%s)\n" dotspacemacs-filepath dotspacemacs-version))
|
|
|
|
(prog1
|
2015-09-01 03:27:18 +00:00
|
|
|
;; execute all tests no matter what
|
2015-12-16 14:45:08 +00:00
|
|
|
(cl-reduce (lambda (x y)
|
2015-09-01 03:27:18 +00:00
|
|
|
(and (funcall y) x))
|
|
|
|
'(dotspacemacs//test-dotspacemacs/layers
|
|
|
|
dotspacemacs//test-dotspacemacs/init)
|
|
|
|
:initial-value t)
|
2015-09-01 02:13:56 +00:00
|
|
|
(goto-char (point-min))))))))
|
2015-06-26 16:27:40 +00:00
|
|
|
|
2015-01-27 03:51:47 +00:00
|
|
|
(provide 'core-dotspacemacs)
|