Skip to content
Snippets Groups Projects
Commit 24ee2878 authored by Stéphane Del Pino's avatar Stéphane Del Pino
Browse files

Extraction du fichier de configuration

La configuration est maintenant écrite dans Configuration.org.
On l'inclut dans Readme.org pour la documentation.
parent e46b2c7c
No related branches found
No related tags found
No related merge requests found
......@@ -19,3 +19,4 @@ auto-save-list
/games/tetris-scores
/url
/Tutoriel.odt
/Configuration.el
#+STARTUP: org-pretty-entities entitiespretty
#+PROPERTY: header-args :comments yes :results silent
#+options: h:3 num:nil toc:nil
* Choix d'interface
** Pas d'écran de bienvenue
#+BEGIN_SRC emacs-lisp
(setq inhibit-startup-message t)
#+END_SRC
** Augumente la mémoire pour le /garbage collector/ \rArr meilleures performances
#+BEGIN_SRC emacs-lisp
(setq gc-cons-threshold 64000000)
(add-hook 'after-init-hook
#'(lambda ()
;; restore after startup
(setq gc-cons-threshold 800000)))
#+END_SRC
** Pas de toolbar
#+BEGIN_SRC emacs-lisp
(tool-bar-mode -1)
#+END_SRC
** Réponses par y ou n
#+BEGIN_SRC emacs-lisp
(fset 'yes-or-no-p 'y-or-n-p)
#+END_SRC
** Commentaires
| Raccourci | Description |
|-----------+-----------------------------------|
| ~C-c ;~ | Commente ou décommente une région |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "C-c ;") 'comment-or-uncomment-region)
#+END_SRC
** Affiche aussi le numéro de colone
#+BEGIN_SRC emacs-lisp
(setq column-number-mode t)
#+END_SRC
** Désactive l'auto-save
#+BEGIN_SRC emacs-lisp
(setq auto-save-default nil)
#+END_SRC
** Auto-fill
Utilise l'auto-fill
#+BEGIN_SRC emacs-lisp
(turn-on-auto-fill)
#+END_SRC
... sauf quand on code
#+BEGIN_SRC emacs-lisp
(add-hook 'prog-mode-hook (lambda () (auto-fill-mode -1)))
#+END_SRC
** Supression des blancs inutiles
On retire les blancs qui traînent en fin de ligne à la sauvegarde d'un
buffer
#+BEGIN_SRC emacs-lisp
(add-hook 'before-save-hook
(lambda ()
(when (not (derived-mode-p 'ein:notebook-multilang-mode))
(delete-trailing-whitespace))))
#+END_SRC
** Affichage de la fonction courante
#+BEGIN_SRC emacs-lisp
(which-function-mode t)
#+END_SRC
** Powerline
Un bel affichage pour la barre d'état (=mode-line=)
#+BEGIN_SRC emacs-lisp
(use-package powerline
:ensure t
:config (powerline-default-theme))
#+END_SRC
** Try
Permet d'essayer des paquets (sans les installer de manère permanente)
#+BEGIN_SRC emacs-lisp
(use-package try
:ensure t)
#+END_SRC
** Posframe
Affiche des boites de dialogue
#+BEGIN_SRC emacs-lisp
(use-package posframe
:ensure t)
#+END_SRC
** Which key
Aide en ligne pour les raccourcis (/quelle touche ?/)
#+BEGIN_SRC emacs-lisp
(use-package which-key
:ensure t
:config
(which-key-mode))
#+END_SRC
** Org mode
Org bullets makes things look pretty
#+BEGIN_SRC emacs-lisp
(use-package org
:ensure t
:pin org)
(setenv "BROWSER" "firefox")
(use-package org-bullets
:ensure t
:config
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
(custom-set-variables
'(org-default-notes-file (concat org-directory "/notes.org"))
'(org-export-html-postamble nil)
'(org-hide-leading-stars t)
'(org-startup-folded (quote overview))
'(org-startup-indented t)
'(org-confirm-babel-evaluate nil)
'(org-src-fontify-natively t)
)
(setq org-file-apps
(append '(
("\\.pdf\\'" . "evince %s")
("\\.x?html?\\'" . "/usr/bin/firefox %s")
) org-file-apps ))
(global-set-key "\C-ca" 'org-agenda)
(setq org-agenda-start-on-weekday nil)
(setq org-agenda-custom-commands
'(("c" "Simple agenda view"
((agenda "")
(alltodo "")))))
(global-set-key (kbd "C-c c") 'org-capture)
(defun make-capture-frame ()
"Create a new frame and run org-capture."
(interactive)
(make-frame '((name . "capture")))
(select-frame-by-name "capture")
(delete-other-windows)
(noflet ((switch-to-buffer-other-window (buf) (switch-to-buffer buf)))
(org-capture)))
(define-key org-mode-map (kbd "C-c >") (lambda () (interactive (org-time-stamp-inactive))))
(use-package htmlize :ensure t)
(setq org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar")
#+END_SRC
** Ace window
Permet de changer facilement de fenêtre. S'il y a plus de deux
buffers leur numéros sont affichés et il suffit de taper le numéro de
la fenêtre choisie pour s'y rendre.
| Raccourci | Description |
|-----------+----------------------------------------|
| ~C-x o~ | Met le curseur dans une autre fenêtre. |
#+BEGIN_SRC emacs-lisp
(use-package ace-window
:ensure t
:init
(progn
(setq aw-scope 'global) ;; was frame
(global-set-key (kbd "C-x O") 'other-frame)
(global-set-key [remap other-window] 'ace-window)
(custom-set-faces
'(aw-leading-char-face
((t (:inherit ace-jump-face-foreground :height 3.0)))))
))
#+END_SRC
** Ivy / Counsel
Interface de complétion
#+BEGIN_SRC emacs-lisp
(use-package counsel
:ensure t
:bind
(("M-y" . counsel-yank-pop)
:map ivy-minibuffer-map
("M-y" . ivy-next-line)))
(use-package ivy
:ensure t
:diminish (ivy-mode)
:bind (("C-x b" . ivy-switch-buffer))
:config
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq ivy-count-format "%d/%d ")
(setq ivy-display-style 'fancy))
#+END_SRC
** Swiper
Améliore la recherche incrémentale. Les raccourcis sont les raccourcis
classiques. Deux différences notables.
- ~<SPC>~ joue le rôle de joker:
~r<SPC>rc~ filtrera le mot /recherche/ par exemple
- Si on souhaite créer un nouveau fichier avec ~C-x C-f~ dont le nom
est une sous chaîne d'un fichier existant, il ne faut pas utiliser
~<RET>~ pour valider, mais ~C-j~. Utiliser ~<RET>~ valide la
recherche.
| Raccourci | Description |
|-----------+-------------------------------------------------|
| ~C-s~ | Recherche incrémentale vers le bas |
| ~C-r~ | Recherche incrémentale vers le haut |
| ~M-x~ | Recherche incrémentale d'une commande |
| ~C-x C-f~ | Recherche incrémentale ou création d'un fichier |
#+BEGIN_SRC emacs-lisp
(use-package swiper
:ensure t
:bind (("C-s" . swiper-isearch)
("C-r" . swiper-isearch)
("C-c C-r" . ivy-resume)
("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file))
:config
(progn
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq ivy-display-style 'fancy)
(define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
))
#+END_SRC
** Avy
Saute très rapidement vers la zone de texte contenant une lettre.
| Raccourci | Description |
|-----------+-------------------------------------|
| ~M-s~ | Demande une lettre du mot recherché |
#+BEGIN_SRC emacs-lisp
(use-package avy
:ensure t
:bind ("M-s" . avy-goto-word-1))
#+END_SRC
** Company
Boites de dialogue pour la complétion
#+BEGIN_SRC emacs-lisp
(use-package company
:ensure t
:config
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 3)
(global-company-mode t))
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
(use-package company-jedi
:ensure t
:config
(add-hook 'python-mode-hook 'jedi:setup)
)
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
#+END_SRC
** C++
Transforme Emacs en un véritable IDE en utilisant Irony
*** On branche Irony à Company
#+BEGIN_SRC emacs-lisp
(use-package company-irony
:ensure t
:config
(add-to-list 'company-backends 'company-irony))
#+END_SRC
*** On active Irony pour le C++
#+BEGIN_SRC emacs-lisp
(use-package irony
:ensure t
:config
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
#+END_SRC
*** Eldoc / Irony
Affiche la documentation des objets/functions dans le minibuffer
#+BEGIN_SRC emacs-lisp
(use-package irony-eldoc
:ensure t
:config
(add-hook 'irony-mode-hook #'irony-eldoc))
#+END_SRC
*** Formatage automatique : clang-format
Création d'un raccourci spécial pour formater une zone du code.
| Raccourci | Description |
|-----------+--------------------------------------------------|
| ~C-c C-f~ | Indente la région comme définie par clang-format |
#+BEGIN_SRC emacs-lisp
(use-package clang-format
:ensure t
:bind
(("C-c C-f" . clang-format-region)))
#+END_SRC
Remplace l'indentation classique d'Emacs par clang-format en C/C++
| Raccourci | Description |
|-----------+--------------------------------------------------|
| ~<TAB>~ | Indente la région comme définie par clang-format |
#+BEGIN_SRC emacs-lisp
(defun clang-format-c-mode-common-hook ()
(fset 'c-indent-region 'clang-format-region)
(define-key c-mode-base-map (kbd "<tab>") 'clang-format-region))
(add-hook 'c-mode-common-hook 'clang-format-c-mode-common-hook)
#+END_SRC
Force le formatage du fichier quand il est sauvgardé
#+BEGIN_SRC emacs-lisp
(defun clang-format-buffer-on-save ()
"Add auto-save hook for clang-format-buffer-smart."
(add-hook 'before-save-hook 'clang-format-buffer nil t))
(add-hook 'c-mode-common-hook 'clang-format-buffer-on-save)
#+END_SRC
*** Coloration syntaxique (C++ moderne)
#+BEGIN_SRC emacs-lisp
(use-package modern-cpp-font-lock
:ensure t
:init
(eval-when-compile
;; Silence missing function warnings
(declare-function modern-c++-font-lock-global-mode
"modern-cpp-font-lock.el"))
:config (modern-c++-font-lock-global-mode t))
#+END_SRC
** Themes
Préchargement de quelques themes
#+BEGIN_SRC emacs-lisp
(use-package cloud-theme :ensure t)
(use-package zenburn-theme :ensure t)
(use-package sourcerer-theme :ensure t)
(use-package monokai-theme :ensure t)
(use-package gruvbox-theme :ensure t)
(use-package bubbleberry-theme :ensure t)
(use-package solarized-theme :ensure t)
#+END_SRC
Chargement d'un theme
#+BEGIN_SRC emacs-lisp
(load-theme 'sourcerer t)
#+END_SRC
** Modeline
Augmente la taille de la police
#+BEGIN_SRC emacs-lisp
(defvar my-font-size 140)
#+END_SRC
Taille de la Modeline
#+BEGIN_SRC emacs-lisp
(set-face-attribute 'mode-line nil :height my-font-size)
#+END_SRC
Taille du titre
#+BEGIN_SRC emacs-lisp
(set-face-attribute 'header-line nil :height my-font-size)
#+END_SRC
Taille des attributs
#+BEGIN_SRC emacs-lisp
(set-face-attribute 'default nil :height my-font-size)
#+END_SRC
Taille de la fenêtre et position
#+BEGIN_SRC emacs-lisp
(setq default-frame-alist
'((top . 0) (left . 0) ;; position
(width . 110) (height . 90) ;; size
))
#+END_SRC
** Parenthèses arc-en-ciel
Améliore le visuel des parenthèses
#+BEGIN_SRC emacs-lisp
(use-package rainbow-delimiters
:ensure t
:init
(eval-when-compile
;; Silence missing function warnings
(declare-function rainbow-delimiters-mode "rainbow-delimiters.el"))
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
#+END_SRC
** Flycheck
On branche flycheck à Irony
#+BEGIN_SRC emacs-lisp
(use-package flycheck-irony
:ensure t
:config
(eval-after-load 'flycheck
'(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)))
#+END_SRC
On charge flycheck
#+BEGIN_SRC emacs-lisp
(use-package flycheck
:ensure t
:init
(global-flycheck-mode t))
#+END_SRC
Active flycheck globalement
#+BEGIN_SRC
(add-hook 'after-init-hook #'global-flycheck-mode)
#+END_SRC
** Python
Attention pour que la configuration fonctionne, il faut installer
~virtualenv~. Pour les systèmes Debian
#+BEGIN_SRC shell
apt install virtualenv
#+END_SRC
#+BEGIN_SRC emacs-lisp
(setq py-python-command "python3")
(setq python-shell-interpreter "python3")
(use-package elpy
:ensure t
:custom (elpy-rpc-backend "jedi")
:config
(elpy-enable))
(use-package virtualenvwrapper
:ensure t
:config
(venv-initialize-interactive-shells)
(venv-initialize-eshell))
#+END_SRC
** YaSnippet
Le système de templates pour Emacs
#+BEGIN_SRC emacs-lisp
(use-package yasnippet
:ensure t
:init (yas-global-mode 1))
(use-package yasnippet-snippets
:ensure t)
#+END_SRC
** Divers paquets
*** Highlight line
Mise en valeur de la ligne courante
#+BEGIN_SRC emacs-lisp
(global-hl-line-mode t)
#+END_SRC
*** Beacon
Flash de la ligne aux changements de page ou de buffer
#+BEGIN_SRC emacs-lisp
(use-package beacon
:ensure t
:config
(beacon-mode 1))
#+END_SRC
*** hungry-delete
Suppression de tous les blancs quand appuie sur backspace ou delete
#+BEGIN_SRC emacs-lisp
(use-package hungry-delete
:ensure t
:config
(global-hungry-delete-mode))
#+END_SRC
*** Multiple-cursors
Permet l'utilisation de plusieurs curseurs simultanément
#+BEGIN_SRC emacs-lisp
(use-package multiple-cursors
:ensure t)
#+END_SRC
*** Expand-region
Sélectionne une zone de manière incrémentale. mot, phrase, paragraphe,
etc de manière intelligente.
#+BEGIN_SRC emacs-lisp
(use-package expand-region
:ensure t
:config
(global-set-key (kbd "C-=") 'er/expand-region))
#+END_SRC
*** Meilleure gestion du ~kill-ring~
#+BEGIN_SRC emacs-lisp
(setq save-interprogram-paste-before-kill t)
#+END_SRC
*** Gestion de la restauration des buffers
#+BEGIN_SRC emacs-lisp
(global-auto-revert-mode 1)
(setq auto-revert-verbose nil)
(global-set-key (kbd "<f5>") 'revert-buffer)
#+END_SRC
** iedit
Modifie les copies d'une zone séléctionnée simultanément
| Raccourci | Description |
|-------------+----------------------------|
| ~C-h C-;~ | démarrer les modifications |
| ~M-ESC ESC~ | sortir du mode |
#+BEGIN_SRC emacs-lisp
(use-package iedit
:ensure t)
#+END_SRC
** Narrow/widen dwim
Réduit/agrandit une zone d'édition de manière intelligente
#+BEGIN_SRC emacs-lisp
(defun narrow-or-widen-dwim (p)
"If the buffer is narrowed, it widens. Otherwise, it narrows intelligently.
Intelligently means: region, org-src-block, org-subtree, or defun,
whichever applies first.
Narrowing to org-src-block actually calls `org-edit-src-code'.
With prefix P, don't widen, just narrow even if buffer is already
narrowed."
(interactive "P")
(declare (interactive-only))
(cond ((and (buffer-narrowed-p) (not p)) (widen))
((region-active-p)
(narrow-to-region (region-beginning) (region-end)))
((derived-mode-p 'org-mode)
;; `org-edit-src-code' is not a real narrowing command.
;; Remove this first conditional if you don't want it.
(cond ((ignore-errors (org-edit-src-code))
(delete-other-windows))
((org-at-block-p)
(org-narrow-to-block))
(t (org-narrow-to-subtree))))
(t (narrow-to-defun))))
#+END_SRC
Remplace la fonction Emacs standard par =dwim=
#+BEGIN_SRC emacs-lisp
(define-key ctl-x-map "n" #'narrow-or-widen-dwim)
#+END_SRC
** Web Mode
Mode avancé pour l'édition de pages =html=, =CSS=,...
#+BEGIN_SRC emacs-lisp
(use-package web-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.vue?\\'" . web-mode))
(setq web-mode-engines-alist
'(("django" . "\\.html\\'")))
(setq web-mode-ac-sources-alist
'(("css" . (ac-source-css-property))
("vue" . (ac-source-words-in-buffer ac-source-abbrev))
("html" . (ac-source-words-in-buffer ac-source-abbrev))))
(setq web-mode-enable-auto-closing t))
(setq web-mode-enable-auto-quoting t) ; this fixes the quote problem I mentioned
#+END_SRC
** Emmet mode
Ensemble de fonctions permettant l'édition rapide de markup languages (html,sgml,...)
#+BEGIN_SRC emacs-lisp
(use-package emmet-mode
:ensure t
:config
;; Auto-start on any markup modes
(add-hook 'sgml-mode-hook 'emmet-mode)
;; Auto-start on any markup modes
(add-hook 'web-mode-hook 'emmet-mode)
;; enable Emmet's css abbreviation
(add-hook 'css-mode-hook 'emmet-mode))
#+END_SRC
** Dired
Permet d'utiliser reduire/agrandir les affichages de répertoires
#+BEGIN_SRC emacs-lisp
(setq dired-dwim-target t)
(use-package dired-narrow
:ensure t
:config
(bind-key "C-c C-n" #'dired-narrow)
(bind-key "C-c C-f" #'dired-narrow-fuzzy)
(bind-key "C-x C-N" #'dired-narrow-regexp))
(use-package dired-subtree :ensure t
:after dired
:config
(bind-key "<tab>" #'dired-subtree-toggle dired-mode-map)
(bind-key "<backtab>" #'dired-subtree-cycle dired-mode-map))
#+END_SRC
** LaTeX
Configuration LaTeX basique.
#+BEGIN_SRC emacs-lisp
(use-package tex
:ensure auctex)
(defun tex-view ()
(interactive)
(tex-send-command "evince" (tex-append tex-print-file ".pdf")))
#+END_SRC
** Gestion de projets
#+BEGIN_SRC emacs-lisp
(use-package projectile
:ensure t
:bind ("C-c p" . projectile-command-map)
:config
(projectile-mode)
(setq projectile-completion-system 'ivy))
#+END_SRC
** Org mode (langages suportés)
Charge les langages disponnibles pour org-mode
#+BEGIN_SRC emacs-lisp
(org-babel-do-load-languages
'org-babel-load-languages
'((python . t)
(emacs-lisp . t)
(shell . t)
(C . t)
(js . t)
(ditaa . t)
(dot . t)
(org . t)
(latex . t )))
#+END_SRC
** Parenthèses
#+BEGIN_SRC emacs-lisp
(use-package smartparens
:ensure t
:hook (prog-mode . smartparens-mode)
:custom
(sp-escape-quotes-after-insert nil)
:config
(require 'smartparens-config))
(show-paren-mode t)
(setq show-paren-style 'mixed)
#+END_SRC
** Taille de la police
Change la taille de la police dynamiquement (temporaire)
| Raccourci | Description |
|-----------+---------------------------------|
| ~C-M-=~ | Augmente la taille de la police |
| ~C-M--~ | Réduit la taille de la police |
#+BEGIN_SRC emacs-lisp
(use-package default-text-scale
:ensure t
:config
(global-set-key (kbd "C-M-=") 'default-text-scale-increase)
(global-set-key (kbd "C-M--") 'default-text-scale-decrease))
#+END_SRC
** Hydra
Outil de simplification des raccourcis. Un popup contextuel apparaît.
| Raccourci | Description |
|-----------+---------------------------------------|
| ~C-x t~ | Active désactive certains utilitaires |
| ~C-x j~ | Déplacement dans le /buffer/ |
| ~C-c t~ | Gestion du timer |
#+BEGIN_SRC emacs-lisp
(use-package hydra
:ensure hydra
:init
(global-set-key
(kbd "C-x t")
(defhydra toggle (:color blue)
"toggle"
("a" abbrev-mode "abbrev")
("s" flyspell-mode "flyspell")
("d" toggle-debug-on-error "debug")
("c" fci-mode "fCi")
("f" auto-fill-mode "fill")
("t" toggle-truncate-lines "truncate")
("w" whitespace-mode "whitespace")
("q" nil "cancel")))
(global-set-key
(kbd "C-x j")
(defhydra gotoline
( :pre (linum-mode 1)
:post (linum-mode -1))
"goto"
("t" (lambda () (interactive)(move-to-window-line-top-bottom 0)) "top")
("b" (lambda () (interactive)(move-to-window-line-top-bottom -1)) "bottom")
("m" (lambda () (interactive)(move-to-window-line-top-bottom)) "middle")
("e" (lambda () (interactive)(goto-char (point-max))) "end")
("c" recenter-top-bottom "recenter")
("n" next-line "down")
("p" (lambda () (interactive) (forward-line -1)) "up")
("g" goto-line "goto-line")
))
(global-set-key
(kbd "C-c t")
(defhydra hydra-global-org (:color blue)
"Org"
("t" org-timer-start "Start Timer")
("s" org-timer-stop "Stop Timer")
("r" org-timer-set-timer "Set Timer") ; This one requires you be in an orgmode doc, as it sets the timer for the header
("p" org-timer "Print Timer") ; output timer value to buffer
("w" (org-clock-in '(4)) "Clock-In") ; used with (org-clock-persistence-insinuate) (setq org-clock-persist t)
("o" org-clock-out "Clock-Out") ; you might also want (setq org-log-note-clock-out t)
("j" org-clock-goto "Clock Goto") ; global visit the clocked task
("c" org-capture "Capture") ; Don't forget to define the captures you want http://orgmode.org/manual/Capture.html
("l" (or )rg-capture-goto-last-stored "Last Capture"))
))
(defhydra hydra-multiple-cursors (:hint nil)
"
Up^^ Down^^ Miscellaneous % 2(mc/num-cursors) cursor%s(if (> (mc/num-cursors) 1) \"s\" \"\")
------------------------------------------------------------------
[_p_] Next [_n_] Next [_l_] Edit lines [_0_] Insert numbers
[_P_] Skip [_N_] Skip [_a_] Mark all [_A_] Insert letters
[_M-p_] Unmark [_M-n_] Unmark [_s_] Search
[Click] Cursor at point [_q_] Quit"
("l" mc/edit-lines :exit t)
("a" mc/mark-all-like-this :exit t)
("n" mc/mark-next-like-this)
("N" mc/skip-to-next-like-this)
("M-n" mc/unmark-next-like-this)
("p" mc/mark-previous-like-this)
("P" mc/skip-to-previous-like-this)
("M-p" mc/unmark-previous-like-this)
("s" mc/mark-all-in-region-regexp :exit t)
("0" mc/insert-numbers :exit t)
("A" mc/insert-letters :exit t)
("<mouse-1>" mc/add-cursor-on-click)
;; Help with click recognition in this hydra
("<down-mouse-1>" ignore)
("<drag-mouse-1>" ignore)
("q" nil)
("<mouse-1>" mc/add-cursor-on-click)
("<down-mouse-1>" ignore)
("<drag-mouse-1>" ignore))
#+END_SRC
** Modes git
Le sublime *magit*
| Raccourci | Description |
|-----------+--------------------------------------|
| ~C-x g~ | Démarre *magit* (~M-x magit-status~) |
#+BEGIN_SRC emacs-lisp
(use-package magit
:ensure t
:init
(progn (bind-key "C-x g" 'magit-status)))
#+END_SRC
Affiche l'état git dans la marge
#+BEGIN_SRC emacs-lisp
(setq magit-status-margin
'(nil "%Y-%m-%d %H:%M " magit-log-margin-width t 18))
#+END_SRC
Utilise git-gutter avec hydra. Permet de voir rapidement les
modifications, de les valider (~git add -p~) ou de les annuler (~git checkout -p~)
| Raccourci | Description |
|-----------+--------------------------------------|
| ~C-x g~ | Démarre *magit* (~M-x magit-status~) |
#+BEGIN_SRC emacs-lisp
(use-package git-gutter
:ensure t
:init
(global-git-gutter-mode +1))
(global-set-key (kbd "M-g M-g") 'hydra-git-gutter/body)
(use-package git-timemachine
:ensure t)
(defhydra hydra-git-gutter (:body-pre (git-gutter-mode 1)
:hint nil)
"
Git gutter:
_j_: next hunk _s_tage hunk _q_uit
_k_: previous hunk _r_evert hunk _Q_uit and deactivate git-gutter
^ ^ _p_opup hunk
_h_: first hunk
_l_: last hunk set start _R_evision
"
("j" git-gutter:next-hunk)
("k" git-gutter:previous-hunk)
("h" (progn (goto-char (point-min))
(git-gutter:next-hunk 1)))
("l" (progn (goto-char (point-min))
(git-gutter:previous-hunk 1)))
("s" git-gutter:stage-hunk)
("r" git-gutter:revert-hunk)
("p" git-gutter:popup-hunk)
("R" git-gutter:set-start-revision)
("q" nil :color blue)
("Q" (progn (git-gutter-mode -1)
;; git-gutter-fringe doesn't seem to
;; clear the markup right away
(sit-for 0.1)
(git-gutter-mode))
:color blue))
#+END_SRC
** Flyspell
Correcteur orthographique à la volée
#+BEGIN_SRC emacs-lisp
(add-hook 'org-mode-hook 'turn-on-flyspell)
(add-hook 'org-mode-hook 'turn-on-auto-fill)
(add-hook 'mu4e-compose-mode-hook 'turn-on-flyspell)
(add-hook 'mu4e-compose-mode-hook 'turn-on-auto-fill)
#+END_SRC
** C++
Activation des *ggtags*
#+BEGIN_SRC emacs-lisp
(use-package ggtags
:ensure t
:config
(add-hook 'c-mode-common-hook
(lambda ()
(when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
(ggtags-mode 1)))))
#+END_SRC
** CMake
#+BEGIN_SRC emacs-lisp
(use-package cmake-mode
:ensure t
:mode ("CMakeLists.txt" ".cmake")
:hook (cmake-mode . (lambda ()
(add-to-list 'company-backends 'company-cmake)))
:config
(use-package cmake-font-lock
:ensure t
:defer t
:commands (cmake-font-lock-activate)
:hook (cmake-mode . (lambda ()
(cmake-font-lock-activate)
(font-lock-add-keywords
nil '(("\\<\\(FIXME\\|TODO\\|BUG\\|DONE\\)"
1 font-lock-warning-face t)))))))
#+END_SRC
** Markdown
#+BEGIN_SRC emacs-lisp
(use-package markdown-mode
:ensure t
:mode (".md" ".markdown"))
#+END_SRC
** Dumb jump
Permet de se déplacer *très* rapidement dans un texte ou de retrouver
une définition.
| Raccourci | Description |
|-----------+-------------------------------------------------------------------------|
| ~M-g o~ | Saute à la définition de l'objet sous le curseur dans une autre fenêtre |
| ~M-g j~ | Saute à la définition de l'objet sous le curseur |
#+BEGIN_SRC emacs-lisp
(use-package dumb-jump
:bind (("M-g o" . dumb-jump-go-other-window)
("M-g j" . dumb-jump-go)
("M-g x" . dumb-jump-go-prefer-external)
("M-g z" . dumb-jump-go-prefer-external-other-window))
:init
(dumb-jump-mode)
:ensure t)
#+END_SRC
** Origami
Mode permettant le pliage (/folding/) de regions
#+BEGIN_SRC emacs-lisp
(use-package origami
:ensure t)
#+END_SRC
** IBuffer
Un meilleur gestionnaire de /buffers/.
| Raccourci | Description |
|-----------+------------------------------------|
| ~C-x C-b~ | Ouvre le gestionnaire de /buffers/ |
| ~C-x b~ | Change de /buffer/ |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "C-x C-b") 'ibuffer)
(setq ibuffer-saved-filter-groups
(quote (("default"
("dired" (mode . dired-mode))
("org" (name . "^.*org$"))
("magit" (mode . magit-mode))
("IRC" (or (mode . circe-channel-mode)
(mode . circe-server-mode)))
("web" (or (mode . web-mode) (mode . js2-mode)))
("shell" (or (mode . eshell-mode) (mode . shell-mode)))
("mu4e" (or (mode . mu4e-compose-mode)
(name . "\\*mu4e\\*")))
("programming" (or (mode . clojure-mode)
(mode . clojurescript-mode)
(mode . python-mode)
(mode . c++-mode)))
("emacs" (or (name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")))
))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-auto-mode 1)
(ibuffer-switch-to-saved-filter-groups "default")))
;; Don't show filter groups if there are no buffers in that group
(setq ibuffer-show-empty-filter-groups nil)
;; Don't ask for confirmation to delete marked buffers
(setq ibuffer-expert t)
#+END_SRC
** Wgrep
Permet de modifier le résultat d'un *grep* (donc simultanément dans
plusieurs fichiers par exemple).
| Raccourci | Description |
|-----------+----------------------------------------------------------|
| ~C-c C-p~ | passe en mode écriture dans le buffer résultat de *grep* |
| ~C-c C-e~ | sauve les modifications |
| ~C-x C-q~ | quitte le mode |
voir [[https://github.com/emacsmirror/emacswiki.org/blob/master/wgrep.el][wgrep]] pour plus d'infos.
#+BEGIN_SRC emacs-lisp
(use-package wgrep
:ensure t)
(use-package wgrep-ag
:ensure t)
(require 'wgrep-ag)
#+END_SRC
** PDF tools
Outils d'édition de PDF dans Emacs
#+BEGIN_SRC emacs-lisp
(use-package pdf-tools
:ensure t)
(use-package org-pdfview
:ensure t)
#+END_SRC
** AutoYASnippet
Outil de création rapide de snipets.
Voir la documentation en ligne [[https://github.com/abo-abo/auto-yasnippet]]
#+BEGIN_SRC emacs-lisp
(use-package auto-yasnippet
:ensure t)
#+END_SRC
** Divers
Quelques réglages utilitaires
#+BEGIN_SRC emacs-lisp
(setq browse-url-browser-function 'browse-url-generic
browse-url-generic-program "firefox")
(setq auto-window-vscroll nil)
(blink-cursor-mode t)
(setq default-frame-alist
'((cursor-color . "DarkGrey")))
#+END_SRC
** Keyfreq
Enregistre la fréquence d'utilisation de commandes.
Pour obtenir les statistiques, utiliser la commande
~M-x keyfreq-show~
#+BEGIN_SRC emacs-lisp
(use-package keyfreq
:ensure t
:config
(require 'keyfreq)
(keyfreq-mode 1)
(keyfreq-autosave-mode 1))
#+END_SRC
** Dictionnaire et césures
#+BEGIN_SRC emacs-lisp
(use-package dictionary
:ensure t)
(use-package synosaurus
:ensure t)
#+END_SRC
#+BEGIN_COMMENT
Local Variables:
ispell-local-dictionary: "francais"
End:
#+END_COMMENT
#+STARTUP: org-pretty-entities entitiespretty
#+PROPERTY: header-args :comments yes :results silent
#+options: h:3 num:nil toc:nil
#+OPTIONS: h:4 num:nil toc:nil
* Installation
L'installation la plus simple de cette configuration se résume à
......@@ -26,994 +26,11 @@ On fournit un [[file:Tutoriel.org][tutoriel]] qui n'a pour but que de donner que
liens utiles et rappeler les principes de base et quelques raccourcis.
* Configuration
** Choix d'interface
*** Pas d'écran de bienvenue
#+BEGIN_SRC emacs-lisp
(setq inhibit-startup-message t)
#+END_SRC
*** Augumente la mémoire pour le /garbage collector/ \rArr meilleures performances
#+BEGIN_SRC emacs-lisp
(setq gc-cons-threshold 64000000)
(add-hook 'after-init-hook
#'(lambda ()
;; restore after startup
(setq gc-cons-threshold 800000)))
#+END_SRC
*** Pas de toolbar
#+BEGIN_SRC emacs-lisp
(tool-bar-mode -1)
#+END_SRC
*** Réponses par y ou n
#+BEGIN_SRC emacs-lisp
(fset 'yes-or-no-p 'y-or-n-p)
#+END_SRC
*** Commentaires
| Raccourci | Description |
|-----------+-----------------------------------|
| ~C-c ;~ | Commente ou décommente une région |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "C-c ;") 'comment-or-uncomment-region)
#+END_SRC
*** Affiche aussi le numéro de colone
#+BEGIN_SRC emacs-lisp
(setq column-number-mode t)
#+END_SRC
*** Désactive l'auto-save
#+BEGIN_SRC emacs-lisp
(setq auto-save-default nil)
#+END_SRC
*** Auto-fill
Utilise l'auto-fill
#+BEGIN_SRC emacs-lisp
(turn-on-auto-fill)
#+END_SRC
... sauf quand on code
#+BEGIN_SRC emacs-lisp
(add-hook 'prog-mode-hook (lambda () (auto-fill-mode -1)))
#+END_SRC
*** Supression des blancs inutiles
On retire les blancs qui traînent en fin de ligne à la sauvegarde d'un
buffer
#+BEGIN_SRC emacs-lisp
(add-hook 'before-save-hook
(lambda ()
(when (not (derived-mode-p 'ein:notebook-multilang-mode))
(delete-trailing-whitespace))))
#+END_SRC
*** Affichage de la fonction courante
#+BEGIN_SRC emacs-lisp
(which-function-mode t)
#+END_SRC
** Powerline
Un bel affichage pour la barre d'état (=mode-line=)
#+BEGIN_SRC emacs-lisp
(use-package powerline
:ensure t
:config (powerline-default-theme))
#+END_SRC
** Try
Permet d'essayer des paquets (sans les installer de manère permanente)
#+BEGIN_SRC emacs-lisp
(use-package try
:ensure t)
#+END_SRC
** Posframe
Affiche des boites de dialogue
#+BEGIN_SRC emacs-lisp
(use-package posframe
:ensure t)
#+END_SRC
** Which key
Aide en ligne pour les raccourcis (/quelle touche ?/)
#+BEGIN_SRC emacs-lisp
(use-package which-key
:ensure t
:config
(which-key-mode))
#+END_SRC
** Org mode
Org bullets makes things look pretty
#+BEGIN_SRC emacs-lisp
(use-package org
:ensure t
:pin org)
(setenv "BROWSER" "firefox")
(use-package org-bullets
:ensure t
:config
(add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
(custom-set-variables
'(org-default-notes-file (concat org-directory "/notes.org"))
'(org-export-html-postamble nil)
'(org-hide-leading-stars t)
'(org-startup-folded (quote overview))
'(org-startup-indented t)
'(org-confirm-babel-evaluate nil)
'(org-src-fontify-natively t)
)
(setq org-file-apps
(append '(
("\\.pdf\\'" . "evince %s")
("\\.x?html?\\'" . "/usr/bin/firefox %s")
) org-file-apps ))
(global-set-key "\C-ca" 'org-agenda)
(setq org-agenda-start-on-weekday nil)
(setq org-agenda-custom-commands
'(("c" "Simple agenda view"
((agenda "")
(alltodo "")))))
(global-set-key (kbd "C-c c") 'org-capture)
(defun make-capture-frame ()
"Create a new frame and run org-capture."
(interactive)
(make-frame '((name . "capture")))
(select-frame-by-name "capture")
(delete-other-windows)
(noflet ((switch-to-buffer-other-window (buf) (switch-to-buffer buf)))
(org-capture)))
(define-key org-mode-map (kbd "C-c >") (lambda () (interactive (org-time-stamp-inactive))))
(use-package htmlize :ensure t)
(setq org-ditaa-jar-path "/usr/share/ditaa/ditaa.jar")
#+END_SRC
** Ace window
Permet de changer facilement de fenêtre. S'il y a plus de deux
buffers leur numéros sont affichés et il suffit de taper le numéro de
la fenêtre choisie pour s'y rendre.
| Raccourci | Description |
|-----------+----------------------------------------|
| ~C-x o~ | Met le curseur dans une autre fenêtre. |
#+BEGIN_SRC emacs-lisp
(use-package ace-window
:ensure t
:init
(progn
(setq aw-scope 'global) ;; was frame
(global-set-key (kbd "C-x O") 'other-frame)
(global-set-key [remap other-window] 'ace-window)
(custom-set-faces
'(aw-leading-char-face
((t (:inherit ace-jump-face-foreground :height 3.0)))))
))
#+END_SRC
** Ivy / Counsel
Interface de complétion
#+BEGIN_SRC emacs-lisp
(use-package counsel
:ensure t
:bind
(("M-y" . counsel-yank-pop)
:map ivy-minibuffer-map
("M-y" . ivy-next-line)))
(use-package ivy
:ensure t
:diminish (ivy-mode)
:bind (("C-x b" . ivy-switch-buffer))
:config
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq ivy-count-format "%d/%d ")
(setq ivy-display-style 'fancy))
#+END_SRC
** Swiper
Améliore la recherche incrémentale. Les raccourcis sont les raccourcis
classiques. Deux différences notables.
- ~<SPC>~ joue le rôle de joker:
~r<SPC>rc~ filtrera le mot /recherche/ par exemple
- Si on souhaite créer un nouveau fichier avec ~C-x C-f~ dont le nom
est une sous chaîne d'un fichier existant, il ne faut pas utiliser
~<RET>~ pour valider, mais ~C-j~. Utiliser ~<RET>~ valide la
recherche.
| Raccourci | Description |
|-----------+-------------------------------------------------|
| ~C-s~ | Recherche incrémentale vers le bas |
| ~C-r~ | Recherche incrémentale vers le haut |
| ~M-x~ | Recherche incrémentale d'une commande |
| ~C-x C-f~ | Recherche incrémentale ou création d'un fichier |
#+BEGIN_SRC emacs-lisp
(use-package swiper
:ensure t
:bind (("C-s" . swiper-isearch)
("C-r" . swiper-isearch)
("C-c C-r" . ivy-resume)
("M-x" . counsel-M-x)
("C-x C-f" . counsel-find-file))
:config
(progn
(ivy-mode 1)
(setq ivy-use-virtual-buffers t)
(setq ivy-display-style 'fancy)
(define-key read-expression-map (kbd "C-r") 'counsel-expression-history)
))
#+END_SRC
** Avy
Saute très rapidement vers la zone de texte contenant une lettre.
| Raccourci | Description |
|-----------+-------------------------------------|
| ~M-s~ | Demande une lettre du mot recherché |
#+BEGIN_SRC emacs-lisp
(use-package avy
:ensure t
:bind ("M-s" . avy-goto-word-1))
#+END_SRC
** Company
Boites de dialogue pour la complétion
#+BEGIN_SRC emacs-lisp
(use-package company
:ensure t
:config
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 3)
(global-company-mode t))
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
(use-package company-jedi
:ensure t
:config
(add-hook 'python-mode-hook 'jedi:setup)
)
(defun my/python-mode-hook ()
(add-to-list 'company-backends 'company-jedi))
(add-hook 'python-mode-hook 'my/python-mode-hook)
#+END_SRC
** C++
Transforme Emacs en un véritable IDE en utilisant Irony
*** On branche Irony à Company
#+BEGIN_SRC emacs-lisp
(use-package company-irony
:ensure t
:config
(add-to-list 'company-backends 'company-irony))
#+END_SRC
*** On active Irony pour le C++
#+BEGIN_SRC emacs-lisp
(use-package irony
:ensure t
:config
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options))
#+END_SRC
*** Eldoc / Irony
Affiche la documentation des objets/functions dans le minibuffer
#+BEGIN_SRC emacs-lisp
(use-package irony-eldoc
:ensure t
:config
(add-hook 'irony-mode-hook #'irony-eldoc))
#+END_SRC
*** Formatage automatique : clang-format
Création d'un raccourci spécial pour formater une zone du code.
| Raccourci | Description |
|-----------+--------------------------------------------------|
| ~C-c C-f~ | Indente la région comme définie par clang-format |
#+BEGIN_SRC emacs-lisp
(use-package clang-format
:ensure t
:bind
(("C-c C-f" . clang-format-region)))
#+END_SRC
Remplace l'indentation classique d'Emacs par clang-format en C/C++
| Raccourci | Description |
|-----------+--------------------------------------------------|
| ~<TAB>~ | Indente la région comme définie par clang-format |
#+BEGIN_SRC emacs-lisp
(defun clang-format-c-mode-common-hook ()
(fset 'c-indent-region 'clang-format-region)
(define-key c-mode-base-map (kbd "<tab>") 'clang-format-region))
(add-hook 'c-mode-common-hook 'clang-format-c-mode-common-hook)
#+END_SRC
Force le formatage du fichier quand il est sauvgardé
#+BEGIN_SRC emacs-lisp
(defun clang-format-buffer-on-save ()
"Add auto-save hook for clang-format-buffer-smart."
(add-hook 'before-save-hook 'clang-format-buffer nil t))
(add-hook 'c-mode-common-hook 'clang-format-buffer-on-save)
#+END_SRC
*** Coloration syntaxique (C++ moderne)
#+BEGIN_SRC emacs-lisp
(use-package modern-cpp-font-lock
:ensure t
:init
(eval-when-compile
;; Silence missing function warnings
(declare-function modern-c++-font-lock-global-mode
"modern-cpp-font-lock.el"))
:config (modern-c++-font-lock-global-mode t))
#+END_SRC
** Themes
Préchargement de quelques themes
#+BEGIN_SRC emacs-lisp
(use-package cloud-theme :ensure t)
(use-package zenburn-theme :ensure t)
(use-package sourcerer-theme :ensure t)
(use-package monokai-theme :ensure t)
(use-package gruvbox-theme :ensure t)
(use-package bubbleberry-theme :ensure t)
(use-package solarized-theme :ensure t)
#+END_SRC
Chargement d'un theme
#+BEGIN_SRC emacs-lisp
(load-theme 'sourcerer t)
#+END_SRC
** Modeline
Augmente la taille de la police
#+BEGIN_SRC emacs-lisp
(defvar my-font-size 140)
#+END_SRC
Taille de la Modeline
#+BEGIN_SRC emacs-lisp
(set-face-attribute 'mode-line nil :height my-font-size)
#+END_SRC
Taille du titre
#+BEGIN_SRC emacs-lisp
(set-face-attribute 'header-line nil :height my-font-size)
#+END_SRC
Taille des attributs
#+BEGIN_SRC emacs-lisp
(set-face-attribute 'default nil :height my-font-size)
#+END_SRC
Taille de la fenêtre et position
#+BEGIN_SRC emacs-lisp
(setq default-frame-alist
'((top . 0) (left . 0) ;; position
(width . 110) (height . 90) ;; size
))
#+END_SRC
** Parenthèses arc-en-ciel
Améliore le visuel des parenthèses
#+BEGIN_SRC emacs-lisp
(use-package rainbow-delimiters
:ensure t
:init
(eval-when-compile
;; Silence missing function warnings
(declare-function rainbow-delimiters-mode "rainbow-delimiters.el"))
(add-hook 'prog-mode-hook #'rainbow-delimiters-mode))
#+END_SRC
** Flycheck
On branche flycheck à Irony
#+BEGIN_SRC emacs-lisp
(use-package flycheck-irony
:ensure t
:config
(eval-after-load 'flycheck
'(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)))
#+END_SRC
On charge flycheck
#+BEGIN_SRC emacs-lisp
(use-package flycheck
:ensure t
:init
(global-flycheck-mode t))
#+END_SRC
Active flycheck globalement
#+BEGIN_SRC
(add-hook 'after-init-hook #'global-flycheck-mode)
#+END_SRC
** Python
Attention pour que la configuration fonctionne, il faut installer
~virtualenv~. Pour les systèmes Debian
#+BEGIN_SRC shell
apt install virtualenv
#+END_SRC
#+BEGIN_SRC emacs-lisp
(setq py-python-command "python3")
(setq python-shell-interpreter "python3")
(use-package elpy
:ensure t
:custom (elpy-rpc-backend "jedi")
:config
(elpy-enable))
(use-package virtualenvwrapper
:ensure t
:config
(venv-initialize-interactive-shells)
(venv-initialize-eshell))
#+END_SRC
** YaSnippet
Le système de templates pour Emacs
#+BEGIN_SRC emacs-lisp
(use-package yasnippet
:ensure t
:init (yas-global-mode 1))
(use-package yasnippet-snippets
:ensure t)
#+END_SRC
** Divers paquets
*** Highlight line
Mise en valeur de la ligne courante
#+BEGIN_SRC emacs-lisp
(global-hl-line-mode t)
#+END_SRC
*** Beacon
Flash de la ligne aux changements de page ou de buffer
#+BEGIN_SRC emacs-lisp
(use-package beacon
:ensure t
:config
(beacon-mode 1))
#+END_SRC
*** hungry-delete
Suppression de tous les blancs quand appuie sur backspace ou delete
#+BEGIN_SRC emacs-lisp
(use-package hungry-delete
:ensure t
:config
(global-hungry-delete-mode))
#+END_SRC
*** Multiple-cursors
Permet l'utilisation de plusieurs curseurs simultanément
#+BEGIN_SRC emacs-lisp
(use-package multiple-cursors
:ensure t)
#+END_SRC
*** Expand-region
Sélectionne une zone de manière incrémentale. mot, phrase, paragraphe,
etc de manière intelligente.
#+BEGIN_SRC emacs-lisp
(use-package expand-region
:ensure t
:config
(global-set-key (kbd "C-=") 'er/expand-region))
#+END_SRC
*** Meilleure gestion du ~kill-ring~
#+BEGIN_SRC emacs-lisp
(setq save-interprogram-paste-before-kill t)
#+END_SRC
*** Gestion de la restauration des buffers
#+BEGIN_SRC emacs-lisp
(global-auto-revert-mode 1)
(setq auto-revert-verbose nil)
(global-set-key (kbd "<f5>") 'revert-buffer)
#+END_SRC
** iedit
Modifie les copies d'une zone séléctionnée simultanément
| Raccourci | Description |
|-------------+----------------------------|
| ~C-h C-;~ | démarrer les modifications |
| ~M-ESC ESC~ | sortir du mode |
#+BEGIN_SRC emacs-lisp
(use-package iedit
:ensure t)
#+END_SRC
** Narrow/widen dwim
Réduit/agrandit une zone d'édition de manière intelligente
#+BEGIN_SRC emacs-lisp
(defun narrow-or-widen-dwim (p)
"If the buffer is narrowed, it widens. Otherwise, it narrows intelligently.
Intelligently means: region, org-src-block, org-subtree, or defun,
whichever applies first.
Narrowing to org-src-block actually calls `org-edit-src-code'.
With prefix P, don't widen, just narrow even if buffer is already
narrowed."
(interactive "P")
(declare (interactive-only))
(cond ((and (buffer-narrowed-p) (not p)) (widen))
((region-active-p)
(narrow-to-region (region-beginning) (region-end)))
((derived-mode-p 'org-mode)
;; `org-edit-src-code' is not a real narrowing command.
;; Remove this first conditional if you don't want it.
(cond ((ignore-errors (org-edit-src-code))
(delete-other-windows))
((org-at-block-p)
(org-narrow-to-block))
(t (org-narrow-to-subtree))))
(t (narrow-to-defun))))
#+END_SRC
Remplace la fonction Emacs standard par =dwim=
#+BEGIN_SRC emacs-lisp
(define-key ctl-x-map "n" #'narrow-or-widen-dwim)
#+END_SRC
** Web Mode
Mode avancé pour l'édition de pages =html=, =CSS=,...
#+BEGIN_SRC emacs-lisp
(use-package web-mode
:ensure t
:config
(add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.vue?\\'" . web-mode))
(setq web-mode-engines-alist
'(("django" . "\\.html\\'")))
(setq web-mode-ac-sources-alist
'(("css" . (ac-source-css-property))
("vue" . (ac-source-words-in-buffer ac-source-abbrev))
("html" . (ac-source-words-in-buffer ac-source-abbrev))))
(setq web-mode-enable-auto-closing t))
(setq web-mode-enable-auto-quoting t) ; this fixes the quote problem I mentioned
#+END_SRC
** Emmet mode
Ensemble de fonctions permettant l'édition rapide de markup languages (html,sgml,...)
#+BEGIN_SRC emacs-lisp
(use-package emmet-mode
:ensure t
:config
;; Auto-start on any markup modes
(add-hook 'sgml-mode-hook 'emmet-mode)
;; Auto-start on any markup modes
(add-hook 'web-mode-hook 'emmet-mode)
;; enable Emmet's css abbreviation
(add-hook 'css-mode-hook 'emmet-mode))
#+END_SRC
** Dired
Permet d'utiliser reduire/agrandir les affichages de répertoires
#+BEGIN_SRC emacs-lisp
(setq dired-dwim-target t)
(use-package dired-narrow
:ensure t
:config
(bind-key "C-c C-n" #'dired-narrow)
(bind-key "C-c C-f" #'dired-narrow-fuzzy)
(bind-key "C-x C-N" #'dired-narrow-regexp))
(use-package dired-subtree :ensure t
:after dired
:config
(bind-key "<tab>" #'dired-subtree-toggle dired-mode-map)
(bind-key "<backtab>" #'dired-subtree-cycle dired-mode-map))
#+END_SRC
** LaTeX
Configuration LaTeX basique.
#+BEGIN_SRC emacs-lisp
(use-package tex
:ensure auctex)
(defun tex-view ()
(interactive)
(tex-send-command "evince" (tex-append tex-print-file ".pdf")))
#+END_SRC
** Gestion de projets
#+BEGIN_SRC emacs-lisp
(use-package projectile
:ensure t
:bind ("C-c p" . projectile-command-map)
:config
(projectile-mode)
(setq projectile-completion-system 'ivy))
#+END_SRC
** Org mode (langages suportés)
Charge les langages disponnibles pour org-mode
#+BEGIN_SRC emacs-lisp
(org-babel-do-load-languages
'org-babel-load-languages
'((python . t)
(emacs-lisp . t)
(shell . t)
(C . t)
(js . t)
(ditaa . t)
(dot . t)
(org . t)
(latex . t )))
#+END_SRC
** Parenthèses
#+BEGIN_SRC emacs-lisp
(use-package smartparens
:ensure t
:hook (prog-mode . smartparens-mode)
:custom
(sp-escape-quotes-after-insert nil)
:config
(require 'smartparens-config))
(show-paren-mode t)
(setq show-paren-style 'mixed)
#+END_SRC
** Taille de la police
Change la taille de la police dynamiquement (temporaire)
| Raccourci | Description |
|-----------+---------------------------------|
| ~C-M-=~ | Augmente la taille de la police |
| ~C-M--~ | Réduit la taille de la police |
#+BEGIN_SRC emacs-lisp
(use-package default-text-scale
:ensure t
:config
(global-set-key (kbd "C-M-=") 'default-text-scale-increase)
(global-set-key (kbd "C-M--") 'default-text-scale-decrease))
#+END_SRC
** Hydra
Outil de simplification des raccourcis. Un popup contextuel apparaît.
| Raccourci | Description |
|-----------+---------------------------------------|
| ~C-x t~ | Active désactive certains utilitaires |
| ~C-x j~ | Déplacement dans le /buffer/ |
| ~C-c t~ | Gestion du timer |
#+BEGIN_SRC emacs-lisp
(use-package hydra
:ensure hydra
:init
(global-set-key
(kbd "C-x t")
(defhydra toggle (:color blue)
"toggle"
("a" abbrev-mode "abbrev")
("s" flyspell-mode "flyspell")
("d" toggle-debug-on-error "debug")
("c" fci-mode "fCi")
("f" auto-fill-mode "fill")
("t" toggle-truncate-lines "truncate")
("w" whitespace-mode "whitespace")
("q" nil "cancel")))
(global-set-key
(kbd "C-x j")
(defhydra gotoline
( :pre (linum-mode 1)
:post (linum-mode -1))
"goto"
("t" (lambda () (interactive)(move-to-window-line-top-bottom 0)) "top")
("b" (lambda () (interactive)(move-to-window-line-top-bottom -1)) "bottom")
("m" (lambda () (interactive)(move-to-window-line-top-bottom)) "middle")
("e" (lambda () (interactive)(goto-char (point-max))) "end")
("c" recenter-top-bottom "recenter")
("n" next-line "down")
("p" (lambda () (interactive) (forward-line -1)) "up")
("g" goto-line "goto-line")
))
(global-set-key
(kbd "C-c t")
(defhydra hydra-global-org (:color blue)
"Org"
("t" org-timer-start "Start Timer")
("s" org-timer-stop "Stop Timer")
("r" org-timer-set-timer "Set Timer") ; This one requires you be in an orgmode doc, as it sets the timer for the header
("p" org-timer "Print Timer") ; output timer value to buffer
("w" (org-clock-in '(4)) "Clock-In") ; used with (org-clock-persistence-insinuate) (setq org-clock-persist t)
("o" org-clock-out "Clock-Out") ; you might also want (setq org-log-note-clock-out t)
("j" org-clock-goto "Clock Goto") ; global visit the clocked task
("c" org-capture "Capture") ; Don't forget to define the captures you want http://orgmode.org/manual/Capture.html
("l" (or )rg-capture-goto-last-stored "Last Capture"))
))
(defhydra hydra-multiple-cursors (:hint nil)
"
Up^^ Down^^ Miscellaneous % 2(mc/num-cursors) cursor%s(if (> (mc/num-cursors) 1) \"s\" \"\")
------------------------------------------------------------------
[_p_] Next [_n_] Next [_l_] Edit lines [_0_] Insert numbers
[_P_] Skip [_N_] Skip [_a_] Mark all [_A_] Insert letters
[_M-p_] Unmark [_M-n_] Unmark [_s_] Search
[Click] Cursor at point [_q_] Quit"
("l" mc/edit-lines :exit t)
("a" mc/mark-all-like-this :exit t)
("n" mc/mark-next-like-this)
("N" mc/skip-to-next-like-this)
("M-n" mc/unmark-next-like-this)
("p" mc/mark-previous-like-this)
("P" mc/skip-to-previous-like-this)
("M-p" mc/unmark-previous-like-this)
("s" mc/mark-all-in-region-regexp :exit t)
("0" mc/insert-numbers :exit t)
("A" mc/insert-letters :exit t)
("<mouse-1>" mc/add-cursor-on-click)
;; Help with click recognition in this hydra
("<down-mouse-1>" ignore)
("<drag-mouse-1>" ignore)
("q" nil)
("<mouse-1>" mc/add-cursor-on-click)
("<down-mouse-1>" ignore)
("<drag-mouse-1>" ignore))
#+END_SRC
** Modes git
Le sublime *magit*
| Raccourci | Description |
|-----------+--------------------------------------|
| ~C-x g~ | Démarre *magit* (~M-x magit-status~) |
#+BEGIN_SRC emacs-lisp
(use-package magit
:ensure t
:init
(progn (bind-key "C-x g" 'magit-status)))
#+END_SRC
Affiche l'état git dans la marge
#+BEGIN_SRC emacs-lisp
(setq magit-status-margin
'(nil "%Y-%m-%d %H:%M " magit-log-margin-width t 18))
#+END_SRC
Utilise git-gutter avec hydra. Permet de voir rapidement les
modifications, de les valider (~git add -p~) ou de les annuler (~git checkout -p~)
| Raccourci | Description |
|-----------+--------------------------------------|
| ~C-x g~ | Démarre *magit* (~M-x magit-status~) |
#+BEGIN_SRC emacs-lisp
(use-package git-gutter
:ensure t
:init
(global-git-gutter-mode +1))
(global-set-key (kbd "M-g M-g") 'hydra-git-gutter/body)
(use-package git-timemachine
:ensure t)
(defhydra hydra-git-gutter (:body-pre (git-gutter-mode 1)
:hint nil)
"
Git gutter:
_j_: next hunk _s_tage hunk _q_uit
_k_: previous hunk _r_evert hunk _Q_uit and deactivate git-gutter
^ ^ _p_opup hunk
_h_: first hunk
_l_: last hunk set start _R_evision
"
("j" git-gutter:next-hunk)
("k" git-gutter:previous-hunk)
("h" (progn (goto-char (point-min))
(git-gutter:next-hunk 1)))
("l" (progn (goto-char (point-min))
(git-gutter:previous-hunk 1)))
("s" git-gutter:stage-hunk)
("r" git-gutter:revert-hunk)
("p" git-gutter:popup-hunk)
("R" git-gutter:set-start-revision)
("q" nil :color blue)
("Q" (progn (git-gutter-mode -1)
;; git-gutter-fringe doesn't seem to
;; clear the markup right away
(sit-for 0.1)
(git-gutter-mode))
:color blue))
#+END_SRC
** Flyspell
Correcteur orthographique à la volée
#+BEGIN_SRC emacs-lisp
(add-hook 'org-mode-hook 'turn-on-flyspell)
(add-hook 'org-mode-hook 'turn-on-auto-fill)
(add-hook 'mu4e-compose-mode-hook 'turn-on-flyspell)
(add-hook 'mu4e-compose-mode-hook 'turn-on-auto-fill)
#+END_SRC
** C++
Activation des *ggtags*
#+BEGIN_SRC emacs-lisp
(use-package ggtags
:ensure t
:config
(add-hook 'c-mode-common-hook
(lambda ()
(when (derived-mode-p 'c-mode 'c++-mode 'java-mode)
(ggtags-mode 1)))))
#+END_SRC
** CMake
#+BEGIN_SRC emacs-lisp
(use-package cmake-mode
:ensure t
:mode ("CMakeLists.txt" ".cmake")
:hook (cmake-mode . (lambda ()
(add-to-list 'company-backends 'company-cmake)))
:config
(use-package cmake-font-lock
:ensure t
:defer t
:commands (cmake-font-lock-activate)
:hook (cmake-mode . (lambda ()
(cmake-font-lock-activate)
(font-lock-add-keywords
nil '(("\\<\\(FIXME\\|TODO\\|BUG\\|DONE\\)"
1 font-lock-warning-face t)))))))
#+END_SRC
** Markdown
#+BEGIN_SRC emacs-lisp
(use-package markdown-mode
:ensure t
:mode (".md" ".markdown"))
#+END_SRC
** Dumb jump
Permet de se déplacer *très* rapidement dans un texte ou de retrouver
une définition.
| Raccourci | Description |
|-----------+-------------------------------------------------------------------------|
| ~M-g o~ | Saute à la définition de l'objet sous le curseur dans une autre fenêtre |
| ~M-g j~ | Saute à la définition de l'objet sous le curseur |
#+BEGIN_SRC emacs-lisp
(use-package dumb-jump
:bind (("M-g o" . dumb-jump-go-other-window)
("M-g j" . dumb-jump-go)
("M-g x" . dumb-jump-go-prefer-external)
("M-g z" . dumb-jump-go-prefer-external-other-window))
:init
(dumb-jump-mode)
:ensure t)
#+END_SRC
** Origami
Mode permettant le pliage (/folding/) de regions
#+BEGIN_SRC emacs-lisp
(use-package origami
:ensure t)
#+END_SRC
** IBuffer
Un meilleur gestionnaire de /buffers/.
| Raccourci | Description |
|-----------+------------------------------------|
| ~C-x C-b~ | Ouvre le gestionnaire de /buffers/ |
| ~C-x b~ | Change de /buffer/ |
#+BEGIN_SRC emacs-lisp
(global-set-key (kbd "C-x C-b") 'ibuffer)
(setq ibuffer-saved-filter-groups
(quote (("default"
("dired" (mode . dired-mode))
("org" (name . "^.*org$"))
("magit" (mode . magit-mode))
("IRC" (or (mode . circe-channel-mode)
(mode . circe-server-mode)))
("web" (or (mode . web-mode) (mode . js2-mode)))
("shell" (or (mode . eshell-mode) (mode . shell-mode)))
("mu4e" (or (mode . mu4e-compose-mode)
(name . "\\*mu4e\\*")))
("programming" (or (mode . clojure-mode)
(mode . clojurescript-mode)
(mode . python-mode)
(mode . c++-mode)))
("emacs" (or (name . "^\\*scratch\\*$")
(name . "^\\*Messages\\*$")))
))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-auto-mode 1)
(ibuffer-switch-to-saved-filter-groups "default")))
;; Don't show filter groups if there are no buffers in that group
(setq ibuffer-show-empty-filter-groups nil)
;; Don't ask for confirmation to delete marked buffers
(setq ibuffer-expert t)
#+END_SRC
** Wgrep
Permet de modifier le résultat d'un *grep* (donc simultanément dans
plusieurs fichiers par exemple).
| Raccourci | Description |
|-----------+----------------------------------------------------------|
| ~C-c C-p~ | passe en mode écriture dans le buffer résultat de *grep* |
| ~C-c C-e~ | sauve les modifications |
| ~C-x C-q~ | quitte le mode |
voir [[https://github.com/emacsmirror/emacswiki.org/blob/master/wgrep.el][wgrep]] pour plus d'infos.
#+BEGIN_SRC emacs-lisp
(use-package wgrep
:ensure t)
(use-package wgrep-ag
:ensure t)
(require 'wgrep-ag)
#+END_SRC
** PDF tools
Outils d'édition de PDF dans Emacs
#+BEGIN_SRC emacs-lisp
(use-package pdf-tools
:ensure t)
(use-package org-pdfview
:ensure t)
#+END_SRC
** AutoYASnippet
Outil de création rapide de snipets.
Voir la documentation en ligne [[https://github.com/abo-abo/auto-yasnippet]]
#+BEGIN_SRC emacs-lisp
(use-package auto-yasnippet
:ensure t)
#+END_SRC
** Divers
Quelques réglages utilitaires
#+BEGIN_SRC emacs-lisp
(setq browse-url-browser-function 'browse-url-generic
browse-url-generic-program "firefox")
(setq auto-window-vscroll nil)
(blink-cursor-mode t)
(setq default-frame-alist
'((cursor-color . "DarkGrey")))
#+END_SRC
** Keyfreq
Enregistre la fréquence d'utilisation de commandes.
Pour obtenir les statistiques, utiliser la commande
~M-x keyfreq-show~
#+BEGIN_SRC emacs-lisp
(use-package keyfreq
:ensure t
:config
(require 'keyfreq)
(keyfreq-mode 1)
(keyfreq-autosave-mode 1))
#+END_SRC
** Dictionnaire et césures
#+BEGIN_SRC emacs-lisp
(use-package dictionary
:ensure t)
(use-package synosaurus
:ensure t)
#+END_SRC
La configuration utilisée est définie dans le fichier [[file:Configuration.org]]
et incluse ici.
#+INCLUDE: "~/.emacs.d/Configuration.org"
* À propos de cette configuration
Cette configuration d'Emacs est grandement (et librement) inspirée de
......
......@@ -39,7 +39,7 @@
:hook
(emacs-lisp-mode-hook . 'enable-auto-async-byte-compile-mode))
(org-babel-load-file (expand-file-name "~/.emacs.d/Readme.org"))
(org-babel-load-file (expand-file-name "~/.emacs.d/Configuration.org"))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment