# Shell contribution layer for Spacemacs ![logo](img/shell.png) **Table of Contents** - [Shell contribution layer for Spacemacs](#shell-contribution-layer-for-spacemacs) - [Description](#description) - [Install](#install) - [Layer](#layer) - [Default shell](#default-shell) - [Default shell position and height](#default-shell-position-and-height) - [Set shell for term and ansi-term](#set-shell-for-term-and-ansi-term) - [Key bindings](#key-bindings) - [Multi-term](#multi-term) ## Description This layer configures the various shells available in Emacs. ## Install ### Layer To use this contribution add it to your `~/.spacemacs` ```elisp (setq-default dotspacemacs-configuration-layers '(shell)) ``` ### Default shell Emacs supports three types of shell: - the Emacs shell - the inferior shell - the terminal emulator - the ANSI terminal emulator You can find a quick introductions to them [here][mastering-emacs] To define the default shell you can set the layer variable `shell-default-shell` to the following variables: - `eshell` - `shell` - `term` - `ansi-term` - `multi-term` ```elisp (setq-default dotspacemacs-configuration-layers '(shell :variables shell-default-shell 'eshell)) ``` The default shell is quickly accessible via a the default shortcut key SPC '. ### Default shell position and height It is possible to choose where the shell should pop by setting the variable `shell-default-position` to either `top`, `bottom` or `full`. It is not possible to show it on the side for now. Default value is `bottom`. It is also possible to set the default height in percents with the variable `shell-default-height`. Default value is `30`. ```elisp (setq-default dotspacemacs-configuration-layers '(shell :variables shell-default-position 'bottom shell-default-height 30)) ``` ### Set shell for term and ansi-term The default shell can be set by setting the variable `shell-default-term-shell`. Default value is `/bin/bash`. ```elisp (setq-default dotspacemacs-configuration-layers '(shell :variables shell-default-term-shell "/bin/bash")) ``` ## Key bindings Key Binding | Description ---------------------|------------------------------------------------------------ SPC ' | Open, close or go to the default shell SPC a s e | Open, close or go to an `eshell` SPC a s i | Open, close or go to a `shell` SPC a s m | Open, close or go to a `multi-term` SPC a s t | Open, close or go to a `ansi-term` SPC a s T | Open, close or go to a `term` SPC m h | browse history with `helm` (works in `eshell` and `shell`) C-j | next item in history C-k | previous item in history **Note** You can open multiple shells using a numerical prefix argument, for instance pressing 2 SPC ; will a second default shell, the number of shell is indicated on the mode-line. ### Multi-term Key Binding | Description ---------------------|------------------------------------------------------------ SPC p $ t | run multi-term shell in root [mastering-emacs]: https://www.masteringemacs.org/article/running-shells-in-emacs-overview