# Spacemacs conventions **Table of Contents** - [Spacemacs conventions](#spacemacs-conventions) - [Code guidelines](#code-guidelines) - [Spacemacs core and layer](#spacemacs-core-and-layer) - [All layers](#all-layers) - [Key bindings conventions](#key-bindings-conventions) - [Prefix reserved to the user](#prefix-reserved-to-the-user) - [Navigation in `insert state` buffers](#navigation-in-insert-state-buffers) - [Interactions with REPLs](#interactions-with-repls) ## Code guidelines ### Spacemacs core and layer Function names follow these conventions: - `spacemacs/xxx` is an interactive function called `xxx` - `spacemacs//xxx` is a private function called `xxx` (implementation details) - `spacemacs|xxx` is a _macro_ called `xxx` Variables follow these conventions: - `spacemacs-xxx` is a variable - `spacemacs--xxx` is a private variable (implementation details) ### All layers A package is initialized in a function with name `/init-xxx` where: - `` is the layer name - `xxx` is the package name ## Key bindings conventions ### Prefix reserved to the user ` o` must not be used by any layer. It is reserved for the user. ### Navigation in `insert state` buffers Navigation in buffers like `Helm` and `ido` which are in `insert state` should be performed with C-j and C-k for vertical movements. History navigation in shells or REPLs buffers should be bound as well to C-j and C-k. ### Interactions with REPLs A lot of languages can interact with a REPL. To help keeping a consistent behavior between those languages the following conventions should be followed: - lower case key bindings keep the focus on the current buffer - upper case key bindings move the focus to the REPL buffer Key | Description ------------------|------------------------------------------------------------ b | evaluate buffer B | evaluate buffer and switch to REPL f | evaluate function F | evaluate function and switch to REPL l | evaluate line L | evaluate line and switch to REPL r | evaluate region R | evaluate region and switch to REPL