spacemacs/doc/FAQ.org

14 KiB

Frequently Asked Questions

Common

Which version of Spacemacs am I running?

The version is displayed on the upper right corner of the loading screen. You may also just type SPC f e v.

What is the official pronunciation of Spacemacs?

As it is written, that is space then macs.

Why are packages installed with package-install automatically deleted by Spacemacs when it boots?

To declare new packages you have to create a new configuration layer, see the quick start guide.

The Spacemacs banner is ugly, what should I do?

Install the default font supported by Spacemacs or choose a fixed width font. More information in the font section of the documentation.

The powerline separators are ugly, how can I fix them?

Use the property :powerline-scale of the variable dotspacemacs-default-font. See font section of the documentation for more details.

The powerline separators have no anti-aliasing, what can I do?

Emacs powerline uses XMP images to draw the separators in a graphical environment. You can have anti-aliasing if you use the utf8 separator. Note that by default the utf8 separator is used in a terminal. See the powerline section in the font section of the documentation.

Why is after-init-hook not executed?

Don't launch Spacemacs with emacs -q -l init.el command. This command will run the hooked function in after-init-hook before the evaluation of the passed -l init.el file.

What is the difference between spacemacs-base and spacemacs distributions?

The distribution concept was introduced in 0.104.x. You can now choose between two distributions spacemacs or spacemacs-base. spacemacs-base contains only a minimal set of packages; whereas spacemacs is the full Spacemacs experience. Set the distribution with dotspacemacs-distribution variable. The default is spacemacs. For more information as to what is included, check out the packages.el file in the respective folders in the +distribution folder of the layers/ directory.

Should I place my settings in user-init or user-config?

Any variable that layer configuration code will read and act on must be set in user-init, and any variable that Spacemacs explicitly sets but you wish to override must be set in user-config.

Anything that isn't just setting a variable should 99% be in user-config.

Why do some of my org-related settings cause problems?

Since version 0.104, spacemacs uses the `org` version from the org ELPA repository instead of the one shipped with emacs. Then, any `org` related code should not be loaded before `dotspacemacs/user-config`, otherwise both versions will be loaded and will conflict.

Why is Spacemacs hanging on startup?

This is probably related to Helm using Tramp which tries to figure out some SSH/DNS settings at startup. The root cause is probably your ISP redirecting non-existing addresses to their own servers.

Try using these settings in the user-init function in your .spacemacs configuration:

  (setq tramp-ssh-controlmaster-options
        "-o ControlMaster=auto -o ControlPath='tramp.%%C' -o ControlPersist=no")

See issue #3422 and helm issue #1000 for details.

How do I…

Install a package not provided by a layer?

Spacemacs provides a variable in the dotspacemacs/layers function in .spacemacs called dotspacemacs-additional-packages. Just add a package name to the list and it will be installed when you restart.

Disable a package completely?

To completely disable a package and effectively uninstalling it even if it is part of your used layers, look for the variable dotspacemacs-excluded-packages in your dotfile and add the package name to it:

  (setq-default dotspacemacs-excluded-packages '(package1 package2 ...))

Disable a package only for a specific major-mode?

This is done by removing the hook added by Spacemacs. For example to remove flycheck support in python buffers, look for the function dotspacemacs/user-config in your dotfile and add the following code:

    (remove-hook 'python-mode-hook 'flycheck-mode)

Hint to know the name of the major-mode of the current buffer press: SPC h d v major-mode RET

Disable company for a specific major-mode?

It may be handy to disable company for a given mode if you plan on configuring auto-complete instead. On easy way to do it is to use the macro spacemacs|disable-company in the function dotspacemacs/user-config of your dotfile. The following snippet disables company for python-mode:

    (spacemacs|disable-company python-mode)

Change special buffer rules?

To change the way spacemacs marks buffers as useless, you can customize spacemacs-useless-buffers-regexp which marks buffers matching the regexp as useless. The variable spacemacs-useful-buffers-regexp marks buffers matching the regexp as useful buffers. Both can be customized the same way.

Examples:

    ;; Only mark helm buffers as useless
    (setq spacemacs-useless-buffers-regexp '("\\*helm\.\+\\*"))

    ;; Marking the *Messages* buffer as useful
    (push "\\*Messages\\*" spacemacs-useful-buffers-regexp)

Enable navigation by visual lines?

Add the following snippet to your dostpacemacs/config function:

    ;; Make evil-mode up/down operate in screen lines instead of logical lines
    (define-key evil-motion-state-map "j" 'evil-next-visual-line)
    (define-key evil-motion-state-map "k" 'evil-previous-visual-line)
    ;; Also in visual mode
    (define-key evil-visual-state-map "j" 'evil-next-visual-line)
    (define-key evil-visual-state-map "k" 'evil-previous-visual-line)

Disable evilification of a mode?

You can ensure a mode opens in emacs state by using evil-set-initial-state.

  (evil-set-initial-state 'magit-status-mode 'emacs)

You can also do this using buffer name regular expressions. E.g. for magit, which has a number of different major modes, you can catch them all with

  (push '("*magit" . emacs) evil-buffer-regexps)

This should make all original magit bindings work in the major modes in question. To enable the leader key in this case, you may have to define a binding in the mode's map, e.g. for magit-status-mode,

  (with-eval-after-load 'magit
    (define-key magit-status-mode-map
      (kbd dotspacemacs-leader-key) evil-leader--default-map))

Include underscores in word motions?

You can modify the syntax table of the mode in question. For example, for Python mode:

  (with-eval-after-load 'python
    (modify-syntax-entry ?_ "w" python-mode-syntax-table))

Setup $PATH?

Some layers require certain tools to be available on your $PATH. This means that your $PATH must contain the installation paths for those tools. For example, if you have installed some tools to ~/.local/bin and want them to be available in Spacemacs, you need to add ~/.local/bin to your $PATH.

Users of bash, zsh, sh and other similar shells should add following line to their .bashrc (.zshrc, .profile or your shell's equivalent). Note that the export part is very important.

export PATH=~/.local/bin:$PATH

Users of fish should add following line to their config.fish file (should be in $XDG_CONFIG_HOME or its default value - ~/.config/fish). Note that -x part is very important.

set -x PATH ~/.local/bin $PATH

Users of other shells should consult its documentation on how to setup $PATH variable (with export to environment).

So now, ~/.local/bin should be available in your $PATH. You can verify this by calling echo $PATH. But you also should verify that $PATH is set properly in your environment. To do so call following command in your terminal.

$ env | grep "PATH"

This is the value that will be used by Emacs. So it must contain ~/.local/bin.

After that you can run Spacemacs and check that it properly gets the value of $PATH by running M-: (getenv "PATH").

Note that having ~/.local.bin in your $PATH also means that it's possible to run terminal and call tools from ~/.local/bin without specifying their full path. Under certain conditions you might want to avoid modifying your $PATH. In that case you have the option of updating the value of exec-path in the dotspacemacs/user-config function of your .spacemacs file.

(add-to-list 'exec-path "~/.local/bin/")

Change or define an alias for an evil-leader prefix?

It is possible to change an evil-leader prefix by binding its keymap to another sequence. For instance, if you want to switch SPC S (spelling) with SPC d (used by dash) to make the former easier to reach, you can use:

(defun my-evil-leader/swap-keys (key1 key2)
  (let ((map1 (lookup-key evil-leader--default-map key1))
        (map2 (lookup-key evil-leader--default-map key2)))
    (evil-leader/set-key key1 map2 key2 map1)))
(my-evil-leader/swap-keys "S" "d")

If you want to define your own alias, like using SPC é (because it's an unmapped key on your keyboard-layout for instance) for accessing SPC w (windows management), you can use this:

(defun my-evil-leader/alias-of (key1 key2)
  (let ((map (lookup-key evil-leader--default-map key2)))
    (evil-leader/set-key key1 map)))
(my-evil-leader/alias-of "é" "w")

Restore the sentence delimiter to two spaces?

To restore the sentence delimiter to two spaces, add the following code to the dotspacemacs/user-init function of your .spacemacs:

(setq sentence-end-double-space t)

Windows

Why do the fonts look crappy on Windows?

You can install MacType on Windows to get very nice looking fonts. It is also recommended to disable smooth scrolling on Windows.

Why is there no Spacemacs logo in the startup buffer?

A GUI build of emacs supporting image display is required. You can follow the instructions here. Alternatively you can download binaries of emacs with image support included such as this one.

Why are all packages unavailable?

Check if your Emacs has HTTPS capabilities by doing M-: and then:

  (gnutls-available-p)

If this returns nil, you need to install the GnuTLS DDL file in the same directory as Emacs. See here for instructions.

OS X

Why are the powerline colors not correct on OS X?

This is a known issue as of Emacs 24.4 due to ns-use-srgb-colorspace defaulting to true. It is recommended to use the emacs-mac-port build. See the install section in the README for more details.