Emacs pour le développement

Table of Contents

Salut à toi ! Bienvenue dans la bidouille !

Utilise « C-c C-o » (control+c puis control+o) pour suivre les liens (les trucs soulignés en bleu ci-dessous).

Ce fichier est disponible à http://people.bordeaux.inria.fr/lcourtes/emacs_dev.org.

1 prérequis

GNU Emacs 24.3+

Configuration du système de paquets :

(require 'package)
(setq package-archives '(("gnu" . "http://elpa.gnu.org/packages/")
                         ("ELPA" . "http://tromey.com/elpa/")
                         ("Marmelade" . "http://marmalade-repo.org/packages/")))

;; Make the installed packages available.
(package-initialize)

2 compilation

M-x compile C-x ` (next-error)

3 shell

M-x shell C-c C-p (comint-previous-prompt) C-c C-n (comint-next-prompt) C-c C-o (comint-delete-output)

4 coloration

4.1 coloration syntaxique

(global-font-lock-mode 1)

4.2 correspondance des parenthèses

(show-paren-mode 1)

4.3 coloration des changements

M-x highlight-changes-mode

4.4 coloration de trucs spécifiques

M-x highlight-regexp (C-x w h) M-x unhighlight-regexp (C-x w u) M-x hl-line-mode

4.5 coloration de mots récurrents

4.5.1 préparation

M-x package-list-packages

installe le paquet 'highlight-symbol'

4.5.2 utilisation

M-x highlight-symbol-mode

4.6 coloration de la casse de chameau

M-x glasses-mode

4.7 correction orthographique (dans les commentaires)

M-x flyspell-prog-mode

5 affichage

5.1 bug-reference-prog-mode

faire des boutons sur les références à des rapports de bug

5.2 fonction courante dans la ligne de mode

M-x which-function-mode

5.3 pliage de code

installer le paquet 'fold-dwim'.

(require 'fold-dwim)
(global-set-key (kbd "<f7>")      'fold-dwim-toggle)
(global-set-key (kbd "<M-f7>")    'fold-dwim-hide-all)
(global-set-key (kbd "<S-M-f7>")  'fold-dwim-show-all)

6 gestion de version

6.1 VC : générique

C-x v d (vc-dir) C-x v l (vc-print-log) C-x v L (vc-print-root-log) C-x v g (vc-annotate)

  • d, D, a, etc.

6.2 Magit : spécifique à Git

installer avec M-x package-list-packages

M-x magit-status stage/unstage, par hunk branches rebase

7 navigation dans le source

7.1 la base (en C)

C-M-a (c-beginning-of-defun) C-M-e (c-end-of-defun) M-a (c-beginning-of-statement) M-e (c-end-of-statement) M-} (forward-paragraph) M-{ (backward-paragraph)

7.2 pour la casse de chameau

M-x subword-mode

7.3 recherche avec grep

M-x grep M-x rgrep

7.4 navigation dans les fonctions

7.4.1 avec etags

M-! etags *.c RET M-.

7.4.2 avec GNU GLOBAL

  1. avec gtags (basique, fourni avec GLOBAL)
    (setq c-mode-hook
          '(lambda ()
             (gtags-mode 1)))
    
    (define-key gtags-mode-map [(meta ?.)] 'gtags-find-tag)
    (define-key gtags-mode-map [(meta ?*)] 'gtags-pop-stack)
    
    

    M-. et M-* M-x gtags-find-pattern M-x gtags-find-rtag

  2. avec xgtags (plus sophistiqué)

    M-. et M-* C-c w c (xgtags-find-rtag) C-c w s (xgtags-find-symbol) C-c w n (xgtags-select-next-tag) C-c w p (xgtags-select-prev-tag) C-c w r (xgtags-query-replace-regexp)

7.4.3 avec Semantic

M-x semantic-mode C-c , J (semantic-complete-jump)

problème : pas de pile de symboles, et donc pas de M-*

8 écriture

8.1 indentation

TAB (c-indent-line-or-region) C-M-\ (indent-region) M-x electric-indent-mode

8.2 insertion de parenthèses etc.

M-x electric-pair-mode

8.3 complétion avec « hippie-expand »

(define-key global-map [(meta ?/)]  'hippie-expand)

8.4 complétion avec Semantic

M-x semantic-mode M-TAB (complete-symbol, avec semantic-completion-at-point-function) M-x semantic-idle-completions-mode

9 trucs qui dépotent avec Semantic

M-x semantic-ia-show-summary M-x semantic-highlight-func-mode M-x semantic-stickyfunc-mode

10 déverminage : GUD

M-x gdb C-x SPC (gud-break) C-x C-a C-s (gud-step) C-x C-a C-n (gud-next) C-x C-a < (gud-up) C-x C-a > (gud-down) M-x gdb-display-stack-buffer

11 correction à la volée du code

installer Flycheck avec M-x package-list-packages

M-x flycheck-mode M-x flycheck-select-checker C-c ! n (flycheck-next-error) C-c ! p (flycheck-previous-error)

12 la prochaine fois…

Gnus, ERC, Org, Geiser, w3m, eww, etc.

Date: 16 octobre 2014

Author: Ludovic Courtès

Created: 2019-11-15 or. 18:51

Validate