Skip to content
Snippets Groups Projects
Select Git revision
  • 24789bd6fb5f6d026aca371072221c7599fa2235
  • master default
  • irony
3 results

dot-emacs

  • Clone with SSH
  • Clone with HTTPS
  • Name Last commit Last update
    snippets
    .gitignore
    Readme.org
    init.el

    Installation

    L’installation la plus simple de cette configuration se résume à renommer ce répertoire en

    ~/.emacs.d
    

    Emacs fonctionne plus rapidement lorsqu’il est lancé en mode client (plusieurs client s’attachent à un même serveur). Pour bénéficier de cette optimisation ajouter les alias suivants à votre shell

    alias emacs="emacsclient -q -a '' -c"
    alias kill-emacs="emacsclient -q -e '(let ((last-nonmenu-event nil))(save-buffers-kill-emacs))'"
    

    Tutoriels de M. Zamansky

    Cette configuration d’Emacs est grandement (et librement) inspirée de celle proposée par Mike Zamansky.

    Pour une excellente série tutoriels ainsi que la construction pas a pas de configurations, voir ci-dessous

    Choix d’interface

    Pas d’écran de bienvenue

    (setq inhibit-startup-message t)
    

    Augumente la mémoire pour le “garbage collector” => meilleures perfs

    (setq gc-cons-threshold 64000000)
    (add-hook 'after-init-hook
              #'(lambda ()
                  ;; restore after startup
                  (setq gc-cons-threshold 800000)))
    

    Pas de toolbar

    (tool-bar-mode -1)
    

    Réponses par y ou n

    (fset 'yes-or-no-p 'y-or-n-p)
    

    Commentaires

    Racourci Description
    C-c ; Commente ou décommente une région
    (global-set-key (kbd "C-c ;") 'comment-or-uncomment-region)
    

    Affiche aussi le numéro de colone

    (setq column-number-mode t)
    

    Désactive l’auto-save

    (setq auto-save-default nil)
    

    Auto-fill

    Utilise l’auto-fill

    (turn-on-auto-fill)
    

    … sauf quand on code

    (add-hook 'prog-mode-hook (lambda () (auto-fill-mode -1)))
    

    Supression des blancs inutiles

    On retire les blancs qui traînent en fin de ligne à la sauvegarde d’un buffer

    (add-hook 'before-save-hook
              (lambda ()
                (when (not (derived-mode-p 'ein:notebook-multilang-mode))
                  (delete-trailing-whitespace))))
    

    Affichage de la fonction courante

    (which-function-mode t)
    

    Powerline

    Un bel affichage pour la barre d’état (mode-line)

    (use-package powerline
      :ensure t
      :config (powerline-default-theme))
    

    Try

    Permet d’essayer des paquets (sans les installer de manère permanente)

    (use-package try
      :ensure t)
    

    Posframe

    Affiche des boites de dialogue

    (use-package posframe
      :ensure t)
    

    Which key

    Aide en ligne pour les raccourci (quelle touche ?)

    (use-package which-key
      :ensure t
      :config
      (which-key-mode))
    

    Org mode

    Org bullets makes things look pretty

    (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")
    

    Ace windows

    Permet de changer facilement de fenêtre

    (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)))))
        ))
    

    Ivy / Counsel

    Interface de complétion

    (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))
    

    Swiper

    Améliore la recherche incrémentale

    (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)
      ))
    

    Avy

    Saute très rapidement vers la zone de text contenant une lettre

    (use-package avy
      :ensure t
      :bind ("M-s" . avy-goto-word-1))
    

    Company

    Boites de dialogue pour la complétion

    (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)
    

    C++

    Transforme Emacs en un véritable IDE en utilisant Irony

    On branche Irony à Company

    (use-package company-irony
      :ensure t
      :config
      (add-to-list 'company-backends 'company-irony))
    

    On active Irony pour le C++

    (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))
    

    Eldoc / Irony

    Affiche la documentation des objets/functions dans le minibuffer

    (use-package irony-eldoc
      :ensure t
      :config
      (add-hook 'irony-mode-hook #'irony-eldoc))
    

    Formatage automatique : clang-format

    Création d’un racourci spécial pour formater une zone

    (use-package clang-format
      :ensure t
      :bind
      (("C-c C-f" . clang-format-region)))
    

    Remplace l’indentation classique d’Emacs par clang-format en C/C++

    (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)
    

    Force le formatage du fichier quand il est sauvgardé

    (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)
    

    Coloration syntaxique (C++ moderne)

    (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))
    

    Themes

    Préchargement de quelques themes

    (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)
    

    Chargement d’un theme

    (load-theme 'sourcerer t)
    

    Modeline

    Augmente la taille de la police

    (defvar my-font-size 140)
    

    Taille de la Modeline

    (set-face-attribute 'mode-line nil  :height my-font-size)
    

    Taille du titre

    (set-face-attribute 'header-line nil  :height my-font-size)
    

    Taille des attributs

    (set-face-attribute 'default nil :height my-font-size)
    

    Taille de la fenêtre et position

    (setq default-frame-alist
          '((top . 0) (left . 0) ;; position
            (width . 110) (height . 90) ;; size
            ))
    

    Parenthèses arc-en-ciel

    Améliore le visuel des parenthèses

    (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))
    

    Flycheck

    On branche flycheck à Irony

    (use-package flycheck-irony
      :ensure t
      :config
      (eval-after-load 'flycheck
        '(add-hook 'flycheck-mode-hook #'flycheck-irony-setup)))
    

    On charge flycheck

    (use-package flycheck
      :ensure t
      :init
      (global-flycheck-mode t))
    

    Active flycheck globalement

    (add-hook 'after-init-hook #'global-flycheck-mode)
    

    Python

    Attention pour que la configuration fonctionne, il faut installer virtualenv. Pour les systèmes Debian

    apt install virtualenv
    
    (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))
    

    YaSnippet

    Le système de templates pour Emacs

    (use-package yasnippet
      :ensure t
      :init (yas-global-mode 1))
    
    (use-package yasnippet-snippets
      :ensure t)
    

    Divers paquets

    Highlight line

    Mise en valeur de la ligne courante

    (global-hl-line-mode t)
    

    Beacon

    Flash de la ligne aux changements de page ou de buffer

    (use-package beacon
      :ensure t
      :config
      (beacon-mode 1))
    

    hungry-delete

    Suppression de tous les blancs quand appuie sur backspace ou delete

    (use-package hungry-delete
      :ensure t
      :config
      (global-hungry-delete-mode))
    

    Multiple-cursors

    Permet l’utilisation de plusieurs curseurs simultanément

    (use-package multiple-cursors
      :ensure t)
    

    Expand-region

    Sélectionne une zone de manière incrémentale. mot, phrase, paragraphe, etc de manière intelligente.

    (use-package expand-region
      :ensure t
      :config
      (global-set-key (kbd "C-=") 'er/expand-region))
    

    Meilleure gestion du kill-ring

    (setq save-interprogram-paste-before-kill t)
    

    Gestion de la restauration des buffers

    (global-auto-revert-mode 1)
    (setq auto-revert-verbose nil)
    (global-set-key (kbd "<f5>") 'revert-buffer)
    

    iedit

    Modifie les copies d’une zone séléctionnée simultanément

    Racourci Description
    C-h C-; démarrer les modifications
    M-ESC ESC sortir du mode
    (use-package iedit
      :ensure t)
    

    Narrow/widen dwim

    Réduit/agrandit une zone d’édition de manière intelligente

    (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))))
    

    Remplace la fonction Emacs standard par dwim

    (define-key ctl-x-map "n" #'narrow-or-widen-dwim)
    

    Web Mode

    Mode avancé pour l’édition de pages html, CSS,…

    (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
    

    Emmet mode

    Ensemble de fonctions permettant l’édition rapide de markup languages (html,sgml,…)

    (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))
    

    DIRED

    Permet d’utiliser reduire/agrandir les affichages de répertoires

    (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))
    

    LaTeX

    Configuration LaTeX basique.

    (use-package tex
      :ensure auctex)
    
    (defun tex-view ()
      (interactive)
      (tex-send-command "evince" (tex-append tex-print-file ".pdf")))
    

    Gestion de projets

    (use-package projectile
      :ensure t
      :bind ("C-c p" . projectile-command-map)
      :config
      (projectile-mode)
      (setq projectile-completion-system 'ivy))
    

    Org mode (langages suportés)

    Charge les langages disponnibles pour org-mode

    (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 )))
    

    Parenthèses

    (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)
    

    Taille de la police

    Change la police dynamiquement

    (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))
    

    Hydra

    Outil de simplification des raccourcis

    (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))
    

    Modes git

    Le sublime Magit

    (use-package magit
      :ensure t
      :init
      (progn (bind-key "C-x g" 'magit-status)))
    

    Affiche l’état git dans la marge

    (setq magit-status-margin
          '(nil "%Y-%m-%d %H:%M " magit-log-margin-width t 18))
    

    Utilise git-gutter avec hydra

    (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))
    

    Flyspell

    (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)
    

    C++

    Activation des ggtags

    (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)))))
    

    Cmake

    (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)))
                              ))
        ))
    

    Markdown

    (use-package markdown-mode
      :ensure t
      :mode (".md" ".markdown"))
    

    Dumb jump

    Permet de se déplacer très rapidement dans un texte

    (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)
    

    Origami

    Mode permettant le pliage (folding) de regions

    (use-package origami
      :ensure t)
    

    IBuffer

    Un meilleur gestionnaire de buffers.

    (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)
    

    Wgrep

    Permet de modifier le résultat d’un grep (donc simultanément dans plusieurs fichiers par exemple).

    Commandes de base

    Racourci 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 wgrep pour plus d’infos.

    (use-package wgrep
      :ensure t)
    (use-package wgrep-ag
      :ensure t)
    (require 'wgrep-ag)
    

    PDF tools

    Outils d’édition de PDF dans Emacs

    (use-package pdf-tools
      :ensure t)
    (use-package org-pdfview
      :ensure t)
    

    AutoYASnippet

    Outil de création rapide de snipets. Voir la documentation en ligne https://github.com/abo-abo/auto-yasnippet

    (use-package auto-yasnippet
      :ensure t)
    

    Divers

    Quelques réglages utilitaires

    (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")))
    

    Keyfreq

    Enregistre la fréquence d’utilisation de commandes. Pour obtenir les statistiques, utiliser la commande M-x keyfreq-show

    (use-package keyfreq
      :ensure t
      :config
      (require 'keyfreq)
      (keyfreq-mode 1)
      (keyfreq-autosave-mode 1))
    

    Dictionnaire et césures

    (use-package dictionary
      :ensure t)
    (use-package synosaurus
      :ensure t)
    

    COMMENT Local Variables: COMMENT ispell-local-dictionary: “francais” COMMENT End: