diff --git a/.gitignore b/.gitignore index 9aae8b4206b3cc95669d3b5bc8439dfb21016eb9..7b1e1150a10aa25a381a27b1af52b57adbb5d37a 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ auto-save-list /games/tetris-scores /url /Tutoriel.odt +/Configuration.el diff --git a/Configuration.org b/Configuration.org new file mode 100644 index 0000000000000000000000000000000000000000..46b9d4b4affa8383a76800369eb0509ef950c4a8 --- /dev/null +++ b/Configuration.org @@ -0,0 +1,997 @@ +#+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 diff --git a/Readme.org b/Readme.org index 300960629a2ae9678f0344091aec4b20e0200e3c..3a88a49794b31259c8ea9788d27608a7e2ebf5ee 100644 --- a/Readme.org +++ b/Readme.org @@ -1,6 +1,6 @@ #+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 diff --git a/init.el b/init.el index 244ee73291d70ca2e9e99ee2dcd2fd652793bbb2..07dda5ad4453d0cce20f335017939d211eb901b4 100644 --- a/init.el +++ b/init.el @@ -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.