From Latin prolusio(n- ), from prolus- ‘practised beforehand’, from the verb proludere, from pro ‘before’ + ludere ‘to play’.
Emacs Lisp CoffeeScript Shell Perl JavaScript Roff
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

IMPORTANT: prolusion is deprecated in favor of Emacs Doom. See my own private module and install instructions at ju's Emacs Dooom.

releases issues license built


From Latin prolusio(n- ), from prolus- ‘practised beforehand’, from the verb proludere, from pro ‘before’ + ludere ‘to play’.

Prolusion is meant to be as light a possible, and is completely tweaked towards my own use of emacs. For those who are looking for a more polished configuration kit, I can only recommand Prelude or Spacemacs.

Prolusion is organized as a set of layers, each of which is organized as follows: requirements, setup, functions, hooks, modeline and keybindings.


On Mac:

$ brew install git
$ brew install exa
$ brew install rbenv
$ brew install bash-completions
$ brew tap d12frosted/emacs-plus
$ brew install emacs-plus --HEAD --with-natural-title-bar
$ brew install sbcl
$ brew install global --with-ctags
$ brew install cmake
$ brew install llvm
$ brew install swig
$ brew install ack
$ brew install the_silver_searcher
$ brew install html2text
$ brew install mu --with-emacs --HEAD
$ brew install isync
$ brew install msmtp
$ brew install nodejs npm
$ brew install archey
$ brew install source-highlight
$ npm install -g tern tern-lint
$ npm install -g eslint babel-eslint eslint-plugin-react
$ npm install -g hpm-cli
$ npm install -g flow-language-server
$ hpm install hyper-quit
$ hpm install hyper-material-box
$ hpm install hyper-dark-scrollbar
$ hpm install hyper-statusline
$ hpm install hyper-tab-icons
$ hpm install hyperterm-alternatescroll
$ brew install go
$ go get -u
$ cpan iCal::Parser
$ ln -s $/.prolusion.d/prolusion-shell/eslintrc ~/.eslintrc
$ ln -s $/.prolusion.d/prolusion-shell/eshellrc ~/.eshellrc
$ ln -s $/.prolusion.d/prolusion-shell/bash_profile ~/.bash_profile
$ ln -s $/.prolusion.d/prolusion-shell/bash_profile_token ~/.bash_profile_token
$ ln -s $/.prolusion.d/prolusion-shell/bashrc ~/.bashrc
$ ln -s $/.prolusion.d/prolusion-shell/hyper.js ~/.hyper.js
$ cd ~/.prolusion.d
$ git clone --single-branch --depth=1 prolusion-cquery
$ cd prolusion-cquery
$ git submodule update --init
$ ./waf configure
$ ./waf build

On Ubuntu:

# apt install emacs25
# apt install gawk
# apt install git
# apt install global
# apt install clang
# apt install cmake
# apt install freeglut3
# apt install freeglut3-dev
# apt install llvm-dev
# apt install silversearcher-ag
# apt install ninja-build


$ curl -L | sh



$ brew   install emacs-plus --HEAD --with-natural-title-bar # if emacs is not installed
$ brew reinstall emacs-plus --HEAD --with-natural-title-bar # if emacs is     installed

Emacs prolusion

M-x prolusion/upgrade

Emacs prolusion packages

M-x prolusion/upgrade-packages


Take care to install all the fonts provided in .prolusion/prolusion-fonts.

M-x all-the-icons-install-fonts


On MacOSX, it is mandatory to add -DCMAKE_INSTALL_RPATH_USE_LINK_PATH=ON to the M-x irony-install-server command.

LSP - cquery backend

$ cd ~/.prolusion.d
$ git clone --single-branch --depth=1 prolusion-cquery
$ cd prolusion-cquery
$ git submodule update --init
$ ./waf configure
$ ./waf build


To get javscript completion, add the following .tern-project that contains at least the following minimal configuration.

    "plugins": {
        "node": {


$ mkdir -p $HOME/Mail
$ mkdir -p $HOME/Mail/Mu/Sent
$ mkdir -p $HOME/Mail/Mu/Trash
$ mkdir -p $HOME/Mail/Mu/Drafts
$ mkdir -p $HOME/Mail/iCloud
$ mkdir -p $HOME/Mail/Gmail
$ mkdir -p $HOME/Mail/Inria
$ mbsync -a
$ mu index -m $HOME/Mail



Keybinding Function
C-c u u prolusion/upgrade
C-c u p prolusion/upgrade-packages
C-c u f package-refresh-contents


Keybinding Function
C-c n m helm-mini
C-c n b helm-buffers-list
C-c n k helm-show-kill-ring
C-c n f helm-find-files
C-c n x helm-M-x


Keybinding Function
C-x o other-window
C-x O other-window -1
Keybinding Function
C-+ text-scale-increase
C-- text-scale-decrease
C-x C-0 text-scale-adjust
Keybinding Function
C-x ( start-kbd-macro
C-x ) end-kbd-macro
C-x e call-last-kbd-macro
Keybinding Function
C-M-f forward-sexp
C-M-b backward-sexp
Keybinding Function
C-x n n narrow-to-region
C-x n w widen
Keybinding Function
M-SPC just-one-space
Keybinding Function
M-x resize-window n resize-window--enlarge-down
M-x resize-window p resize-window--enlarge-up
M-x resize-window f resize-window--enlarge-horizontally
M-x resize-window b resize-window--shrink-horizontally
M-x resize-window r resize-window--reset-windows
M-x resize-window w resize-window--cycle-window-positive
M-x resize-window W resize-window--cycle-window-negative
Keybinding Function
F7 neotree-toggle
F8 nlinum-mode
F9 prolusion-mail-toggle


Keybinding Function
C-c b c clear-rectangle
C-c b d delete-rectangle
C-c b k kill-rectangle
C-c b o open-rectangle
C-c b t string-rectangle
C-c b y yank-rectangle
C-c b w wdired-change-to-wdired-mode
C-c b s bookmark-set
C-c b j bookmark-jump
C-c b l bookmark-bmenu-list
C-h k describe-key
C-h f describe-function
C-h v describe-variable
C-h b describe-bindings
C-h a apropos-command
M-u upcase-word
M-l downcase-word
M-c capitalize-word


Keybinding Function
C-c l l mutli-eshell
C-c l o mutli-eshell-switch
C-c l 0 mutli-eshell-go-back
C-c l c prolusion/eshell-clear-buffer


Keybinding Function
C-c e s ff-find-other-file
C-c e m make-header
C-c e c make-box-comment
C-c e d make-divider
C-c e r make-revision
C-c e g update-file-header
C-c e l prolusion/duplicate-line
C-c e e iedit-mode


Keybinding Function
C-c m p a conda-env-activate
C-c m p d conda-env-deactivate
C-c m p l conda-env-list
C-c m r a global-rbenv-mode


Keybinding Function
C-c y n yas-new-snippet
C-c y s yas-insert-snippet
C-c y v yas-visit-snippet-file


Keybinding Function
C-c v m magit-status
C-c ^ m smerge-keep-upper
C-c ^ o smerge-keep-lower


Keybinding Function
C-c p h helm-projectile
C-c p a helm-projectile-find-other-file
C-c p f helm-projectile-find-file
C-c p F helm-projectile-find-file-in-known-projects
C-c p g helm-projectile-find-file-dwim
C-c p d helm-projectile-find-dir
C-c p p helm-projectile-switch-project
C-c p e helm-projectile-recentf
C-c p b helm-projectile-switch-to-buffer
C-c p R projectile-regenerate-tags
C-c p j projectile-projectile-find-tag
C-c p s g helm-projectile-grep
C-c p s a helm-projectile-ack
C-c p s s helm-projectile-ag


Keybinding Function
C-c c c anaconda-mode-complete
C-c c d anaconda-mode-find-definitions
C-c c a anaconda-mode-find-assignments
C-c c r anaconda-mode-find-references
C-c c b anaconda-mode-go-back
C-c c s anaconda-mode-show-doc


Keybinding Function
C-c ! l flycheck-list-errors
C-c ! n flycheck-next-error
C-c ! p flycheck-previous-error
C-c ! s flycheck-select-checker
C-c ! x flycheck-disable-checker


Keybinding Function
C-c w n persp-next
C-c w p persp-prev
C-c w s persp-frame-switch
C-c w S persp-window-switch
C-c w r persp-rename
C-c w c persp-kill
C-c w a persp-add-buffer
C-c w t persp-temporarily-display-buffer
C-c w i persp-import-buffers
C-c w k persp-remove-buffer
C-c w K persp-kill-buffer
C-c w w persp-save-state-to-file
C-c w l persp-load-state-from-file


In neotree buffer:

Keybinding Function
n neotree-next-line
p neotree-prev-line
g neotree-refresh
H neotree-hidden-file-toggle
C-c C-n neotree-create-node
C-c C-d neotree-delete-node
C-c C-r neotree-rename-node
C-c C-c `neotree-change-root**


Keybinding Function
[ Info-backward-node
] Info-forward-node
< Info-top-node
> Info-final-node
u Info-up
b beginning-of-buffer
e end-of-buffer
i Info-index
n Info-next
p Info-prev


Keybinding Function
C-c s s cscope-find-this-symbol
C-c s d cscope-find-global-definition
C-c s g cscope-find-global-definition
C-c s G cscope-find-global-definition-no-prompting
C-c s = cscope-find-assignments-to-this-symbol
C-c s c cscope-find-functions-calling-this-function
C-c s C cscope-find-called-functions
C-c s t cscope-find-this-text-string
C-c s e cscope-find-egrep-pattern
C-c s f cscope-find-this-file
C-c s i cscope-find-files-including-file
Keybinding Function
C-c s b cscope-display-buffer
C-c s B cscope-display-buffer-toggle
C-c s n cscope-history-forward-line-current-result
C-c s N cscope-history-forward-file-current-result
C-c s p cscope-history-backward-line-current-result
C-c s P cscope-history-backward-file-current-result
C-c s u cscope-pop-mark
Keybinding Function
C-c s a cscope-set-initial-directory
C-c s A cscope-unset-initial-directory
Keybinding Function
C-c s L cscope-create-list-of-files-to-index
C-c s I cscope-index-files
C-c s E cscope-edit-list-of-files-to-index
C-c s W cscope-tell-user-about-directory
C-c s S cscope-tell-user-about-directory
C-c s T cscope-tell-user-about-directory
C-c s D cscope-dired-directory


Keybinding Function
TAB org-cycle
S-TAB org-global-cycle
M-RET org-meta-return
M- org-do-promote
M- org-do-demote
C-c C-n org-next-visible-heading
C-c C-p org-previous-visible-heading
C-c C-f org-forward-same-level
C-c C-b org-backward-same-level
C-c C-u outline-up-heading
C-c C-t org-todo
S- Cycle throug TODO items
S- Cycle throug TODO items
C-c C-c org-capture-finalize
C-c C-w org-capture-refile
C-c C-k org-capture-kill
C-c l org-store-link
C-c C-l org-insert-link
C-c C-l On a link, edit the link
C-c C-o org-open-at-point
C-c C-s org-schedule
C-c C-d org-deadline
C-c / d org-check-deadlines
C-c / b org-check-before-date
C-c / a org-check-after-date
C-c o a a org-agenda
C-c # org-update-checkbox-count
C-c C-x C-a org-archive-subtree-default
C-c C-z org-add-note