diff --git a/.gitignore b/.gitignore index 9c27e40cb13089b980031bf73ebd46c7cec1f851..3e533597ffdf2976d36e03dd606d6d71965b6a57 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ /recentf auto-save-list /Readme.el -/Readme.html -/Readme.pdf *~ \#* *.elc @@ -14,15 +12,11 @@ auto-save-list /elpy/ /Readme.tex /Tutoriel.tex -/Tutoriel.pdf -/Tutoriel.html /games/tetris-scores /url /Tutoriel.odt /Configuration.el -/Configuration.pdf /Configuration.tex -/Configuration.html /.mc-lists.el /tramp /Tutoriel.pyg diff --git a/Configuration.html b/Configuration.html new file mode 100644 index 0000000000000000000000000000000000000000..bd69266468c6425c85f3a2fce47eba86bb9ba4ec --- /dev/null +++ b/Configuration.html @@ -0,0 +1,2145 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> +<head> +<!-- 2020-04-17 ven. 19:55 --> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>Configuration</title> +<meta name="generator" content="Org mode" /> +<style type="text/css"> + <!--/*--><![CDATA[/*><!--*/ + .title { text-align: center; + margin-bottom: .2em; } + .subtitle { text-align: center; + font-size: medium; + font-weight: bold; + margin-top:0; } + .todo { font-family: monospace; color: red; } + .done { font-family: monospace; color: green; } + .priority { font-family: monospace; color: orange; } + .tag { background-color: #eee; font-family: monospace; + padding: 2px; font-size: 80%; font-weight: normal; } + .timestamp { color: #bebebe; } + .timestamp-kwd { color: #5f9ea0; } + .org-right { margin-left: auto; margin-right: 0px; text-align: right; } + .org-left { margin-left: 0px; margin-right: auto; text-align: left; } + .org-center { margin-left: auto; margin-right: auto; text-align: center; } + .underline { text-decoration: underline; } + #postamble p, #preamble p { font-size: 90%; margin: .2em; } + p.verse { margin-left: 3%; } + pre { + border: 1px solid #ccc; + box-shadow: 3px 3px 3px #eee; + padding: 8pt; + font-family: monospace; + overflow: auto; + margin: 1.2em; + } + pre.src { + position: relative; + overflow: visible; + padding-top: 1.2em; + } + pre.src:before { + display: none; + position: absolute; + background-color: white; + top: -10px; + right: 10px; + padding: 3px; + border: 1px solid black; + } + pre.src:hover:before { display: inline;} + /* Languages per Org manual */ + pre.src-asymptote:before { content: 'Asymptote'; } + pre.src-awk:before { content: 'Awk'; } + pre.src-C:before { content: 'C'; } + /* pre.src-C++ doesn't work in CSS */ + pre.src-clojure:before { content: 'Clojure'; } + pre.src-css:before { content: 'CSS'; } + pre.src-D:before { content: 'D'; } + pre.src-ditaa:before { content: 'ditaa'; } + pre.src-dot:before { content: 'Graphviz'; } + pre.src-calc:before { content: 'Emacs Calc'; } + pre.src-emacs-lisp:before { content: 'Emacs Lisp'; } + pre.src-fortran:before { content: 'Fortran'; } + pre.src-gnuplot:before { content: 'gnuplot'; } + pre.src-haskell:before { content: 'Haskell'; } + pre.src-hledger:before { content: 'hledger'; } + pre.src-java:before { content: 'Java'; } + pre.src-js:before { content: 'Javascript'; } + pre.src-latex:before { content: 'LaTeX'; } + pre.src-ledger:before { content: 'Ledger'; } + pre.src-lisp:before { content: 'Lisp'; } + pre.src-lilypond:before { content: 'Lilypond'; } + pre.src-lua:before { content: 'Lua'; } + pre.src-matlab:before { content: 'MATLAB'; } + pre.src-mscgen:before { content: 'Mscgen'; } + pre.src-ocaml:before { content: 'Objective Caml'; } + pre.src-octave:before { content: 'Octave'; } + pre.src-org:before { content: 'Org mode'; } + pre.src-oz:before { content: 'OZ'; } + pre.src-plantuml:before { content: 'Plantuml'; } + pre.src-processing:before { content: 'Processing.js'; } + pre.src-python:before { content: 'Python'; } + pre.src-R:before { content: 'R'; } + pre.src-ruby:before { content: 'Ruby'; } + pre.src-sass:before { content: 'Sass'; } + pre.src-scheme:before { content: 'Scheme'; } + pre.src-screen:before { content: 'Gnu Screen'; } + pre.src-sed:before { content: 'Sed'; } + pre.src-sh:before { content: 'shell'; } + pre.src-sql:before { content: 'SQL'; } + pre.src-sqlite:before { content: 'SQLite'; } + /* additional languages in org.el's org-babel-load-languages alist */ + pre.src-forth:before { content: 'Forth'; } + pre.src-io:before { content: 'IO'; } + pre.src-J:before { content: 'J'; } + pre.src-makefile:before { content: 'Makefile'; } + pre.src-maxima:before { content: 'Maxima'; } + pre.src-perl:before { content: 'Perl'; } + pre.src-picolisp:before { content: 'Pico Lisp'; } + pre.src-scala:before { content: 'Scala'; } + pre.src-shell:before { content: 'Shell Script'; } + pre.src-ebnf2ps:before { content: 'ebfn2ps'; } + /* additional language identifiers per "defun org-babel-execute" + in ob-*.el */ + pre.src-cpp:before { content: 'C++'; } + pre.src-abc:before { content: 'ABC'; } + pre.src-coq:before { content: 'Coq'; } + pre.src-groovy:before { content: 'Groovy'; } + /* additional language identifiers from org-babel-shell-names in + ob-shell.el: ob-shell is the only babel language using a lambda to put + the execution function name together. */ + pre.src-bash:before { content: 'bash'; } + pre.src-csh:before { content: 'csh'; } + pre.src-ash:before { content: 'ash'; } + pre.src-dash:before { content: 'dash'; } + pre.src-ksh:before { content: 'ksh'; } + pre.src-mksh:before { content: 'mksh'; } + pre.src-posh:before { content: 'posh'; } + /* Additional Emacs modes also supported by the LaTeX listings package */ + pre.src-ada:before { content: 'Ada'; } + pre.src-asm:before { content: 'Assembler'; } + pre.src-caml:before { content: 'Caml'; } + pre.src-delphi:before { content: 'Delphi'; } + pre.src-html:before { content: 'HTML'; } + pre.src-idl:before { content: 'IDL'; } + pre.src-mercury:before { content: 'Mercury'; } + pre.src-metapost:before { content: 'MetaPost'; } + pre.src-modula-2:before { content: 'Modula-2'; } + pre.src-pascal:before { content: 'Pascal'; } + pre.src-ps:before { content: 'PostScript'; } + pre.src-prolog:before { content: 'Prolog'; } + pre.src-simula:before { content: 'Simula'; } + pre.src-tcl:before { content: 'tcl'; } + pre.src-tex:before { content: 'TeX'; } + pre.src-plain-tex:before { content: 'Plain TeX'; } + pre.src-verilog:before { content: 'Verilog'; } + pre.src-vhdl:before { content: 'VHDL'; } + pre.src-xml:before { content: 'XML'; } + pre.src-nxml:before { content: 'XML'; } + /* add a generic configuration mode; LaTeX export needs an additional + (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */ + pre.src-conf:before { content: 'Configuration File'; } + + table { border-collapse:collapse; } + caption.t-above { caption-side: top; } + caption.t-bottom { caption-side: bottom; } + td, th { vertical-align:top; } + th.org-right { text-align: center; } + th.org-left { text-align: center; } + th.org-center { text-align: center; } + td.org-right { text-align: right; } + td.org-left { text-align: left; } + td.org-center { text-align: center; } + dt { font-weight: bold; } + .footpara { display: inline; } + .footdef { margin-bottom: 1em; } + .figure { padding: 1em; } + .figure p { text-align: center; } + .inlinetask { + padding: 10px; + border: 2px solid gray; + margin: 10px; + background: #ffffcc; + } + #org-div-home-and-up + { text-align: right; font-size: 70%; white-space: nowrap; } + textarea { overflow-x: auto; } + .linenr { font-size: smaller } + .code-highlighted { background-color: #ffff00; } + .org-info-js_info-navigation { border-style: none; } + #org-info-js_console-label + { font-size: 10px; font-weight: bold; white-space: nowrap; } + .org-info-js_search-highlight + { background-color: #ffff00; color: #000000; font-weight: bold; } + .org-svg { width: 90%; } + /*]]>*/--> +</style> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/htmlize.css"/> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/readtheorg.css"/> +<script type="text/javascript" src="styles/lib/js/jquery.min.js"></script> +<script type="text/javascript" src="styles/lib/js/bootstrap.min.js"></script> +<script type="text/javascript" src="styles/lib/js/jquery.stickytableheaders.min.js"></script> +<script type="text/javascript" src="styles/readtheorg/js/readtheorg.js"></script> +<script type="text/javascript"> +/* +@licstart The following is the entire license notice for the +JavaScript code in this tag. + +Copyright (C) 2012-2019 Free Software Foundation, Inc. + +The JavaScript code in this tag is free software: you can +redistribute it and/or modify it under the terms of the GNU +General Public License (GNU GPL) as published by the Free Software +Foundation, either version 3 of the License, or (at your option) +any later version. The code is distributed WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. + +As additional permission under GNU GPL version 3 section 7, you +may distribute non-source (e.g., minimized or compacted) forms of +that code without the copy of the GNU GPL normally required by +section 4, provided you include this license notice and a URL +through which recipients can access the Corresponding Source. + + +@licend The above is the entire license notice +for the JavaScript code in this tag. +*/ +<!--/*--><![CDATA[/*><!--*/ + function CodeHighlightOn(elem, id) + { + var target = document.getElementById(id); + if(null != target) { + elem.cacheClassElem = elem.className; + elem.cacheClassTarget = target.className; + target.className = "code-highlighted"; + elem.className = "code-highlighted"; + } + } + function CodeHighlightOff(elem, id) + { + var target = document.getElementById(id); + if(elem.cacheClassElem) + elem.className = elem.cacheClassElem; + if(elem.cacheClassTarget) + target.className = elem.cacheClassTarget; + } +/*]]>*///--> +</script> +</head> +<body> +<div id="content"> +<h1 class="title">Configuration</h1> +<div id="table-of-contents"> +<h2>Table des matières</h2> +<div id="text-table-of-contents"> +<ul> +<li><a href="#orga047361">1. Choix d'interface</a> +<ul> +<li><a href="#org1d83aad">1.1. Pas d'écran de bienvenue</a></li> +<li><a href="#orgc19ff93">1.2. Déactive des raccourcis</a></li> +<li><a href="#org2344324">1.3. Augumente la mémoire pour le <i>garbage collector</i> ⇒ meilleures performances</a></li> +<li><a href="#org7c63296">1.4. Pas de toolbar</a></li> +<li><a href="#orgc618168">1.5. Réponses par y ou n</a></li> +<li><a href="#orgea7d37d">1.6. Commentaires</a></li> +<li><a href="#org871534c">1.7. Désactive l'auto-save</a></li> +<li><a href="#org676959c">1.8. Auto-fill</a></li> +<li><a href="#org8c62c01">1.9. Supression des blancs inutiles</a></li> +<li><a href="#orgb9de3ea">1.10. Numéros de lignes</a></li> +<li><a href="#orge68038e">1.11. Powerline</a></li> +<li><a href="#orgbd56db6">1.12. Try</a></li> +<li><a href="#org812b7a6">1.13. Posframe</a></li> +<li><a href="#org975dc31">1.14. Which key</a></li> +<li><a href="#org5a055b6">1.15. Gnuplot</a></li> +<li><a href="#org957f444">1.16. Org mode</a></li> +<li><a href="#org6f3b633">1.17. Ace window</a></li> +<li><a href="#orgb543b71">1.18. Ivy / Counsel</a></li> +<li><a href="#org89a0b97">1.19. Swiper</a></li> +<li><a href="#org570c12e">1.20. Avy</a></li> +<li><a href="#org5ec9709">1.21. Company</a></li> +<li><a href="#orgf19377e">1.22. C++</a> +<ul> +<li><a href="#org5f4530e">1.22.1. On branche Irony à Company</a></li> +<li><a href="#org6ae5b06">1.22.2. On active Irony pour le C++</a></li> +<li><a href="#orgc25c3a2">1.22.3. Eldoc / Irony</a></li> +<li><a href="#org127f0bc">1.22.4. Formatage automatique : <code>clang-format</code></a></li> +<li><a href="#org8c3c657">1.22.5. Coloration syntaxique (C++ moderne)</a></li> +</ul> +</li> +<li><a href="#org67a0b90">1.23. Thèmes</a></li> +<li><a href="#org60df07f">1.24. Modeline</a></li> +<li><a href="#org5a01027">1.25. Parenthèses arc-en-ciel</a></li> +<li><a href="#org6bb5c23">1.26. FlyCheck</a></li> +<li><a href="#org774569c">1.27. Python</a></li> +<li><a href="#org846067d">1.28. YASnippet</a></li> +<li><a href="#org17b8e19">1.29. Divers paquets</a> +<ul> +<li><a href="#org16633b9">1.29.1. Highlight line</a></li> +<li><a href="#org6365242">1.29.2. Beacon</a></li> +<li><a href="#orgfd695dc">1.29.3. hungry-delete</a></li> +<li><a href="#org4eb4412">1.29.4. Expand-region</a></li> +<li><a href="#org7782288">1.29.5. Meilleure gestion du <code>kill-ring</code></a></li> +<li><a href="#org23e9b5d">1.29.6. Gestion de la restauration des buffers</a></li> +</ul> +</li> +<li><a href="#org4858766">1.30. iedit</a></li> +<li><a href="#orge1c5906">1.31. Narrow/widen dwim</a></li> +<li><a href="#org8e0ad25">1.32. Web Mode</a></li> +<li><a href="#org6dfdf29">1.33. Emmet mode</a></li> +<li><a href="#org79c2033">1.34. Dired-dwim</a></li> +<li><a href="#org95b7b6d">1.35. LaTeX</a></li> +<li><a href="#org0b2a336">1.36. Gestion de projets</a></li> +<li><a href="#org2d3162f">1.37. Org-mode (langages suportés)</a></li> +<li><a href="#org85b75a7">1.38. Parenthèses</a></li> +<li><a href="#org8a5d8a8">1.39. Taille de la police</a></li> +<li><a href="#orga3e28d8">1.40. Hydra</a></li> +<li><a href="#org1e49d2e">1.41. Modes git</a></li> +<li><a href="#orgcfd101e">1.42. FlySpell</a></li> +<li><a href="#orgd098def">1.43. C++</a></li> +<li><a href="#org23a07a8">1.44. Compilation en C++</a></li> +<li><a href="#org9a73218">1.45. CMake</a></li> +<li><a href="#orgc15572d">1.46. Markdown</a></li> +<li><a href="#org22c7ee2">1.47. Dumb jump</a></li> +<li><a href="#org74fda95">1.48. Origami</a></li> +<li><a href="#orga762c61">1.49. IBuffer</a></li> +<li><a href="#org9313050">1.50. WGrep</a></li> +<li><a href="#orgfc226d0">1.51. PDF tools</a></li> +<li><a href="#orgf508c87">1.52. AutoYASnippet</a></li> +<li><a href="#org612705e">1.53. Divers</a></li> +<li><a href="#orgb43c622">1.54. Keyfreq</a></li> +<li><a href="#orgc951d86">1.55. Dictionnaire et césures</a></li> +</ul> +</li> +<li><a href="#org7122c3e">2. Annexes</a> +<ul> +<li><a href="#org0d577a4">2.1. Génération de toute la documentation</a></li> +</ul> +</li> +</ul> +</div> +</div> + +<div id="outline-container-orga047361" class="outline-2"> +<h2 id="orga047361"><span class="section-number-2">1</span> Choix d'interface</h2> +<div class="outline-text-2" id="text-1"> +</div> +<div id="outline-container-org1d83aad" class="outline-3"> +<h3 id="org1d83aad"><span class="section-number-3">1.1</span> Pas d'écran de bienvenue</h3> +<div class="outline-text-3" id="text-1-1"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> inhibit-startup-message t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgc19ff93" class="outline-3"> +<h3 id="orgc19ff93"><span class="section-number-3">1.2</span> Déactive des raccourcis</h3> +<div class="outline-text-3" id="text-1-2"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-x C-z"</span><span class="org-rainbow-delimiters-depth-2">)</span> nil<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org2344324" class="outline-3"> +<h3 id="org2344324"><span class="section-number-3">1.3</span> Augumente la mémoire pour le <i>garbage collector</i> ⇒ meilleures performances</h3> +<div class="outline-text-3" id="text-1-3"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> gc-cons-threshold 64000000<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'after-init-hook + #'<span class="org-rainbow-delimiters-depth-2">(</span>lambda <span class="org-rainbow-delimiters-depth-3">()</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">restore after startup</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> gc-cons-threshold 800000<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org7c63296" class="outline-3"> +<h3 id="org7c63296"><span class="section-number-3">1.4</span> Pas de toolbar</h3> +<div class="outline-text-3" id="text-1-4"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>tool-bar-mode -1<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgc618168" class="outline-3"> +<h3 id="orgc618168"><span class="section-number-3">1.5</span> Réponses par y ou n</h3> +<div class="outline-text-3" id="text-1-5"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>fset 'yes-or-no-p 'y-or-n-p<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgea7d37d" class="outline-3"> +<h3 id="orgea7d37d"><span class="section-number-3">1.6</span> Commentaires</h3> +<div class="outline-text-3" id="text-1-6"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c ;</code></td> +<td class="org-left">Commente ou décommente une région</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-c ;"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'comment-or-uncomment-region<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org871534c" class="outline-3"> +<h3 id="org871534c"><span class="section-number-3">1.7</span> Désactive l'auto-save</h3> +<div class="outline-text-3" id="text-1-7"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> auto-save-default nil<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org676959c" class="outline-3"> +<h3 id="org676959c"><span class="section-number-3">1.8</span> Auto-fill</h3> +<div class="outline-text-3" id="text-1-8"> +<p> +Utilise le mode mineur <code>auto-fill</code> (des retours à la ligne sont +automatiquement ajoutés quand les lignes sont trop longues). +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>turn-on-auto-fill<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +<p> +… sauf quand on code +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'prog-mode-hook <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">()</span> <span class="org-rainbow-delimiters-depth-3">(</span>auto-fill-mode -1<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org8c62c01" class="outline-3"> +<h3 id="org8c62c01"><span class="section-number-3">1.9</span> Supression des blancs inutiles</h3> +<div class="outline-text-3" id="text-1-9"> +<p> +On retire les blancs qui traînent en fin de ligne à la sauvegarde d'un +<i>buffer</i> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'before-save-hook + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">()</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-4">(</span>not <span class="org-rainbow-delimiters-depth-5">(</span>derived-mode-p 'ein:notebook-multilang-mode<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span>delete-trailing-whitespace<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgb9de3ea" class="outline-3"> +<h3 id="orgb9de3ea"><span class="section-number-3">1.10</span> Numéros de lignes</h3> +<div class="outline-text-3" id="text-1-10"> +<p> +Affiche les numéros des lignes en marge de gauche. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-2">(</span>version<= <span class="org-string">"26.0.50"</span> emacs-version<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">progn</span> + <span class="org-rainbow-delimiters-depth-3">(</span>global-display-line-numbers-mode 'visual<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>add-hook 'pdf-view-mode-hook <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-5">()</span> <span class="org-rainbow-delimiters-depth-5">(</span>display-line-numbers-mode -1<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orge68038e" class="outline-3"> +<h3 id="orge68038e"><span class="section-number-3">1.11</span> Powerline</h3> +<div class="outline-text-3" id="text-1-11"> +<p> +Un bel affichage pour la barre d'état (<i>modeline</i>) +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">powerline</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> <span class="org-rainbow-delimiters-depth-2">(</span>powerline-default-theme<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgbd56db6" class="outline-3"> +<h3 id="orgbd56db6"><span class="section-number-3">1.12</span> Try</h3> +<div class="outline-text-3" id="text-1-12"> +<p> +Permet d'essayer des paquets (sans les installer de manère permanente) +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">try</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org812b7a6" class="outline-3"> +<h3 id="org812b7a6"><span class="section-number-3">1.13</span> Posframe</h3> +<div class="outline-text-3" id="text-1-13"> +<p> +Affiche des boites de dialogue +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">posframe</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org975dc31" class="outline-3"> +<h3 id="org975dc31"><span class="section-number-3">1.14</span> Which key</h3> +<div class="outline-text-3" id="text-1-14"> +<p> +Aide en ligne pour les raccourcis (<i>quelle touche ?</i>) +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">which-key</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>which-key-mode<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org5a055b6" class="outline-3"> +<h3 id="org5a055b6"><span class="section-number-3">1.15</span> Gnuplot</h3> +<div class="outline-text-3" id="text-1-15"> +<p> +Ajout du mode <code>gnuplot</code>, en particulier pour les interactions avec +<code>Org-mode</code> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">gnuplot</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org957f444" class="outline-3"> +<h3 id="org957f444"><span class="section-number-3">1.16</span> Org mode</h3> +<div class="outline-text-3" id="text-1-16"> +<p> +<i>Org bullets</i> pour un plus bel affichage des sections +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">org</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:pin</span> org<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>setenv <span class="org-string">"BROWSER"</span> <span class="org-string">"firefox"</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">org-bullets</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'org-mode-hook <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-4">()</span> <span class="org-rainbow-delimiters-depth-4">(</span>org-bullets-mode 1<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'org-babel-after-execute-hook + '<span class="org-rainbow-delimiters-depth-3">(</span>lambda <span class="org-rainbow-delimiters-depth-4">()</span> <span class="org-rainbow-delimiters-depth-4">(</span>org-redisplay-inline-images<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'org-latex-packages-alist '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">""</span> <span class="org-string">"listingsutf8"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'org-latex-packages-alist '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">""</span> <span class="org-string">"minted"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>custom-set-variables + '<span class="org-rainbow-delimiters-depth-2">(</span>org-default-notes-file <span class="org-rainbow-delimiters-depth-3">(</span>concat org-directory <span class="org-string">"/notes.org"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-export-html-postamble nil<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-hide-leading-stars t<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-startup-folded <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">quote</span> overview<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-startup-indented t<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-confirm-babel-evaluate nil<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-src-fontify-natively t<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-html-htmlize-output-type 'css<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-latex-listings 'minted<span class="org-rainbow-delimiters-depth-2">)</span> + '<span class="org-rainbow-delimiters-depth-2">(</span>org-hide-emphasis-markers t<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-startup-with-inline-images t<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-latex-listings 'minted + org-latex-packages-alist '<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">""</span> <span class="org-string">"minted"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + org-latex-pdf-process + '<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"</span> + <span class="org-string">"pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-file-apps + <span class="org-rainbow-delimiters-depth-2">(</span>append '<span class="org-rainbow-delimiters-depth-3">(</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"\\.x?html?\\'"</span> . <span class="org-string">"/usr/bin/firefox %s"</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-warning">org-file-apps </span><span class="org-warning"><span class="org-rainbow-delimiters-depth-2">)</span></span><span class="org-warning"><span class="org-rainbow-delimiters-depth-1">)</span></span> + +<span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-string">"\C-ca"</span> 'org-agenda<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-agenda-start-on-weekday nil<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-agenda-custom-commands + '<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"c"</span> <span class="org-string">"Simple agenda view"</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span>agenda <span class="org-string">""</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span>alltodo <span class="org-string">""</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-c c"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'org-capture<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">make-capture-frame</span> <span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-doc">"Create a new frame and run org-capture."</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">interactive</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>make-frame '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span>name . <span class="org-string">"capture"</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>select-frame-by-name <span class="org-string">"capture"</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>delete-other-windows<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>noflet <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span>switch-to-buffer-other-window <span class="org-rainbow-delimiters-depth-5">(</span>buf<span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-rainbow-delimiters-depth-5">(</span>switch-to-buffer buf<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>org-capture<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>define-key org-mode-map <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-c >"</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">()</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">interactive</span> <span class="org-rainbow-delimiters-depth-4">(</span>org-time-stamp-inactive<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">htmlize</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-ditaa-jar-path <span class="org-string">"/usr/share/ditaa/ditaa.jar"</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org6f3b633" class="outline-3"> +<h3 id="org6f3b633"><span class="section-number-3">1.17</span> Ace window</h3> +<div class="outline-text-3" id="text-1-17"> +<p> +Permet de changer facilement de fenêtre. S'il y a plus de deux <i>buffers</i> +leur numéros sont affichés et il suffit de taper le numéro de la +fenêtre choisie pour s'y rendre. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x o</code></td> +<td class="org-left">Met le curseur dans une autre fenêtre.</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">ace-window</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">progn</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> aw-scope 'global<span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-comment-delimiter">;; </span><span class="org-comment">was frame</span> + <span class="org-rainbow-delimiters-depth-3">(</span>global-set-key <span class="org-rainbow-delimiters-depth-4">(</span>kbd <span class="org-string">"C-x O"</span><span class="org-rainbow-delimiters-depth-4">)</span> 'other-frame<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>global-set-key <span class="org-rainbow-delimiters-depth-4">[</span>remap other-window<span class="org-rainbow-delimiters-depth-4">]</span> 'ace-window<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>custom-set-faces + '<span class="org-rainbow-delimiters-depth-4">(</span>aw-leading-char-face + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">(</span>t <span class="org-rainbow-delimiters-depth-7">(</span><span class="org-builtin">:inherit</span> ace-jump-face-foreground <span class="org-builtin">:height</span> 3.0<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgb543b71" class="outline-3"> +<h3 id="orgb543b71"><span class="section-number-3">1.18</span> Ivy / Counsel</h3> +<div class="outline-text-3" id="text-1-18"> +<p> +Interface de complétion +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">counsel</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:bind</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-y"</span> . counsel-yank-pop<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-builtin">:map</span> ivy-minibuffer-map + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-y"</span> . ivy-next-line<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">ivy</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:demand</span> t + <span class="org-builtin">:diminish</span> <span class="org-rainbow-delimiters-depth-2">(</span>ivy-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-x b"</span> . ivy-switch-buffer<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>ivy-mode 1<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> ivy-use-virtual-buffers t<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> ivy-count-format <span class="org-string">"%d/%d "</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> ivy-display-style 'fancy<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org89a0b97" class="outline-3"> +<h3 id="org89a0b97"><span class="section-number-3">1.19</span> Swiper</h3> +<div class="outline-text-3" id="text-1-19"> +<p> +Améliore la recherche incrémentale. Les raccourcis sont les raccourcis +classiques. Deux différences notables. +</p> +<ul class="org-ul"> +<li><code>SPC</code> joue le rôle de joker : <code>r rc</code> correspond au mot <i>recherche</i> par +exemple</li> +<li>Si on souhaite créer un nouveau fichier avec <code>C-x C-f</code> dont le nom est +une sous-chaîne d'un fichier existant, il ne faut pas utiliser <code>RET</code> +pour valider, mais <code>C-M-j</code>. Utiliser <code>RET</code> valide la recherche, <code>C-M-j</code> +valide la chaîne saisie. Il est également possible de sélectionner +la zone de saisie (avec les flèches) et de simplement valider la +chaîne avec <code>RET</code>.</li> +</ul> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-s</code></td> +<td class="org-left">Recherche incrémentale vers le bas</td> +</tr> + +<tr> +<td class="org-left"><code>C-r</code></td> +<td class="org-left">Recherche incrémentale vers le haut</td> +</tr> + +<tr> +<td class="org-left"><code>M-x</code></td> +<td class="org-left">Recherche incrémentale d'une commande</td> +</tr> + +<tr> +<td class="org-left"><code>C-x C-f</code></td> +<td class="org-left">Recherche incrémentale ou création d'un fichier</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">swiper</span> +<span class="org-builtin">:ensure</span> t +<span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-s"</span> . swiper-isearch<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-r"</span> . swiper-isearch<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-c C-r"</span> . ivy-resume<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-x"</span> . counsel-M-x<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-x C-f"</span> . counsel-find-file<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> +<span class="org-builtin">:config</span> +<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">progn</span> + <span class="org-rainbow-delimiters-depth-3">(</span>ivy-mode 1<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> ivy-use-virtual-buffers t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> ivy-display-style 'fancy<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> ivy-use-selectable-prompt t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>define-key read-expression-map <span class="org-rainbow-delimiters-depth-4">(</span>kbd <span class="org-string">"C-r"</span><span class="org-rainbow-delimiters-depth-4">)</span> 'counsel-expression-history<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org570c12e" class="outline-3"> +<h3 id="org570c12e"><span class="section-number-3">1.20</span> Avy</h3> +<div class="outline-text-3" id="text-1-20"> +<p> +Saute très rapidement vers la zone de texte contenant une lettre. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-s</code></td> +<td class="org-left">Demande une lettre du mot recherché</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">avy</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"M-s"</span> . avy-goto-word-1<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org5ec9709" class="outline-3"> +<h3 id="org5ec9709"><span class="section-number-3">1.21</span> Company</h3> +<div class="outline-text-3" id="text-1-21"> +<p> +Boites de dialogue pour la complétion +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">company</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> company-idle-delay 0<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> company-minimum-prefix-length 3<span class="org-rainbow-delimiters-depth-2">)</span> + + <span class="org-rainbow-delimiters-depth-2">(</span>global-company-mode t<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">my/python-mode-hook</span> <span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'company-backends 'company-jedi<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'python-mode-hook 'my/python-mode-hook<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">company-jedi</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'python-mode-hook 'jedi:setup<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">my/python-mode-hook</span> <span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'company-backends 'company-jedi<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'python-mode-hook 'my/python-mode-hook<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgf19377e" class="outline-3"> +<h3 id="orgf19377e"><span class="section-number-3">1.22</span> C++</h3> +<div class="outline-text-3" id="text-1-22"> +<p> +Transforme Emacs en un véritable IDE en utilisant <code>Irony</code> +</p> +</div> +<div id="outline-container-org5f4530e" class="outline-4"> +<h4 id="org5f4530e"><span class="section-number-4">1.22.1</span> On branche Irony à Company</h4> +<div class="outline-text-4" id="text-1-22-1"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">company-irony</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'company-backends 'company-irony<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org6ae5b06" class="outline-4"> +<h4 id="org6ae5b06"><span class="section-number-4">1.22.2</span> On active Irony pour le C++</h4> +<div class="outline-text-4" id="text-1-22-2"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">irony</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'c++-mode-hook 'irony-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'c-mode-hook 'irony-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgc25c3a2" class="outline-4"> +<h4 id="orgc25c3a2"><span class="section-number-4">1.22.3</span> Eldoc / Irony</h4> +<div class="outline-text-4" id="text-1-22-3"> +<p> +Affiche la documentation des objets/fonctions dans le minibuffer +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">irony-eldoc</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'irony-mode-hook #'irony-eldoc<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org127f0bc" class="outline-4"> +<h4 id="org127f0bc"><span class="section-number-4">1.22.4</span> Formatage automatique : <code>clang-format</code></h4> +<div class="outline-text-4" id="text-1-22-4"> +<p> +Création d'un raccourci spécial pour formater une zone du code. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-f</code></td> +<td class="org-left">Indente la région comme définie par clang-format</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">clang-format</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:bind</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"C-c C-f"</span> . clang-format-region<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Remplace l'indentation classique d'Emacs par <code>clang-format</code> en <code>C~/~C++</code> +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code><TAB></code></td> +<td class="org-left">Indente la région comme définie par <code>clang-format</code></td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">clang-format-c-mode-common-hook</span> <span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-rainbow-delimiters-depth-2">(</span>fset 'c-indent-region 'clang-format-region<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>define-key c-mode-base-map <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"<tab>"</span><span class="org-rainbow-delimiters-depth-3">)</span> 'clang-format-region<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'c-mode-common-hook 'clang-format-c-mode-common-hook<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Force le formatage du fichier quand il est sauvegardé +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">clang-format-buffer-on-save</span> <span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-doc">"Add auto-save hook for clang-format-buffer-smart."</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'before-save-hook 'clang-format-buffer nil t<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'c-mode-common-hook 'clang-format-buffer-on-save<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org8c3c657" class="outline-4"> +<h4 id="org8c3c657"><span class="section-number-4">1.22.5</span> Coloration syntaxique (C++ moderne)</h4> +<div class="outline-text-4" id="text-1-22-5"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">modern-cpp-font-lock</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">eval-when-compile</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">Silence missing function warnings</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">declare-function</span> modern-c++-font-lock-global-mode + <span class="org-string">"modern-cpp-font-lock.el"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> <span class="org-rainbow-delimiters-depth-2">(</span>modern-c++-font-lock-global-mode t<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> +</div> + +<div id="outline-container-org67a0b90" class="outline-3"> +<h3 id="org67a0b90"><span class="section-number-3">1.23</span> Thèmes</h3> +<div class="outline-text-3" id="text-1-23"> +<p> +Chargement de quelques themes +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">cloud-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">zenburn-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">sourcerer-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">monokai-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">gruvbox-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">bubbleberry-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">solarized-theme</span> <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org60df07f" class="outline-3"> +<h3 id="org60df07f"><span class="section-number-3">1.24</span> Modeline</h3> +<div class="outline-text-3" id="text-1-24"> +<p> +Augmente la taille de la police +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defvar</span> <span class="org-variable-name">my-font-size</span> 140<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Taille de la Modeline +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>set-face-attribute 'mode-line nil <span class="org-builtin">:height</span> my-font-size<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Taille du titre +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>set-face-attribute 'header-line nil <span class="org-builtin">:height</span> my-font-size<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Taille des attributs +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>set-face-attribute 'default nil <span class="org-builtin">:height</span> my-font-size<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Taille de la fenêtre et position +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> default-frame-alist + '<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>top . 0<span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-rainbow-delimiters-depth-3">(</span>left . 0<span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-comment-delimiter">;; </span><span class="org-comment">position</span> + <span class="org-rainbow-delimiters-depth-3">(</span>width . 110<span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-rainbow-delimiters-depth-3">(</span>height . 90<span class="org-rainbow-delimiters-depth-3">)</span> <span class="org-comment-delimiter">;; </span><span class="org-comment">size</span> + <span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org5a01027" class="outline-3"> +<h3 id="org5a01027"><span class="section-number-3">1.25</span> Parenthèses arc-en-ciel</h3> +<div class="outline-text-3" id="text-1-25"> +<p> +Améliore le visuel des parenthèses +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">rainbow-delimiters</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">eval-when-compile</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">Silence missing function warnings</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">declare-function</span> rainbow-delimiters-mode <span class="org-string">"rainbow-delimiters.el"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'prog-mode-hook #'rainbow-delimiters-mode<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org6bb5c23" class="outline-3"> +<h3 id="org6bb5c23"><span class="section-number-3">1.26</span> FlyCheck</h3> +<div class="outline-text-3" id="text-1-26"> +<p> +On branche <code>FlyCheck</code> à <code>Irony</code> pour une analyse des erreurs à la volée. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">flycheck-irony</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>eval-after-load 'flycheck + '<span class="org-rainbow-delimiters-depth-3">(</span>add-hook 'flycheck-mode-hook #'flycheck-irony-setup<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +On charge <code>FlyCheck</code> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">flycheck</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-flycheck-mode t<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Active <code>FlyCheck</code> globalement +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'after-init-hook #'global-flycheck-mode<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> +<div id="outline-container-org774569c" class="outline-3"> +<h3 id="org774569c"><span class="section-number-3">1.27</span> Python</h3> +<div class="outline-text-3" id="text-1-27"> +<p> +Attention pour que la configuration fonctionne, il faut installer +<code>virtualenv</code>. Pour les systèmes <code>Debian</code> +</p> +<div class="org-src-container"> +<pre class="src src-bash">apt install virtualenv +</pre> +</div> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> py-python-command <span class="org-string">"python3"</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> python-shell-interpreter <span class="org-string">"python3"</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">elpy</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:custom</span> <span class="org-rainbow-delimiters-depth-2">(</span>elpy-rpc-backend <span class="org-string">"jedi"</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>elpy-enable<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">virtualenvwrapper</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>venv-initialize-interactive-shells<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>venv-initialize-eshell<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org846067d" class="outline-3"> +<h3 id="org846067d"><span class="section-number-3">1.28</span> YASnippet</h3> +<div class="outline-text-3" id="text-1-28"> +<p> +Le système de templates pour Emacs +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">yasnippet</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>yas-global-mode 1<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">unbind-key</span> <span class="org-string">"<tab>"</span> yas-minor-mode-map<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"C-<return>"</span> . yas-expand<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">yasnippet-snippets</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org17b8e19" class="outline-3"> +<h3 id="org17b8e19"><span class="section-number-3">1.29</span> Divers paquets</h3> +<div class="outline-text-3" id="text-1-29"> +</div> +<div id="outline-container-org16633b9" class="outline-4"> +<h4 id="org16633b9"><span class="section-number-4">1.29.1</span> Highlight line</h4> +<div class="outline-text-4" id="text-1-29-1"> +<p> +Mise en valeur de la ligne courante +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>global-hl-line-mode t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org6365242" class="outline-4"> +<h4 id="org6365242"><span class="section-number-4">1.29.2</span> Beacon</h4> +<div class="outline-text-4" id="text-1-29-2"> +<p> +Flash de la ligne aux changements de page ou de buffer +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">beacon</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>beacon-mode 1<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgfd695dc" class="outline-4"> +<h4 id="orgfd695dc"><span class="section-number-4">1.29.3</span> hungry-delete</h4> +<div class="outline-text-4" id="text-1-29-3"> +<p> +Suppression de tous les blancs quand appuie sur backspace ou delete +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">hungry-delete</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-hungry-delete-mode<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org4eb4412" class="outline-4"> +<h4 id="org4eb4412"><span class="section-number-4">1.29.4</span> Expand-region</h4> +<div class="outline-text-4" id="text-1-29-4"> +<p> +Sélectionne une zone de manière incrémentale. mot, phrase, paragraphe, +etc de manière intelligente. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">expand-region</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-="</span><span class="org-rainbow-delimiters-depth-3">)</span> 'er/expand-region<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org7782288" class="outline-4"> +<h4 id="org7782288"><span class="section-number-4">1.29.5</span> Meilleure gestion du <code>kill-ring</code></h4> +<div class="outline-text-4" id="text-1-29-5"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> save-interprogram-paste-before-kill t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org23e9b5d" class="outline-4"> +<h4 id="org23e9b5d"><span class="section-number-4">1.29.6</span> Gestion de la restauration des buffers</h4> +<div class="outline-text-4" id="text-1-29-6"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>global-auto-revert-mode 1<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> auto-revert-verbose nil<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> revert-without-query <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">quote</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">".*.pdf"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"<f5>"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'revert-buffer<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> +</div> + +<div id="outline-container-org4858766" class="outline-3"> +<h3 id="org4858766"><span class="section-number-3">1.30</span> iedit</h3> +<div class="outline-text-3" id="text-1-30"> +<p> +Modifie les copies d'une zone séléctionnée simultanément +</p> + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-h C-;</code></td> +<td class="org-left">démarrer les modifications</td> +</tr> + +<tr> +<td class="org-left"><code>M-ESC ESC</code></td> +<td class="org-left">sortir du mode</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">iedit</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orge1c5906" class="outline-3"> +<h3 id="orge1c5906"><span class="section-number-3">1.31</span> Narrow/widen dwim</h3> +<div class="outline-text-3" id="text-1-31"> +<p> +Réduit/agrandit une zone d'édition de manière intelligente +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">narrow-or-widen-dwim</span> <span class="org-rainbow-delimiters-depth-2">(</span>p<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-doc">"If the buffer is narrowed, it widens. Otherwise, it narrows intelligently.</span> +<span class="org-doc">Intelligently means: region, org-src-block, org-subtree, or defun,</span> +<span class="org-doc">whichever applies first.</span> +<span class="org-doc">Narrowing to org-src-block actually calls `</span><span class="org-doc"><span class="org-constant">org-edit-src-code</span></span><span class="org-doc">'.</span> + +<span class="org-doc">With prefix P, don't widen, just narrow even if buffer is already</span> +<span class="org-doc">narrowed."</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">interactive</span> <span class="org-string">"P"</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">declare</span> <span class="org-rainbow-delimiters-depth-3">(</span>interactive-only<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">cond</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">and</span> <span class="org-rainbow-delimiters-depth-5">(</span>buffer-narrowed-p<span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-rainbow-delimiters-depth-5">(</span>not p<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-rainbow-delimiters-depth-4">(</span>widen<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span>region-active-p<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span>narrow-to-region <span class="org-rainbow-delimiters-depth-5">(</span>region-beginning<span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-rainbow-delimiters-depth-5">(</span>region-end<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span>derived-mode-p 'org-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">`</span><span class="org-comment"><span class="org-constant">org-edit-src-code</span></span><span class="org-comment">' is not a real narrowing command.</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">Remove this first conditional if you don't want it.</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">cond</span> <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">ignore-errors</span> <span class="org-rainbow-delimiters-depth-7">(</span>org-edit-src-code<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span> + <span class="org-rainbow-delimiters-depth-6">(</span>delete-other-windows<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">(</span>org-at-block-p<span class="org-rainbow-delimiters-depth-6">)</span> + <span class="org-rainbow-delimiters-depth-6">(</span>org-narrow-to-block<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span>t <span class="org-rainbow-delimiters-depth-6">(</span>org-narrow-to-subtree<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>t <span class="org-rainbow-delimiters-depth-4">(</span>narrow-to-defun<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Remplace la fonction Emacs standard par <code>dwim</code> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>define-key ctl-x-map <span class="org-string">"n"</span> #'narrow-or-widen-dwim<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'LaTeX-mode-hook + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">()</span> + <span class="org-rainbow-delimiters-depth-3">(</span>define-key LaTeX-mode-map <span class="org-string">"\C-xn"</span> + nil<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org8e0ad25" class="outline-3"> +<h3 id="org8e0ad25"><span class="section-number-3">1.32</span> Web Mode</h3> +<div class="outline-text-3" id="text-1-32"> +<p> +Mode avancé pour l'édition de pages <code>HTML</code>, <code>Css</code>,… +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">web-mode</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'auto-mode-alist '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"\\.html?\\'"</span> . web-mode<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-to-list 'auto-mode-alist '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"\\.vue?\\'"</span> . web-mode<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> web-mode-engines-alist + '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"django"</span> . <span class="org-string">"\\.html\\'"</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> web-mode-ac-sources-alist + '<span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"css"</span> . <span class="org-rainbow-delimiters-depth-5">(</span>ac-source-css-property<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"vue"</span> . <span class="org-rainbow-delimiters-depth-5">(</span>ac-source-words-in-buffer ac-source-abbrev<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"html"</span> . <span class="org-rainbow-delimiters-depth-5">(</span>ac-source-words-in-buffer ac-source-abbrev<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> web-mode-enable-auto-closing t<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> web-mode-enable-auto-quoting t<span class="org-rainbow-delimiters-depth-1">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">this fixes the quote problem I mentioned</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org6dfdf29" class="outline-3"> +<h3 id="org6dfdf29"><span class="section-number-3">1.33</span> Emmet mode</h3> +<div class="outline-text-3" id="text-1-33"> +<p> +Ensemble de fonctions permettant l'édition rapide de <i>markup languages</i> +(<code>HTML</code>, <code>SGML</code>,…) +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">emmet-mode</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">Auto-start on any markup modes</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'sgml-mode-hook 'emmet-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">Auto-start on any markup modes</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'web-mode-hook 'emmet-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">enable Emmet's css abbreviation</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'css-mode-hook 'emmet-mode<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org79c2033" class="outline-3"> +<h3 id="org79c2033"><span class="section-number-3">1.34</span> Dired-dwim</h3> +<div class="outline-text-3" id="text-1-34"> +<p> +Permet d'utiliser reduire/agrandir les affichages de répertoires +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> dired-dwim-target t<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">dired-narrow</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">bind-key</span> <span class="org-string">"C-c C-n"</span> #'dired-narrow<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">bind-key</span> <span class="org-string">"C-c C-f"</span> #'dired-narrow-fuzzy<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">bind-key</span> <span class="org-string">"C-x C-N"</span> #'dired-narrow-regexp<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">dired-subtree</span> <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:after</span> dired + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">bind-key</span> <span class="org-string">"<tab>"</span> #'dired-subtree-toggle dired-mode-map<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">bind-key</span> <span class="org-string">"<backtab>"</span> #'dired-subtree-cycle dired-mode-map<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org95b7b6d" class="outline-3"> +<h3 id="org95b7b6d"><span class="section-number-3">1.35</span> LaTeX</h3> +<div class="outline-text-3" id="text-1-35"> +<p> +Configuration LaTeX basique. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">tex</span> + <span class="org-builtin">:ensure</span> auctex + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'LaTeX-mode-hook 'turn-on-reftex<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> TeX-parse-self t<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'reftex-mode-hook + '<span class="org-rainbow-delimiters-depth-3">(</span>lambda <span class="org-rainbow-delimiters-depth-4">()</span> + <span class="org-rainbow-delimiters-depth-4">(</span>define-key reftex-mode-map <span class="org-rainbow-delimiters-depth-5">(</span>kbd <span class="org-string">"C-c ["</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-6">()</span> + <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">interactive</span><span class="org-rainbow-delimiters-depth-6">)</span> + <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">let</span> <span class="org-rainbow-delimiters-depth-7">(</span><span class="org-rainbow-delimiters-depth-8">(</span>ivy-count-format <span class="org-string">"'=' for all | %d/%d "</span><span class="org-rainbow-delimiters-depth-8">)</span><span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>reftex-citation<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org0b2a336" class="outline-3"> +<h3 id="org0b2a336"><span class="section-number-3">1.36</span> Gestion de projets</h3> +<div class="outline-text-3" id="text-1-36"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">projectile</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"C-c p"</span> . projectile-command-map<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>projectile-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> projectile-completion-system 'ivy<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org2d3162f" class="outline-3"> +<h3 id="org2d3162f"><span class="section-number-3">1.37</span> Org-mode (langages suportés)</h3> +<div class="outline-text-3" id="text-1-37"> +<p> +Charge les langages disponnibles pour org-mode +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>org-babel-do-load-languages + 'org-babel-load-languages + '<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>python . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>emacs-lisp . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>shell . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>C . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>gnuplot . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>js . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>ditaa . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>dot . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>org . t<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>latex . t <span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> org-babel-python-command <span class="org-string">"python3"</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'org-babel-after-execute-hook + 'org-redisplay-inline-images<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org85b75a7" class="outline-3"> +<h3 id="org85b75a7"><span class="section-number-3">1.38</span> Parenthèses</h3> +<div class="outline-text-3" id="text-1-38"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">smartparens</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:hook</span> <span class="org-rainbow-delimiters-depth-2">(</span>prog-mode . smartparens-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:custom</span> + <span class="org-rainbow-delimiters-depth-2">(</span>sp-escape-quotes-after-insert nil<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">require</span> '<span class="org-constant">smartparens-config</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>show-paren-mode t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> show-paren-style 'mixed<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>set-face-background 'show-paren-match <span class="org-rainbow-delimiters-depth-2">(</span>face-background 'default<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>set-face-foreground 'show-paren-match <span class="org-string">"#def"</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>set-face-attribute 'show-paren-match nil <span class="org-builtin">:weight</span> 'extra-bold<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org8a5d8a8" class="outline-3"> +<h3 id="org8a5d8a8"><span class="section-number-3">1.39</span> Taille de la police</h3> +<div class="outline-text-3" id="text-1-39"> +<p> +Change la taille de la police dynamiquement (temporaire) +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-M-=</code></td> +<td class="org-left">Augmente la taille de la police</td> +</tr> + +<tr> +<td class="org-left"><code>C-M--</code></td> +<td class="org-left">Réduit la taille de la police</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">default-text-scale</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-M-="</span><span class="org-rainbow-delimiters-depth-3">)</span> 'default-text-scale-increase<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-M--"</span><span class="org-rainbow-delimiters-depth-3">)</span> 'default-text-scale-decrease<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orga3e28d8" class="outline-3"> +<h3 id="orga3e28d8"><span class="section-number-3">1.40</span> Hydra</h3> +<div class="outline-text-3" id="text-1-40"> +<p> +Outil de simplification des raccourcis. Un <i>popup</i> contextuel apparaît. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x t</code></td> +<td class="org-left">Active désactive certains utilitaires</td> +</tr> + +<tr> +<td class="org-left"><code>C-c t</code></td> +<td class="org-left">Gestion du timer</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">hydra</span> + <span class="org-builtin">:ensure</span> hydra + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key + <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-x t"</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">defhydra</span> toggle <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-builtin">:color</span> blue <span class="org-builtin">:hint</span> nil<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-doc">"</span> +<span class="org-doc"> Toggle</span> +<span class="org-doc">--------------------------------------------------</span> +<span class="org-doc"> [_a_] Abbrev [_s_] FlySpell [_c_] FlyCheck</span> +<span class="org-doc"> [_d_] Debug [_f_] Auto-Fill [_t_] Truncate lines</span> +<span class="org-doc"> [_l_] Line num. [_w_] Whitespace [_q_] Quit"</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"a"</span> abbrev-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"s"</span> flyspell-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"c"</span> flycheck-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"d"</span> toggle-debug-on-error<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"f"</span> auto-fill-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"t"</span> toggle-truncate-lines<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"l"</span> display-line-numbers-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"w"</span> whitespace-mode<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"q"</span> nil<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-set-key + <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-c t"</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">defhydra</span> hydra-global-org <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-builtin">:color</span> blue<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-doc">"Org"</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"t"</span> org-timer-start <span class="org-string">"Start Timer"</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"s"</span> org-timer-stop <span class="org-string">"Stop Timer"</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"r"</span> org-timer-set-timer <span class="org-string">"Set Timer"</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">This one requires you be in an orgmode doc, as it sets the timer for the header</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"p"</span> org-timer <span class="org-string">"Print Timer"</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">output timer value to buffer</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"w"</span> <span class="org-rainbow-delimiters-depth-5">(</span>org-clock-in '<span class="org-rainbow-delimiters-depth-6">(</span>4<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> <span class="org-string">"Clock-In"</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">used with (org-clock-persistence-insinuate) (setq org-clock-persist t)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"o"</span> org-clock-out <span class="org-string">"Clock-Out"</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">you might also want (setq org-log-note-clock-out t)</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"j"</span> org-clock-goto <span class="org-string">"Clock Goto"</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">global visit the clocked task</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"c"</span> org-capture <span class="org-string">"Capture"</span><span class="org-rainbow-delimiters-depth-4">)</span> <span class="org-comment-delimiter">; </span><span class="org-comment">Don't forget to define the captures you want http://orgmode.org/manual/Capture.html</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"l"</span> <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-5">)</span>rg-capture-goto-last-stored <span class="org-string">"Last Capture"</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org1e49d2e" class="outline-3"> +<h3 id="org1e49d2e"><span class="section-number-3">1.41</span> Modes git</h3> +<div class="outline-text-3" id="text-1-41"> +<p> +Le sublime <code>Magit</code>. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x g</code></td> +<td class="org-left">Démarre <b>magit</b> (<code>M-x magit-status</code>)</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">magit</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">progn</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">bind-key</span> <span class="org-string">"C-x g"</span> 'magit-status<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Affiche l'état <code>git</code> dans la marge? +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> magit-status-margin + '<span class="org-rainbow-delimiters-depth-2">(</span>nil <span class="org-string">"%Y-%m-%d %H:%M "</span> magit-log-margin-width t 18<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> + +<p> +Utilise <code>git-gutter</code> avec <code>hydra</code>. Permet de voir rapidement les +modifications, de les valider (<code>git add -p</code>) ou de les annuler (<code>git +checkout -p</code>) +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-g M-g</code></td> +<td class="org-left">Lance le menu <code>Hydra</code> pour l'interaction <code>git-gutter</code></td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">git-gutter</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>global-git-gutter-mode +1<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'magit-post-refresh-hook + #'git-gutter:update-all-windows<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"M-g M-g"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'hydra-git-gutter/body<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">git-timemachine</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defhydra</span> hydra-git-gutter <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-builtin">:body-pre</span> <span class="org-rainbow-delimiters-depth-3">(</span>git-gutter-mode 1<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-builtin">:hint</span> nil<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-doc">"</span> +<span class="org-doc">Git gutter:</span> +<span class="org-doc"> _j_: next hunk _s_tage hunk _q_uit</span> +<span class="org-doc"> _k_: previous hunk _r_evert hunk _Q_uit and deactivate git-gutter</span> +<span class="org-doc"> ^ ^ _p_opup hunk</span> +<span class="org-doc"> _h_: first hunk</span> +<span class="org-doc"> _l_: last hunk set start _R_evision</span> +<span class="org-doc">"</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"j"</span> git-gutter:next-hunk<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"k"</span> git-gutter:previous-hunk<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"h"</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">progn</span> <span class="org-rainbow-delimiters-depth-4">(</span>goto-char <span class="org-rainbow-delimiters-depth-5">(</span>point-min<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span>git-gutter:next-hunk 1<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"l"</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">progn</span> <span class="org-rainbow-delimiters-depth-4">(</span>goto-char <span class="org-rainbow-delimiters-depth-5">(</span>point-min<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span>git-gutter:previous-hunk 1<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"s"</span> git-gutter:stage-hunk<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"r"</span> git-gutter:revert-hunk<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"p"</span> git-gutter:popup-hunk<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"R"</span> git-gutter:set-start-revision<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"q"</span> nil <span class="org-builtin">:color</span> blue<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"Q"</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">progn</span> <span class="org-rainbow-delimiters-depth-4">(</span>git-gutter-mode -1<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">git-gutter-fringe doesn't seem to</span> + <span class="org-comment-delimiter">;; </span><span class="org-comment">clear the markup right away</span> + <span class="org-rainbow-delimiters-depth-4">(</span>sit-for 0.1<span class="org-rainbow-delimiters-depth-4">)</span> + <span class="org-rainbow-delimiters-depth-4">(</span>git-gutter-mode<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-builtin">:color</span> blue<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgcfd101e" class="outline-3"> +<h3 id="orgcfd101e"><span class="section-number-3">1.42</span> FlySpell</h3> +<div class="outline-text-3" id="text-1-42"> +<p> +Correcteur orthographique à la volée. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'LaTeX-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'c++-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'c-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'python-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'LaTeX-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'org-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'org-mode-hook 'turn-on-auto-fill<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'mu4e-compose-mode-hook 'turn-on-flyspell<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'mu4e-compose-mode-hook 'turn-on-auto-fill<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> flyspell-issue-message-flag nil<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgd098def" class="outline-3"> +<h3 id="orgd098def"><span class="section-number-3">1.43</span> C++</h3> +<div class="outline-text-3" id="text-1-43"> +<p> +Activation des <code>ggtags</code> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">ggtags</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'c-mode-common-hook + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-4">()</span> + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-5">(</span>derived-mode-p 'c-mode 'c++-mode 'java-mode<span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span>ggtags-mode 1<span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org23a07a8" class="outline-3"> +<h3 id="org23a07a8"><span class="section-number-3">1.44</span> Compilation en C++</h3> +<div class="outline-text-3" id="text-1-44"> +<p> +Définit <code>C-c C-c</code> comme raccourci pour lancer la compilation et +configure le <i>buffer</i> de compilation pour qu'il suive la compilation +jusqu'à la première erreur. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">compilation-c-mode-common-hook</span> <span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-rainbow-delimiters-depth-2">(</span>define-key c-mode-base-map <span class="org-rainbow-delimiters-depth-3">(</span>kbd <span class="org-string">"C-c C-c"</span><span class="org-rainbow-delimiters-depth-3">)</span> 'compile<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">setq</span> compilation-scroll-output 'first-error<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'c-mode-common-hook 'compilation-c-mode-common-hook<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org9a73218" class="outline-3"> +<h3 id="org9a73218"><span class="section-number-3">1.45</span> CMake</h3> +<div class="outline-text-3" id="text-1-45"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">cmake-mode</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:mode</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">"CMakeLists.txt"</span> <span class="org-string">".cmake"</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:hook</span> <span class="org-rainbow-delimiters-depth-2">(</span>cmake-mode . <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-4">()</span> + <span class="org-rainbow-delimiters-depth-4">(</span>add-to-list 'company-backends 'company-cmake<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">use-package</span> <span class="org-constant">cmake-font-lock</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:defer</span> t + <span class="org-builtin">:commands</span> <span class="org-rainbow-delimiters-depth-3">(</span>cmake-font-lock-activate<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-builtin">:hook</span> <span class="org-rainbow-delimiters-depth-3">(</span>cmake-mode . <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-5">()</span> + <span class="org-rainbow-delimiters-depth-5">(</span>cmake-font-lock-activate<span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span>font-lock-add-keywords + nil '<span class="org-rainbow-delimiters-depth-6">(</span><span class="org-rainbow-delimiters-depth-7">(</span><span class="org-string">"\\<</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">(</span></span><span class="org-string">FIXME</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">TODO</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">BUG</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">|</span></span><span class="org-string">DONE</span><span class="org-string"><span class="org-regexp-grouping-backslash">\\</span></span><span class="org-string"><span class="org-regexp-grouping-construct">)</span></span><span class="org-string">"</span> + 1 font-lock-warning-face t<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgc15572d" class="outline-3"> +<h3 id="orgc15572d"><span class="section-number-3">1.46</span> Markdown</h3> +<div class="outline-text-3" id="text-1-46"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">markdown-mode</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:mode</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-string">".md"</span> <span class="org-string">".markdown"</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org22c7ee2" class="outline-3"> +<h3 id="org22c7ee2"><span class="section-number-3">1.47</span> Dumb jump</h3> +<div class="outline-text-3" id="text-1-47"> +<p> +Permet de se déplacer <b>très</b> rapidement dans un texte ou de retrouver +une définition. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-g j</code></td> +<td class="org-left">Saute à la définition de l'objet sous le curseur</td> +</tr> + +<tr> +<td class="org-left"><code>M-g o</code></td> +<td class="org-left">Saute à la définition de l'objet sous le curseur dans une autre fenêtre</td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">dumb-jump</span> + <span class="org-builtin">:bind</span> <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-g o"</span> . dumb-jump-go-other-window<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-g j"</span> . dumb-jump-go<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-g x"</span> . dumb-jump-go-prefer-external<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-string">"M-g z"</span> . dumb-jump-go-prefer-external-other-window<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>dumb-jump-mode<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org74fda95" class="outline-3"> +<h3 id="org74fda95"><span class="section-number-3">1.48</span> Origami</h3> +<div class="outline-text-3" id="text-1-48"> +<p> +Mode permettant le pliage (<i>folding</i>) de régions +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">origami</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orga762c61" class="outline-3"> +<h3 id="orga762c61"><span class="section-number-3">1.49</span> IBuffer</h3> +<div class="outline-text-3" id="text-1-49"> +<p> +Un meilleur gestionnaire de <i>buffers</i>. +</p> + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x C-b</code></td> +<td class="org-left">Ouvre le gestionnaire de <i>buffers</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-x b</code></td> +<td class="org-left">Change de <i>buffer</i></td> +</tr> +</tbody> +</table> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span>global-set-key <span class="org-rainbow-delimiters-depth-2">(</span>kbd <span class="org-string">"C-x C-b"</span><span class="org-rainbow-delimiters-depth-2">)</span> 'ibuffer<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> ibuffer-saved-filter-groups + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">quote</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span><span class="org-string">"default"</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"dired"</span> <span class="org-rainbow-delimiters-depth-6">(</span>mode . dired-mode<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"org"</span> <span class="org-rainbow-delimiters-depth-6">(</span>name . <span class="org-string">"^.*org$"</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"magit"</span> <span class="org-rainbow-delimiters-depth-6">(</span>mode . magit-mode<span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"IRC"</span> <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . circe-channel-mode<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>mode . circe-server-mode<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"web"</span> <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . web-mode<span class="org-rainbow-delimiters-depth-7">)</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . js2-mode<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"shell"</span> <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . eshell-mode<span class="org-rainbow-delimiters-depth-7">)</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . shell-mode<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"mu4e"</span> <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . mu4e-compose-mode<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>name . <span class="org-string">"\\*mu4e\\*"</span><span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"programming"</span> <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-7">(</span>mode . clojure-mode<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>mode . clojurescript-mode<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>mode . python-mode<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>mode . c++-mode<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"emacs"</span> <span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">or</span> <span class="org-rainbow-delimiters-depth-7">(</span>name . <span class="org-string">"^\\*scratch\\*$"</span><span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>name . <span class="org-string">"^\\*Messages\\*$"</span><span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span> + <span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>add-hook 'ibuffer-mode-hook + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-3">()</span> + <span class="org-rainbow-delimiters-depth-3">(</span>ibuffer-auto-mode 1<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>ibuffer-switch-to-saved-filter-groups <span class="org-string">"default"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-comment-delimiter">;; </span><span class="org-comment">Don't show filter groups if there are no buffers in that group</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> ibuffer-show-empty-filter-groups nil<span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-comment-delimiter">;; </span><span class="org-comment">Don't ask for confirmation to delete marked buffers</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> ibuffer-expert t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org9313050" class="outline-3"> +<h3 id="org9313050"><span class="section-number-3">1.50</span> WGrep</h3> +<div class="outline-text-3" id="text-1-50"> +<p> +Permet de modifier le résultat d'un <code>grep</code> (donc simultanément dans +plusieurs fichiers par exemple). +</p> + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-p</code></td> +<td class="org-left">passe en mode écriture dans le buffer résultat de <b>grep</b></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-e</code></td> +<td class="org-left">sauve les modifications</td> +</tr> + +<tr> +<td class="org-left"><code>C-x C-q</code></td> +<td class="org-left">quitte le mode</td> +</tr> +</tbody> +</table> +<p> +voir <a href="https://github.com/emacsmirror/emacswiki.org/blob/master/wgrep.el">wgrep</a> pour plus d'infos. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">wgrep</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">wgrep-ag</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">require</span> '<span class="org-constant">wgrep-ag</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgfc226d0" class="outline-3"> +<h3 id="orgfc226d0"><span class="section-number-3">1.51</span> PDF tools</h3> +<div class="outline-text-3" id="text-1-51"> +<p> +Outils d'édition de <code>PDF</code> dans Emacs +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">pdf-tools</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">when</span> <span class="org-rainbow-delimiters-depth-3">(</span>eq system-type 'gnu/linux<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>pdf-tools-install<span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> TeX-view-program-selection '<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span>output-pdf <span class="org-string">"pdf-tools"</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-keyword">setq</span> TeX-view-program-list '<span class="org-rainbow-delimiters-depth-4">(</span><span class="org-rainbow-delimiters-depth-5">(</span><span class="org-string">"pdf-tools"</span> <span class="org-string">"TeX-pdf-tools-sync-view"</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-builtin">:init</span> + <span class="org-rainbow-delimiters-depth-2">(</span>add-hook 'LaTeX-mode-hook + '<span class="org-rainbow-delimiters-depth-3">(</span>lambda <span class="org-rainbow-delimiters-depth-4">()</span> <span class="org-rainbow-delimiters-depth-4">(</span>local-set-key <span class="org-rainbow-delimiters-depth-5">(</span>kbd <span class="org-string">"C-c C-g"</span><span class="org-rainbow-delimiters-depth-5">)</span> + 'pdf-sync-forward-search<span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> + +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">org-pdftools</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgf508c87" class="outline-3"> +<h3 id="orgf508c87"><span class="section-number-3">1.52</span> AutoYASnippet</h3> +<div class="outline-text-3" id="text-1-52"> +<p> +Outil de création rapide de snipets. +Voir la documentation en ligne <a href="https://github.com/abo-abo/auto-yasnippet">https://github.com/abo-abo/auto-yasnippet</a> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">auto-yasnippet</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org612705e" class="outline-3"> +<h3 id="org612705e"><span class="section-number-3">1.53</span> Divers</h3> +<div class="outline-text-3" id="text-1-53"> +<p> +Quelques réglages utilitaires +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> browse-url-browser-function 'browse-url-generic + browse-url-generic-program <span class="org-string">"firefox"</span><span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> auto-window-vscroll nil<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span>blink-cursor-mode t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">setq</span> default-frame-alist + '<span class="org-rainbow-delimiters-depth-2">(</span><span class="org-rainbow-delimiters-depth-3">(</span>cursor-color . <span class="org-string">"DarkGrey"</span><span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgb43c622" class="outline-3"> +<h3 id="orgb43c622"><span class="section-number-3">1.54</span> Keyfreq</h3> +<div class="outline-text-3" id="text-1-54"> +<p> +Enregistre la fréquence d'utilisation de commandes. Pour obtenir les +statistiques, utiliser la commande <code>M-x keyfreq-show</code> +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">keyfreq</span> + <span class="org-builtin">:ensure</span> t + <span class="org-builtin">:config</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">require</span> '<span class="org-constant">keyfreq</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>keyfreq-mode 1<span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span>keyfreq-autosave-mode 1<span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgc951d86" class="outline-3"> +<h3 id="orgc951d86"><span class="section-number-3">1.55</span> Dictionnaire et césures</h3> +<div class="outline-text-3" id="text-1-55"> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">dictionary</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">use-package</span> <span class="org-constant">synosaurus</span> + <span class="org-builtin">:ensure</span> t<span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> +</div> + +<div id="outline-container-org7122c3e" class="outline-2"> +<h2 id="org7122c3e"><span class="section-number-2">2</span> Annexes</h2> +<div class="outline-text-2" id="text-2"> +</div> +<div id="outline-container-org0d577a4" class="outline-3"> +<h3 id="org0d577a4"><span class="section-number-3">2.1</span> Génération de toute la documentation</h3> +<div class="outline-text-3" id="text-2-1"> +<p> +On génère la documentation <code>HTML</code> et <code>PDF</code> de cette configuration à partir +de tous les fichier <code>.org</code> du répertoire de configuration Emacs. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp"><span class="org-rainbow-delimiters-depth-1">(</span><span class="org-keyword">defun</span> <span class="org-function-name">config-org-to-export</span><span class="org-rainbow-delimiters-depth-2">()</span> + <span class="org-doc">"Regenerate all .emacs.d docs"</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">interactive</span><span class="org-rainbow-delimiters-depth-2">)</span> + <span class="org-rainbow-delimiters-depth-2">(</span><span class="org-keyword">let</span> <span class="org-rainbow-delimiters-depth-3">(</span><span class="org-rainbow-delimiters-depth-4">(</span>files <span class="org-rainbow-delimiters-depth-5">(</span>file-expand-wildcards <span class="org-string">"~/.emacs.d/*.org"</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span><span class="org-rainbow-delimiters-depth-3">)</span> + <span class="org-rainbow-delimiters-depth-3">(</span>mapc + <span class="org-rainbow-delimiters-depth-4">(</span><span class="org-keyword">lambda</span> <span class="org-rainbow-delimiters-depth-5">(</span>f<span class="org-rainbow-delimiters-depth-5">)</span> . + <span class="org-rainbow-delimiters-depth-5">(</span><span class="org-rainbow-delimiters-depth-6">(</span><span class="org-keyword">with-current-buffer</span> + <span class="org-rainbow-delimiters-depth-7">(</span>find-file-noselect f<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>org-latex-export-to-pdf<span class="org-rainbow-delimiters-depth-7">)</span> + <span class="org-rainbow-delimiters-depth-7">(</span>org-html-export-to-html<span class="org-rainbow-delimiters-depth-7">)</span><span class="org-rainbow-delimiters-depth-6">)</span><span class="org-rainbow-delimiters-depth-5">)</span><span class="org-rainbow-delimiters-depth-4">)</span> + files<span class="org-rainbow-delimiters-depth-3">)</span><span class="org-rainbow-delimiters-depth-2">)</span><span class="org-rainbow-delimiters-depth-1">)</span> +</pre> +</div> +</div> +</div> +</div> +</div> +<div id="postamble" class="status"> +<p class="date">Created: 2020-04-17 ven. 19:55</p> +<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> +</div> +</body> +</html> diff --git a/Configuration.pdf b/Configuration.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2be159d02cd6ca385cfce80f706f5cb50adc4628 Binary files /dev/null and b/Configuration.pdf differ diff --git a/Installation.html b/Installation.html new file mode 100644 index 0000000000000000000000000000000000000000..49155b294b06506c2ba3038d79879cfe7fd635d2 --- /dev/null +++ b/Installation.html @@ -0,0 +1,631 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> +<head> +<!-- 2020-04-17 ven. 19:55 --> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>Installation</title> +<meta name="generator" content="Org mode" /> +<style type="text/css"> + <!--/*--><![CDATA[/*><!--*/ + .title { text-align: center; + margin-bottom: .2em; } + .subtitle { text-align: center; + font-size: medium; + font-weight: bold; + margin-top:0; } + .todo { font-family: monospace; color: red; } + .done { font-family: monospace; color: green; } + .priority { font-family: monospace; color: orange; } + .tag { background-color: #eee; font-family: monospace; + padding: 2px; font-size: 80%; font-weight: normal; } + .timestamp { color: #bebebe; } + .timestamp-kwd { color: #5f9ea0; } + .org-right { margin-left: auto; margin-right: 0px; text-align: right; } + .org-left { margin-left: 0px; margin-right: auto; text-align: left; } + .org-center { margin-left: auto; margin-right: auto; text-align: center; } + .underline { text-decoration: underline; } + #postamble p, #preamble p { font-size: 90%; margin: .2em; } + p.verse { margin-left: 3%; } + pre { + border: 1px solid #ccc; + box-shadow: 3px 3px 3px #eee; + padding: 8pt; + font-family: monospace; + overflow: auto; + margin: 1.2em; + } + pre.src { + position: relative; + overflow: visible; + padding-top: 1.2em; + } + pre.src:before { + display: none; + position: absolute; + background-color: white; + top: -10px; + right: 10px; + padding: 3px; + border: 1px solid black; + } + pre.src:hover:before { display: inline;} + /* Languages per Org manual */ + pre.src-asymptote:before { content: 'Asymptote'; } + pre.src-awk:before { content: 'Awk'; } + pre.src-C:before { content: 'C'; } + /* pre.src-C++ doesn't work in CSS */ + pre.src-clojure:before { content: 'Clojure'; } + pre.src-css:before { content: 'CSS'; } + pre.src-D:before { content: 'D'; } + pre.src-ditaa:before { content: 'ditaa'; } + pre.src-dot:before { content: 'Graphviz'; } + pre.src-calc:before { content: 'Emacs Calc'; } + pre.src-emacs-lisp:before { content: 'Emacs Lisp'; } + pre.src-fortran:before { content: 'Fortran'; } + pre.src-gnuplot:before { content: 'gnuplot'; } + pre.src-haskell:before { content: 'Haskell'; } + pre.src-hledger:before { content: 'hledger'; } + pre.src-java:before { content: 'Java'; } + pre.src-js:before { content: 'Javascript'; } + pre.src-latex:before { content: 'LaTeX'; } + pre.src-ledger:before { content: 'Ledger'; } + pre.src-lisp:before { content: 'Lisp'; } + pre.src-lilypond:before { content: 'Lilypond'; } + pre.src-lua:before { content: 'Lua'; } + pre.src-matlab:before { content: 'MATLAB'; } + pre.src-mscgen:before { content: 'Mscgen'; } + pre.src-ocaml:before { content: 'Objective Caml'; } + pre.src-octave:before { content: 'Octave'; } + pre.src-org:before { content: 'Org mode'; } + pre.src-oz:before { content: 'OZ'; } + pre.src-plantuml:before { content: 'Plantuml'; } + pre.src-processing:before { content: 'Processing.js'; } + pre.src-python:before { content: 'Python'; } + pre.src-R:before { content: 'R'; } + pre.src-ruby:before { content: 'Ruby'; } + pre.src-sass:before { content: 'Sass'; } + pre.src-scheme:before { content: 'Scheme'; } + pre.src-screen:before { content: 'Gnu Screen'; } + pre.src-sed:before { content: 'Sed'; } + pre.src-sh:before { content: 'shell'; } + pre.src-sql:before { content: 'SQL'; } + pre.src-sqlite:before { content: 'SQLite'; } + /* additional languages in org.el's org-babel-load-languages alist */ + pre.src-forth:before { content: 'Forth'; } + pre.src-io:before { content: 'IO'; } + pre.src-J:before { content: 'J'; } + pre.src-makefile:before { content: 'Makefile'; } + pre.src-maxima:before { content: 'Maxima'; } + pre.src-perl:before { content: 'Perl'; } + pre.src-picolisp:before { content: 'Pico Lisp'; } + pre.src-scala:before { content: 'Scala'; } + pre.src-shell:before { content: 'Shell Script'; } + pre.src-ebnf2ps:before { content: 'ebfn2ps'; } + /* additional language identifiers per "defun org-babel-execute" + in ob-*.el */ + pre.src-cpp:before { content: 'C++'; } + pre.src-abc:before { content: 'ABC'; } + pre.src-coq:before { content: 'Coq'; } + pre.src-groovy:before { content: 'Groovy'; } + /* additional language identifiers from org-babel-shell-names in + ob-shell.el: ob-shell is the only babel language using a lambda to put + the execution function name together. */ + pre.src-bash:before { content: 'bash'; } + pre.src-csh:before { content: 'csh'; } + pre.src-ash:before { content: 'ash'; } + pre.src-dash:before { content: 'dash'; } + pre.src-ksh:before { content: 'ksh'; } + pre.src-mksh:before { content: 'mksh'; } + pre.src-posh:before { content: 'posh'; } + /* Additional Emacs modes also supported by the LaTeX listings package */ + pre.src-ada:before { content: 'Ada'; } + pre.src-asm:before { content: 'Assembler'; } + pre.src-caml:before { content: 'Caml'; } + pre.src-delphi:before { content: 'Delphi'; } + pre.src-html:before { content: 'HTML'; } + pre.src-idl:before { content: 'IDL'; } + pre.src-mercury:before { content: 'Mercury'; } + pre.src-metapost:before { content: 'MetaPost'; } + pre.src-modula-2:before { content: 'Modula-2'; } + pre.src-pascal:before { content: 'Pascal'; } + pre.src-ps:before { content: 'PostScript'; } + pre.src-prolog:before { content: 'Prolog'; } + pre.src-simula:before { content: 'Simula'; } + pre.src-tcl:before { content: 'tcl'; } + pre.src-tex:before { content: 'TeX'; } + pre.src-plain-tex:before { content: 'Plain TeX'; } + pre.src-verilog:before { content: 'Verilog'; } + pre.src-vhdl:before { content: 'VHDL'; } + pre.src-xml:before { content: 'XML'; } + pre.src-nxml:before { content: 'XML'; } + /* add a generic configuration mode; LaTeX export needs an additional + (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */ + pre.src-conf:before { content: 'Configuration File'; } + + table { border-collapse:collapse; } + caption.t-above { caption-side: top; } + caption.t-bottom { caption-side: bottom; } + td, th { vertical-align:top; } + th.org-right { text-align: center; } + th.org-left { text-align: center; } + th.org-center { text-align: center; } + td.org-right { text-align: right; } + td.org-left { text-align: left; } + td.org-center { text-align: center; } + dt { font-weight: bold; } + .footpara { display: inline; } + .footdef { margin-bottom: 1em; } + .figure { padding: 1em; } + .figure p { text-align: center; } + .inlinetask { + padding: 10px; + border: 2px solid gray; + margin: 10px; + background: #ffffcc; + } + #org-div-home-and-up + { text-align: right; font-size: 70%; white-space: nowrap; } + textarea { overflow-x: auto; } + .linenr { font-size: smaller } + .code-highlighted { background-color: #ffff00; } + .org-info-js_info-navigation { border-style: none; } + #org-info-js_console-label + { font-size: 10px; font-weight: bold; white-space: nowrap; } + .org-info-js_search-highlight + { background-color: #ffff00; color: #000000; font-weight: bold; } + .org-svg { width: 90%; } + /*]]>*/--> +</style> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/htmlize.css"/> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/readtheorg.css"/> +<script type="text/javascript" src="styles/lib/js/jquery.min.js"></script> +<script type="text/javascript" src="styles/lib/js/bootstrap.min.js"></script> +<script type="text/javascript" src="styles/lib/js/jquery.stickytableheaders.min.js"></script> +<script type="text/javascript" src="styles/readtheorg/js/readtheorg.js"></script> +<script type="text/javascript"> +/* +@licstart The following is the entire license notice for the +JavaScript code in this tag. + +Copyright (C) 2012-2019 Free Software Foundation, Inc. + +The JavaScript code in this tag is free software: you can +redistribute it and/or modify it under the terms of the GNU +General Public License (GNU GPL) as published by the Free Software +Foundation, either version 3 of the License, or (at your option) +any later version. The code is distributed WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. + +As additional permission under GNU GPL version 3 section 7, you +may distribute non-source (e.g., minimized or compacted) forms of +that code without the copy of the GNU GPL normally required by +section 4, provided you include this license notice and a URL +through which recipients can access the Corresponding Source. + + +@licend The above is the entire license notice +for the JavaScript code in this tag. +*/ +<!--/*--><![CDATA[/*><!--*/ + function CodeHighlightOn(elem, id) + { + var target = document.getElementById(id); + if(null != target) { + elem.cacheClassElem = elem.className; + elem.cacheClassTarget = target.className; + target.className = "code-highlighted"; + elem.className = "code-highlighted"; + } + } + function CodeHighlightOff(elem, id) + { + var target = document.getElementById(id); + if(elem.cacheClassElem) + elem.className = elem.cacheClassElem; + if(elem.cacheClassTarget) + target.className = elem.cacheClassTarget; + } +/*]]>*///--> +</script> +</head> +<body> +<div id="content"> +<h1 class="title">Installation</h1> +<div id="table-of-contents"> +<h2>Table des matières</h2> +<div id="text-table-of-contents"> +<ul> +<li><a href="#org65570e0">1. Installation d'Emacs</a> +<ul> +<li><a href="#org72d19c0">1.1. Version proposée par la distribution</a></li> +<li><a href="#orgfe803c0">1.2. Préparation de l'installation</a></li> +<li><a href="#org6cbe4f5">1.3. Nettoyage du système.</a></li> +</ul> +</li> +<li><a href="#org74afa3a">2. Récupérer la configuration</a> +<ul> +<li><a href="#org980187d">2.1. Sauvegarde de l'ancienne configuration</a></li> +<li><a href="#orgef60d6e">2.2. Téléchargement de la configuration</a></li> +</ul> +</li> +<li><a href="#org59bc630">3. Python</a></li> +<li><a href="#orgb9b4315">4. Global</a></li> +<li><a href="#org0236d7c">5. C++</a></li> +</ul> +</div> +</div> +<p> +Ce document se place dans le cas d'un système <b>GNU/Linux</b> pour une +distribution <code>Debian</code> (ou basée sur <code>Debian</code> comme <code>Ubuntu</code> par exemple) et +présuppose que l'utilisateur peut installer les logiciels par le biais +de la commande <code>apt</code> et dispose donc des privilèges <code>root</code>. +</p> + +<p> +Dans le cas contraire, il reste possible d'utiliser cette +configuration, mais l'utilisateur devra, soit utiliser les commandes +<i>ad hoc</i> (dans le cas d'une autre distribution) soit les installer en +recompilant éventuellement les logiciels. +</p> + +<div style="color: red;" class="mdframed"> +<p> +<b>IMPORTANT</b> +</p> + +<p> +Au premier lancement d'Emacs, tous les paquets nécessaires seront +téléchargés puis compilés. Le premier démarrage prendra donc un +certain temps. Ce ne sera évidemment plus le cas par la suite. +</p> + +</div> + + +<div id="outline-container-org65570e0" class="outline-2"> +<h2 id="org65570e0"><span class="section-number-2">1</span> Installation d'Emacs</h2> +<div class="outline-text-2" id="text-1"> +<p> +Pour que cette configuration fonctionne de manière optimale il faut +que la version d'Emacs installée soit au moins la <code>26.0.50</code>. +</p> + +<p> +Pour commencer il faut vérifier si le système fourni de la version +minimum nécessaire. Dans le cas contraire, il faut enrichir la base +des paquets ou l'installer manuellement. +</p> +</div> + +<div id="outline-container-org72d19c0" class="outline-3"> +<h3 id="org72d19c0"><span class="section-number-3">1.1</span> Version proposée par la distribution</h3> +<div class="outline-text-3" id="text-1-1"> +<p> +Pour connaître la version du système on utilise la commande +</p> +<div class="org-src-container"> +<pre class="src src-bash">lsb_release -a +</pre> +</div> + +<p> +Jusqu'aux versions +</p> +<ul class="org-ul"> +<li><code>bionic</code> (<code>18.x.x</code>) d'<code>Ubuntu</code>,</li> +<li><code>stretch</code> (<code>9.x.x</code>) de <code>Debian</code>,</li> +</ul> +<p> +incluses, la version d'Emacs n'est pas suffisante. +</p> + +<p> +Si <code>Emacs</code> n'est pas installé est si les versions d'<code>Ubuntu</code> ou <code>Debian</code> +sont suffisamment récentes, il suffit d'exécuter dans ce cas : +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt update +sudo apt -y install emacs +</pre> +</div> + +<p> +Si Emacs était installé, on peut tout de même s'assurer de sa version +en utilisant la commande. +</p> +<div class="org-src-container"> +<pre class="src src-bash">emacs --version +</pre> +</div> +<p> +Si la version est suffisante (au delà de <code>26.0.50</code>), on peut ignorer le +paragraphe suivant. +</p> +</div> +</div> + +<div id="outline-container-orgfe803c0" class="outline-3"> +<h3 id="orgfe803c0"><span class="section-number-3">1.2</span> Préparation de l'installation</h3> +<div class="outline-text-3" id="text-1-2"> +<p> +Pour installer Emacs manuellement (ce qui n'est pas recommandé), on +peut suivre les instructions données <a href="https://www.gnu.org/software/emacs/download.html">ici</a>. +</p> + +<p> +On se concentre ici sur une installation de paquets précompilés. +</p> + +<p> +On doit ajouter des dépôts de paquets pour l'installation, on s'assure +donc que les outils de gestion de dépôts extérieurs sont disponibles. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install software-properties-common +</pre> +</div> + +<p> +On ajoute le dépôt en faisant. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo add-apt-repository -y ppa:kelleyk/emacs +</pre> +</div> + +<p> +Puis on installe Emacs. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install emacs26 +</pre> +</div> + +<p> +Pour terminer on s'assure que la version par défaut d'Emacs sera bien +la 26. Pour cela, on exécute +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo update-alternatives --set emacs /usr/bin/emacs26 +</pre> +</div> + +<p> +On peut vérifier à nouveau que tout s'est bien passé en exécutant +</p> +<div class="org-src-container"> +<pre class="src src-bash">emacs --version +</pre> +</div> +</div> +</div> + +<div id="outline-container-org6cbe4f5" class="outline-3"> +<h3 id="org6cbe4f5"><span class="section-number-3">1.3</span> Nettoyage du système.</h3> +<div class="outline-text-3" id="text-1-3"> +<p> +Si une version d'Emacs était déjà installée, il est probable que des +paquets Emacs l'aient été aussi. Pour que cette configuration +fonctionne de manière optimale, il convient de les supprimer. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt remove -y --purge <span class="org-string">'^elpa*'</span> +</pre> +</div> +</div> +</div> +</div> + +<div id="outline-container-org74afa3a" class="outline-2"> +<h2 id="org74afa3a"><span class="section-number-2">2</span> Récupérer la configuration</h2> +<div class="outline-text-2" id="text-2"> +</div> +<div id="outline-container-org980187d" class="outline-3"> +<h3 id="org980187d"><span class="section-number-3">2.1</span> Sauvegarde de l'ancienne configuration</h3> +<div class="outline-text-3" id="text-2-1"> +<p> +Si Emacs avait déjà été utilisé sur le compte de l'utilisateur, il a +généré automatiquement des fichiers de configuration. Il faut donc les +supprimer (ou les sauvegarder) avant d'installer cette configuration. +</p> + +<p> +Ce sont des fichiers cachés que nous allons placer dans un répertoire +pour éventuellement les réutiliser ultérieurement si cette +configuration ne convient pas. +</p> +<div class="org-src-container"> +<pre class="src src-bash">mkdir -p ~/sauvegarde.emacs-<span class="org-sh-quoted-exec">`date +%Y%m%d`</span> +mv ~/.emacs* ~/sauvegarde.emacs-<span class="org-sh-quoted-exec">`date +%Y%m%d`</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgef60d6e" class="outline-3"> +<h3 id="orgef60d6e"><span class="section-number-3">2.2</span> Téléchargement de la configuration</h3> +<div class="outline-text-3" id="text-2-2"> +<p> +Pour obtenir la configuration, il est préférable d'utiliser <code>git</code>, pour +l'installer il suffit d'exécuter la commande suivante. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install git +</pre> +</div> + +<p> +On peut maintenant récupérer la configuration. +</p> +<div class="org-src-container"> +<pre class="src src-bash">git clone git@gitlab.delpinux.fr:delpino/dot-emacs.git ~/.emacs.d +</pre> +</div> + +<p> +Il est maintenant possible de lancer Emacs. Comme on l'a dit, la +configuration initiale va prendre un peu de temps. Et Emacs lui même +va installer des paquets (<code>Debian</code> ou <code>Ubuntu</code>) pour satisfaire certaines +dépendances. +</p> + +<p> +Il faudra répondre <b>oui</b> (<code>y</code>) à toutes les questions qu'il posera (et +éventuellement entrer son mot de passe pour les interactions <code>sudo</code>). +</p> + +<p> +Une fois le premier lancement terminé, on fermera Emacs, puis on +pourra éventuellement le relancer. +</p> + +<p> +Pour que toute la configuration soit totalement opérationnelle, il +faut cependant installer quelques outils supplémentaires. +</p> +</div> +</div> +</div> + +<div id="outline-container-org59bc630" class="outline-2"> +<h2 id="org59bc630"><span class="section-number-2">3</span> Python</h2> +<div class="outline-text-2" id="text-3"> +<p> +Pour utiliser correctement <code>Python</code> avec cette configuration, il faut +installer <code>Python</code> (évidemment) et <code>virtualenv</code> qui va permettre +d'exécuter les scripts directement dans Emacs et bénéficier de +l'analyse syntaxique à la volée, entre autres. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install python virtualenv python3-jedi python-jedi +</pre> +</div> +<p> +Il reste une dernière étape à accomplir, à savoir configurer le +serveur <code>jedi</code> dans Emacs. +</p> + +<p> +Pour cela, on lance Emacs puis la commande <code>jedi:install-server</code>, à +savoir dans Emacs taper +</p> +<div class="org-src-container"> +<pre class="src src-:eval">M-x jedi:install-server +</pre> +</div> +<p> +où <code>M-x</code> signifie qu'on appuie simultanément sur les touches <code>ALT</code> et <code>x</code>, +on tape ensuite <code>jedi:install-server</code> à l'invite du <i>minibuffer</i> (tout en +bas). +</p> + +<p> +Ensuite à la prochaine édition d'un fichier <code>Python</code>, Emacs terminera +la configuration en demandant (dans le <i>minibuffer</i>) +</p> +<pre class="example"> +Please answer y or n. Automatically install the RPC dependencies +from PyPI (needed for completion, autoformatting and documentation) ? +(y or n) +</pre> +<p> +Il convient évidemment de répondre <code>y</code> à cette question. +</p> +</div> +</div> + +<div id="outline-container-orgb9b4315" class="outline-2"> +<h2 id="orgb9b4315"><span class="section-number-2">4</span> Global</h2> +<div class="outline-text-2" id="text-4"> +<p> +On recommande aussi d'installer les <code>ggtags</code>. +</p> + +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install global +</pre> +</div> +</div> +</div> + +<div id="outline-container-org0236d7c" class="outline-2"> +<h2 id="org0236d7c"><span class="section-number-2">5</span> C++</h2> +<div class="outline-text-2" id="text-5"> +<p> +Enfin, pour configurer correctement l'environnement de développement +pour le <code>C++</code>, il effectuer quelques installations et configurations +supplémentaires. +</p> + +<p> +On commence donc par installer <code>clang-9</code>. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install clang-9 libclang-9-dev +</pre> +</div> + +<p> +On va maintenant aider Emacs à trouver ces bonnes versions de +compilateur. Pour cela, on va exécuter les commandes suivantes. +</p> +<div class="org-src-container"> +<pre class="src src-bash">mkdir -p ~/bin +ln -s /usr/bin/clang++-9 ~/bin/clang++ +ln -s /usr/bin/clang-9 ~/bin/clang +ln -s /usr/bin/clang-format-9 ~/bin/clang-format +</pre> +</div> + +<p> +Il faut alors ajouter +</p> +<div class="org-src-container"> +<pre class="src src-bash"><span class="org-builtin">export</span> <span class="org-variable-name">PATH</span>=~/bin:$<span class="org-variable-name">PATH</span> +</pre> +</div> +<p> +à son <code>~/.bashrc</code> si ce n'est pas déjà fait. Si on utilise un autre +<i>shell</i>, on modifiera la variable <code>PATH</code> de la manière adéquate pour que +<code>~/bin</code> apparaisse au début. +</p> + +<p> +À ce moment, le plus simple est de se déconnecter pour être sûr que +cette modification est bien prise en compte. +</p> + +<p> +Il reste maintenant à compiler le serveur <code>irony</code> pour terminer +l'installation. Pour cela, on doit installer <code>CMake</code>. +</p> +<div class="org-src-container"> +<pre class="src src-bash">sudo apt -y install cmake +</pre> +</div> + +<p> +On relance ensuite Emacs, et on exécute la commande +</p> +<div class="org-src-container"> +<pre class="src src-bash">M-x irony-install-server +</pre> +</div> +<p> +Emacs propose alors une commande de compilation dans le <i>minibuffer</i>. Il +suffit de presser <code>RET</code>. La compilation devrait se dérouler sans +problème. +</p> +</div> +</div> +</div> +<div id="postamble" class="status"> +<p class="date">Created: 2020-04-17 ven. 19:55</p> +<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> +</div> +</body> +</html> diff --git a/Installation.pdf b/Installation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9e15bed0803a584314d0f8b30988337595e12daa Binary files /dev/null and b/Installation.pdf differ diff --git a/Readme.html b/Readme.html new file mode 100644 index 0000000000000000000000000000000000000000..fdb0b7e0e6a006aa50716bbb583f32ea5858a2d3 --- /dev/null +++ b/Readme.html @@ -0,0 +1,327 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> +<head> +<!-- 2020-04-17 ven. 19:55 --> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>‎</title> +<meta name="generator" content="Org mode" /> +<style type="text/css"> + <!--/*--><![CDATA[/*><!--*/ + .title { text-align: center; + margin-bottom: .2em; } + .subtitle { text-align: center; + font-size: medium; + font-weight: bold; + margin-top:0; } + .todo { font-family: monospace; color: red; } + .done { font-family: monospace; color: green; } + .priority { font-family: monospace; color: orange; } + .tag { background-color: #eee; font-family: monospace; + padding: 2px; font-size: 80%; font-weight: normal; } + .timestamp { color: #bebebe; } + .timestamp-kwd { color: #5f9ea0; } + .org-right { margin-left: auto; margin-right: 0px; text-align: right; } + .org-left { margin-left: 0px; margin-right: auto; text-align: left; } + .org-center { margin-left: auto; margin-right: auto; text-align: center; } + .underline { text-decoration: underline; } + #postamble p, #preamble p { font-size: 90%; margin: .2em; } + p.verse { margin-left: 3%; } + pre { + border: 1px solid #ccc; + box-shadow: 3px 3px 3px #eee; + padding: 8pt; + font-family: monospace; + overflow: auto; + margin: 1.2em; + } + pre.src { + position: relative; + overflow: visible; + padding-top: 1.2em; + } + pre.src:before { + display: none; + position: absolute; + background-color: white; + top: -10px; + right: 10px; + padding: 3px; + border: 1px solid black; + } + pre.src:hover:before { display: inline;} + /* Languages per Org manual */ + pre.src-asymptote:before { content: 'Asymptote'; } + pre.src-awk:before { content: 'Awk'; } + pre.src-C:before { content: 'C'; } + /* pre.src-C++ doesn't work in CSS */ + pre.src-clojure:before { content: 'Clojure'; } + pre.src-css:before { content: 'CSS'; } + pre.src-D:before { content: 'D'; } + pre.src-ditaa:before { content: 'ditaa'; } + pre.src-dot:before { content: 'Graphviz'; } + pre.src-calc:before { content: 'Emacs Calc'; } + pre.src-emacs-lisp:before { content: 'Emacs Lisp'; } + pre.src-fortran:before { content: 'Fortran'; } + pre.src-gnuplot:before { content: 'gnuplot'; } + pre.src-haskell:before { content: 'Haskell'; } + pre.src-hledger:before { content: 'hledger'; } + pre.src-java:before { content: 'Java'; } + pre.src-js:before { content: 'Javascript'; } + pre.src-latex:before { content: 'LaTeX'; } + pre.src-ledger:before { content: 'Ledger'; } + pre.src-lisp:before { content: 'Lisp'; } + pre.src-lilypond:before { content: 'Lilypond'; } + pre.src-lua:before { content: 'Lua'; } + pre.src-matlab:before { content: 'MATLAB'; } + pre.src-mscgen:before { content: 'Mscgen'; } + pre.src-ocaml:before { content: 'Objective Caml'; } + pre.src-octave:before { content: 'Octave'; } + pre.src-org:before { content: 'Org mode'; } + pre.src-oz:before { content: 'OZ'; } + pre.src-plantuml:before { content: 'Plantuml'; } + pre.src-processing:before { content: 'Processing.js'; } + pre.src-python:before { content: 'Python'; } + pre.src-R:before { content: 'R'; } + pre.src-ruby:before { content: 'Ruby'; } + pre.src-sass:before { content: 'Sass'; } + pre.src-scheme:before { content: 'Scheme'; } + pre.src-screen:before { content: 'Gnu Screen'; } + pre.src-sed:before { content: 'Sed'; } + pre.src-sh:before { content: 'shell'; } + pre.src-sql:before { content: 'SQL'; } + pre.src-sqlite:before { content: 'SQLite'; } + /* additional languages in org.el's org-babel-load-languages alist */ + pre.src-forth:before { content: 'Forth'; } + pre.src-io:before { content: 'IO'; } + pre.src-J:before { content: 'J'; } + pre.src-makefile:before { content: 'Makefile'; } + pre.src-maxima:before { content: 'Maxima'; } + pre.src-perl:before { content: 'Perl'; } + pre.src-picolisp:before { content: 'Pico Lisp'; } + pre.src-scala:before { content: 'Scala'; } + pre.src-shell:before { content: 'Shell Script'; } + pre.src-ebnf2ps:before { content: 'ebfn2ps'; } + /* additional language identifiers per "defun org-babel-execute" + in ob-*.el */ + pre.src-cpp:before { content: 'C++'; } + pre.src-abc:before { content: 'ABC'; } + pre.src-coq:before { content: 'Coq'; } + pre.src-groovy:before { content: 'Groovy'; } + /* additional language identifiers from org-babel-shell-names in + ob-shell.el: ob-shell is the only babel language using a lambda to put + the execution function name together. */ + pre.src-bash:before { content: 'bash'; } + pre.src-csh:before { content: 'csh'; } + pre.src-ash:before { content: 'ash'; } + pre.src-dash:before { content: 'dash'; } + pre.src-ksh:before { content: 'ksh'; } + pre.src-mksh:before { content: 'mksh'; } + pre.src-posh:before { content: 'posh'; } + /* Additional Emacs modes also supported by the LaTeX listings package */ + pre.src-ada:before { content: 'Ada'; } + pre.src-asm:before { content: 'Assembler'; } + pre.src-caml:before { content: 'Caml'; } + pre.src-delphi:before { content: 'Delphi'; } + pre.src-html:before { content: 'HTML'; } + pre.src-idl:before { content: 'IDL'; } + pre.src-mercury:before { content: 'Mercury'; } + pre.src-metapost:before { content: 'MetaPost'; } + pre.src-modula-2:before { content: 'Modula-2'; } + pre.src-pascal:before { content: 'Pascal'; } + pre.src-ps:before { content: 'PostScript'; } + pre.src-prolog:before { content: 'Prolog'; } + pre.src-simula:before { content: 'Simula'; } + pre.src-tcl:before { content: 'tcl'; } + pre.src-tex:before { content: 'TeX'; } + pre.src-plain-tex:before { content: 'Plain TeX'; } + pre.src-verilog:before { content: 'Verilog'; } + pre.src-vhdl:before { content: 'VHDL'; } + pre.src-xml:before { content: 'XML'; } + pre.src-nxml:before { content: 'XML'; } + /* add a generic configuration mode; LaTeX export needs an additional + (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */ + pre.src-conf:before { content: 'Configuration File'; } + + table { border-collapse:collapse; } + caption.t-above { caption-side: top; } + caption.t-bottom { caption-side: bottom; } + td, th { vertical-align:top; } + th.org-right { text-align: center; } + th.org-left { text-align: center; } + th.org-center { text-align: center; } + td.org-right { text-align: right; } + td.org-left { text-align: left; } + td.org-center { text-align: center; } + dt { font-weight: bold; } + .footpara { display: inline; } + .footdef { margin-bottom: 1em; } + .figure { padding: 1em; } + .figure p { text-align: center; } + .inlinetask { + padding: 10px; + border: 2px solid gray; + margin: 10px; + background: #ffffcc; + } + #org-div-home-and-up + { text-align: right; font-size: 70%; white-space: nowrap; } + textarea { overflow-x: auto; } + .linenr { font-size: smaller } + .code-highlighted { background-color: #ffff00; } + .org-info-js_info-navigation { border-style: none; } + #org-info-js_console-label + { font-size: 10px; font-weight: bold; white-space: nowrap; } + .org-info-js_search-highlight + { background-color: #ffff00; color: #000000; font-weight: bold; } + .org-svg { width: 90%; } + /*]]>*/--> +</style> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/htmlize.css"/> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/readtheorg.css"/> +<script type="text/javascript" src="styles/lib/js/jquery.min.js"></script> +<script type="text/javascript" src="styles/lib/js/bootstrap.min.js"></script> +<script type="text/javascript" src="styles/lib/js/jquery.stickytableheaders.min.js"></script> +<script type="text/javascript" src="styles/readtheorg/js/readtheorg.js"></script> +<script type="text/javascript"> +/* +@licstart The following is the entire license notice for the +JavaScript code in this tag. + +Copyright (C) 2012-2019 Free Software Foundation, Inc. + +The JavaScript code in this tag is free software: you can +redistribute it and/or modify it under the terms of the GNU +General Public License (GNU GPL) as published by the Free Software +Foundation, either version 3 of the License, or (at your option) +any later version. The code is distributed WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. + +As additional permission under GNU GPL version 3 section 7, you +may distribute non-source (e.g., minimized or compacted) forms of +that code without the copy of the GNU GPL normally required by +section 4, provided you include this license notice and a URL +through which recipients can access the Corresponding Source. + + +@licend The above is the entire license notice +for the JavaScript code in this tag. +*/ +<!--/*--><![CDATA[/*><!--*/ + function CodeHighlightOn(elem, id) + { + var target = document.getElementById(id); + if(null != target) { + elem.cacheClassElem = elem.className; + elem.cacheClassTarget = target.className; + target.className = "code-highlighted"; + elem.className = "code-highlighted"; + } + } + function CodeHighlightOff(elem, id) + { + var target = document.getElementById(id); + if(elem.cacheClassElem) + elem.className = elem.cacheClassElem; + if(elem.cacheClassTarget) + target.className = elem.cacheClassTarget; + } +/*]]>*///--> +</script> +</head> +<body> +<div id="content"> +<div id="table-of-contents"> +<h2>Table des matières</h2> +<div id="text-table-of-contents"> +<ul> +<li><a href="#org0d60696">1. Installation</a></li> +<li><a href="#orgc943273">2. Premiers pas avec Emacs</a></li> +<li><a href="#org596a3c0">3. Configuration</a></li> +<li><a href="#org236184f">4. À propos de cette configuration</a></li> +</ul> +</div> +</div> + +<div id="outline-container-org0d60696" class="outline-2"> +<h2 id="org0d60696"><span class="section-number-2">1</span> Installation</h2> +<div class="outline-text-2" id="text-1"> +<p> +Il est <b>plus que recommandé</b> de suivre le fichier <a href="Installation.html">Installation.org</a> pas à +pas. +</p> + +<p> +Emacs est chargé 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 +</p> +<div class="org-src-container"> +<pre class="src src-shell"><span class="org-builtin">alias</span> <span class="org-variable-name">emacs</span>=<span class="org-string">"emacsclient -q -a '' -c"</span> +<span class="org-builtin">alias</span> kill-emacs=<span class="org-string">"emacsclient -q -e '(let ((last-nonmenu-event nil))(save-buffers-kill-emacs))'"</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-orgc943273" class="outline-2"> +<h2 id="orgc943273"><span class="section-number-2">2</span> Premiers pas avec Emacs</h2> +<div class="outline-text-2" id="text-2"> +<p> +Emacs est bien plus qu'un éditeur de texte. C'est un véritable +environnement de travail dont la tâche ne se réduit pas à la +programmation. Certains vont jusqu'à parler de système d'exploitation. +</p> + +<p> +On fournit un tutoriel (voir <a href="Tutoriel.html">Tutoriel.org</a>) qui n'a pour but que de +donner quelques liens utiles et de rappeler les principes de base +ainsi que quelques raccourcis. +</p> +</div> +</div> + +<div id="outline-container-org596a3c0" class="outline-2"> +<h2 id="org596a3c0"><span class="section-number-2">3</span> Configuration</h2> +<div class="outline-text-2" id="text-3"> +<p> +La configuration utilisée est définie dans le fichier +<a href="Configuration.html">Configuration.org</a>. +</p> +</div> +</div> + +<div id="outline-container-org236184f" class="outline-2"> +<h2 id="org236184f"><span class="section-number-2">4</span> À propos de cette configuration</h2> +<div class="outline-text-2" id="text-4"> +<p> +Cette configuration d'Emacs est grandement (et librement) inspirée de +celle proposée par Mike Zamansky. +</p> + +<p> +Pour une excellente série tutoriels ainsi que la construction pas à +pas de configurations, voir ci-dessous +</p> +<blockquote> +<p> +For a list of all posts and videos check out +<a href="http://cestlaz.github.io/stories/emacs">http://cestlaz.github.io/stories/emacs</a> +</p> + +<p> +– Mike Zamansky +</p> +</blockquote> +</div> +</div> +</div> +<div id="postamble" class="status"> +<p class="date">Created: 2020-04-17 ven. 19:55</p> +<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> +</div> +</body> +</html> diff --git a/Readme.pdf b/Readme.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c65bb30bb93f70a8fbbbc4e1e30ee59981f183a9 Binary files /dev/null and b/Readme.pdf differ diff --git a/Tutoriel.html b/Tutoriel.html new file mode 100644 index 0000000000000000000000000000000000000000..5ba346fe006866edd375521ac1aea00511270347 --- /dev/null +++ b/Tutoriel.html @@ -0,0 +1,3233 @@ +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="fr" xml:lang="fr"> +<head> +<!-- 2020-04-17 ven. 19:55 --> +<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +<meta name="viewport" content="width=device-width, initial-scale=1" /> +<title>Un court tutoriel pour Emacs</title> +<meta name="generator" content="Org mode" /> +<style type="text/css"> + <!--/*--><![CDATA[/*><!--*/ + .title { text-align: center; + margin-bottom: .2em; } + .subtitle { text-align: center; + font-size: medium; + font-weight: bold; + margin-top:0; } + .todo { font-family: monospace; color: red; } + .done { font-family: monospace; color: green; } + .priority { font-family: monospace; color: orange; } + .tag { background-color: #eee; font-family: monospace; + padding: 2px; font-size: 80%; font-weight: normal; } + .timestamp { color: #bebebe; } + .timestamp-kwd { color: #5f9ea0; } + .org-right { margin-left: auto; margin-right: 0px; text-align: right; } + .org-left { margin-left: 0px; margin-right: auto; text-align: left; } + .org-center { margin-left: auto; margin-right: auto; text-align: center; } + .underline { text-decoration: underline; } + #postamble p, #preamble p { font-size: 90%; margin: .2em; } + p.verse { margin-left: 3%; } + pre { + border: 1px solid #ccc; + box-shadow: 3px 3px 3px #eee; + padding: 8pt; + font-family: monospace; + overflow: auto; + margin: 1.2em; + } + pre.src { + position: relative; + overflow: visible; + padding-top: 1.2em; + } + pre.src:before { + display: none; + position: absolute; + background-color: white; + top: -10px; + right: 10px; + padding: 3px; + border: 1px solid black; + } + pre.src:hover:before { display: inline;} + /* Languages per Org manual */ + pre.src-asymptote:before { content: 'Asymptote'; } + pre.src-awk:before { content: 'Awk'; } + pre.src-C:before { content: 'C'; } + /* pre.src-C++ doesn't work in CSS */ + pre.src-clojure:before { content: 'Clojure'; } + pre.src-css:before { content: 'CSS'; } + pre.src-D:before { content: 'D'; } + pre.src-ditaa:before { content: 'ditaa'; } + pre.src-dot:before { content: 'Graphviz'; } + pre.src-calc:before { content: 'Emacs Calc'; } + pre.src-emacs-lisp:before { content: 'Emacs Lisp'; } + pre.src-fortran:before { content: 'Fortran'; } + pre.src-gnuplot:before { content: 'gnuplot'; } + pre.src-haskell:before { content: 'Haskell'; } + pre.src-hledger:before { content: 'hledger'; } + pre.src-java:before { content: 'Java'; } + pre.src-js:before { content: 'Javascript'; } + pre.src-latex:before { content: 'LaTeX'; } + pre.src-ledger:before { content: 'Ledger'; } + pre.src-lisp:before { content: 'Lisp'; } + pre.src-lilypond:before { content: 'Lilypond'; } + pre.src-lua:before { content: 'Lua'; } + pre.src-matlab:before { content: 'MATLAB'; } + pre.src-mscgen:before { content: 'Mscgen'; } + pre.src-ocaml:before { content: 'Objective Caml'; } + pre.src-octave:before { content: 'Octave'; } + pre.src-org:before { content: 'Org mode'; } + pre.src-oz:before { content: 'OZ'; } + pre.src-plantuml:before { content: 'Plantuml'; } + pre.src-processing:before { content: 'Processing.js'; } + pre.src-python:before { content: 'Python'; } + pre.src-R:before { content: 'R'; } + pre.src-ruby:before { content: 'Ruby'; } + pre.src-sass:before { content: 'Sass'; } + pre.src-scheme:before { content: 'Scheme'; } + pre.src-screen:before { content: 'Gnu Screen'; } + pre.src-sed:before { content: 'Sed'; } + pre.src-sh:before { content: 'shell'; } + pre.src-sql:before { content: 'SQL'; } + pre.src-sqlite:before { content: 'SQLite'; } + /* additional languages in org.el's org-babel-load-languages alist */ + pre.src-forth:before { content: 'Forth'; } + pre.src-io:before { content: 'IO'; } + pre.src-J:before { content: 'J'; } + pre.src-makefile:before { content: 'Makefile'; } + pre.src-maxima:before { content: 'Maxima'; } + pre.src-perl:before { content: 'Perl'; } + pre.src-picolisp:before { content: 'Pico Lisp'; } + pre.src-scala:before { content: 'Scala'; } + pre.src-shell:before { content: 'Shell Script'; } + pre.src-ebnf2ps:before { content: 'ebfn2ps'; } + /* additional language identifiers per "defun org-babel-execute" + in ob-*.el */ + pre.src-cpp:before { content: 'C++'; } + pre.src-abc:before { content: 'ABC'; } + pre.src-coq:before { content: 'Coq'; } + pre.src-groovy:before { content: 'Groovy'; } + /* additional language identifiers from org-babel-shell-names in + ob-shell.el: ob-shell is the only babel language using a lambda to put + the execution function name together. */ + pre.src-bash:before { content: 'bash'; } + pre.src-csh:before { content: 'csh'; } + pre.src-ash:before { content: 'ash'; } + pre.src-dash:before { content: 'dash'; } + pre.src-ksh:before { content: 'ksh'; } + pre.src-mksh:before { content: 'mksh'; } + pre.src-posh:before { content: 'posh'; } + /* Additional Emacs modes also supported by the LaTeX listings package */ + pre.src-ada:before { content: 'Ada'; } + pre.src-asm:before { content: 'Assembler'; } + pre.src-caml:before { content: 'Caml'; } + pre.src-delphi:before { content: 'Delphi'; } + pre.src-html:before { content: 'HTML'; } + pre.src-idl:before { content: 'IDL'; } + pre.src-mercury:before { content: 'Mercury'; } + pre.src-metapost:before { content: 'MetaPost'; } + pre.src-modula-2:before { content: 'Modula-2'; } + pre.src-pascal:before { content: 'Pascal'; } + pre.src-ps:before { content: 'PostScript'; } + pre.src-prolog:before { content: 'Prolog'; } + pre.src-simula:before { content: 'Simula'; } + pre.src-tcl:before { content: 'tcl'; } + pre.src-tex:before { content: 'TeX'; } + pre.src-plain-tex:before { content: 'Plain TeX'; } + pre.src-verilog:before { content: 'Verilog'; } + pre.src-vhdl:before { content: 'VHDL'; } + pre.src-xml:before { content: 'XML'; } + pre.src-nxml:before { content: 'XML'; } + /* add a generic configuration mode; LaTeX export needs an additional + (add-to-list 'org-latex-listings-langs '(conf " ")) in .emacs */ + pre.src-conf:before { content: 'Configuration File'; } + + table { border-collapse:collapse; } + caption.t-above { caption-side: top; } + caption.t-bottom { caption-side: bottom; } + td, th { vertical-align:top; } + th.org-right { text-align: center; } + th.org-left { text-align: center; } + th.org-center { text-align: center; } + td.org-right { text-align: right; } + td.org-left { text-align: left; } + td.org-center { text-align: center; } + dt { font-weight: bold; } + .footpara { display: inline; } + .footdef { margin-bottom: 1em; } + .figure { padding: 1em; } + .figure p { text-align: center; } + .inlinetask { + padding: 10px; + border: 2px solid gray; + margin: 10px; + background: #ffffcc; + } + #org-div-home-and-up + { text-align: right; font-size: 70%; white-space: nowrap; } + textarea { overflow-x: auto; } + .linenr { font-size: smaller } + .code-highlighted { background-color: #ffff00; } + .org-info-js_info-navigation { border-style: none; } + #org-info-js_console-label + { font-size: 10px; font-weight: bold; white-space: nowrap; } + .org-info-js_search-highlight + { background-color: #ffff00; color: #000000; font-weight: bold; } + .org-svg { width: 90%; } + /*]]>*/--> +</style> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/htmlize.css"/> +<link rel="stylesheet" type="text/css" href="styles/readtheorg/css/readtheorg.css"/> +<script type="text/javascript" src="styles/lib/js/jquery.min.js"></script> +<script type="text/javascript" src="styles/lib/js/bootstrap.min.js"></script> +<script type="text/javascript" src="styles/lib/js/jquery.stickytableheaders.min.js"></script> +<script type="text/javascript" src="styles/readtheorg/js/readtheorg.js"></script> +<script type="text/javascript"> +/* +@licstart The following is the entire license notice for the +JavaScript code in this tag. + +Copyright (C) 2012-2019 Free Software Foundation, Inc. + +The JavaScript code in this tag is free software: you can +redistribute it and/or modify it under the terms of the GNU +General Public License (GNU GPL) as published by the Free Software +Foundation, either version 3 of the License, or (at your option) +any later version. The code is distributed WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU GPL for more details. + +As additional permission under GNU GPL version 3 section 7, you +may distribute non-source (e.g., minimized or compacted) forms of +that code without the copy of the GNU GPL normally required by +section 4, provided you include this license notice and a URL +through which recipients can access the Corresponding Source. + + +@licend The above is the entire license notice +for the JavaScript code in this tag. +*/ +<!--/*--><![CDATA[/*><!--*/ + function CodeHighlightOn(elem, id) + { + var target = document.getElementById(id); + if(null != target) { + elem.cacheClassElem = elem.className; + elem.cacheClassTarget = target.className; + target.className = "code-highlighted"; + elem.className = "code-highlighted"; + } + } + function CodeHighlightOff(elem, id) + { + var target = document.getElementById(id); + if(elem.cacheClassElem) + elem.className = elem.cacheClassElem; + if(elem.cacheClassTarget) + target.className = elem.cacheClassTarget; + } +/*]]>*///--> +</script> +<script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + displayAlign: "center", + displayIndent: "0em", + + "HTML-CSS": { scale: 100, + linebreaks: { automatic: "false" }, + webFont: "TeX" + }, + SVG: {scale: 100, + linebreaks: { automatic: "false" }, + font: "TeX"}, + NativeMML: {scale: 100}, + TeX: { equationNumbers: {autoNumber: "AMS"}, + MultLineWidth: "85%", + TagSide: "right", + TagIndent: ".8em" + } +}); +</script> +<script type="text/javascript" + src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"></script> +</head> +<body> +<div id="content"> +<h1 class="title">Un court tutoriel pour Emacs</h1> +<div id="table-of-contents"> +<h2>Table des matières</h2> +<div id="text-table-of-contents"> +<ul> +<li><a href="#orgec21dd6">1. Historique</a></li> +<li><a href="#orgabc5bfa">2. Lancement d'Emacs</a></li> +<li><a href="#org0f81a44">3. Prise en main</a> +<ul> +<li><a href="#org77f4b37">3.1. Interface</a> +<ul> +<li><a href="#org5359102">3.1.1. <i>Buffers</i></a></li> +<li><a href="#org9887f9b">3.1.2. <i>Windows</i></a></li> +<li><a href="#org5813b41">3.1.3. Cadre (<i>frames</i>)</a></li> +<li><a href="#org6464c4b">3.1.4. <i>Modeline</i></a></li> +<li><a href="#org32b8e29">3.1.5. <i>Minibuffer</i></a></li> +</ul> +</li> +<li><a href="#org2473e02">3.2. Fonctions</a></li> +</ul> +</li> +<li><a href="#org5012d36">4. Quelques raccourcis</a> +<ul> +<li><a href="#org38b8f3a">4.1. Commandes générales</a></li> +<li><a href="#org19ad496">4.2. <i>minibuffer</i></a></li> +<li><a href="#orga79cec6">4.3. Obtenir de l'aide</a></li> +<li><a href="#org9087303">4.4. Naviguer dans un <i>buffer</i></a></li> +<li><a href="#org299d9f7">4.5. Marquer une zone d'un <i>buffer</i></a></li> +<li><a href="#org1cb5087">4.6. Éditer le contenu d'un <i>buffer</i></a></li> +<li><a href="#orgd6c9059">4.7. Gestion des <i>buffers</i>, fenêtres et cadres</a> +<ul> +<li><a href="#orgdf00108">4.7.1. <i>buffers</i></a></li> +<li><a href="#orgbb37bbd">4.7.2. Fenêtres</a></li> +<li><a href="#orgf41179b">4.7.3. Cadres (<i>frames</i>)</a></li> +</ul> +</li> +<li><a href="#orgddae73e">4.8. Fichiers</a></li> +<li><a href="#orgd2d81fe">4.9. Recherche</a></li> +<li><a href="#org27c2fc0">4.10. Remplacement de texte</a></li> +<li><a href="#org3ea1574">4.11. Répétitions et macros</a></li> +<li><a href="#orga5132b8">4.12. Complétion</a></li> +</ul> +</li> +<li><a href="#org930a4aa">5. Modes utiles</a> +<ul> +<li><a href="#orge6aee40">5.1. Modes utilitaires</a> +<ul> +<li><a href="#org7f6aa21">5.1.1. Flyspell</a></li> +<li><a href="#org40085ae">5.1.2. FlyCheck</a></li> +</ul> +</li> +<li><a href="#org5baee2c">5.2. Interfaces avec <code>git</code></a> +<ul> +<li><a href="#orgd0cdab8">5.2.1. GitGutter</a></li> +<li><a href="#orgd3b7b3e">5.2.2. Magit</a></li> +</ul> +</li> +<li><a href="#orgd378205">5.3. Rédaction de documents LaTeX</a> +<ul> +<li><a href="#orga6ed013">5.3.1. AUCTeX</a></li> +<li><a href="#orgf4918cd">5.3.2. RefTeX</a></li> +</ul> +</li> +<li><a href="#org2ac1179">5.4. Programmation</a> +<ul> +<li><a href="#orgd602f40">5.4.1. Python</a></li> +<li><a href="#orgb2d0921">5.4.2. C++</a></li> +<li><a href="#org09db0b4">5.4.3. Tags</a></li> +<li><a href="#org44ba3b7">5.4.4. YASnippet</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#org6a3e84f">6. Pour aller plus loin</a> +<ul> +<li><a href="#orgc162f55">6.1. Org-mode</a></li> +<li><a href="#org24a67a3">6.2. Pliage et dépliage avec <code>narrow-or-widen-dwim</code></a></li> +<li><a href="#orgb8c74bc">6.3. Autres modes installés</a></li> +<li><a href="#orgc0b25c3">6.4. Personnalisation</a> +<ul> +<li><a href="#orga7d01e4">6.4.1. custom.el</a></li> +<li><a href="#orgda154fe">6.4.2. Emacs lisp</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</div> +</div> + + +<div id="outline-container-orgec21dd6" class="outline-2"> +<h2 id="orgec21dd6"><span class="section-number-2">1</span> Historique</h2> +<div class="outline-text-2" id="text-1"> +<p> +<a href="https://fr.wikipedia.org/wiki/Emacs">Emacs</a> (initialement pour <i><b>Editing MACroS</b> running on TECO</i>) fut créé +par <a href="https://fr.wikipedia.org/wiki/Richard_Stallman">Richard M. Stallman</a> (dit RMS) et <a href="https://fr.wikipedia.org/wiki/Guy_L._Steele,_Jr.">Guy L. Steele</a> en 1976. Il +s'agissait alors d'une collection de macro-commandes pour simplifier +l'utilisation de <a href="https://fr.wikipedia.org/wiki/TECO">TECO</a> (1964) qui était langage de programmation pour +l'édition de fichier orienté ligne. +</p> + +<p> +En 1983 RMS lance le projet <a href="https://fr.wikipedia.org/wiki/Projet_GNU">GNU</a> et l'une de ses premières tâches est +de le doter d'un éditeur digne de ce nom. Profitant de son expérience +et en s'inspirant de <a href="https://fr.wikipedia.org/wiki/Gosling_Emacs">Gosling Emacs</a> il crée <a href="https://fr.wikipedia.org/wiki/GNU_Emacs">GNU Emacs</a>. Pour cela, il +l'écrit en <a href="https://fr.wikipedia.org/wiki/C_(langage)">C</a> et permet l'écriture d'extensions en <a href="https://fr.wikipedia.org/wiki/Emacs_Lisp">Emacs Lisp</a>. C'est +probablement cette extensibilité qui fait que malgré son âge avancé, +Emacs est l'un des outils les plus utilisés pour le développement. +</p> +</div> +</div> + +<div id="outline-container-orgabc5bfa" class="outline-2"> +<h2 id="orgabc5bfa"><span class="section-number-2">2</span> Lancement d'Emacs</h2> +<div class="outline-text-2" id="text-2"> +<p> +Pour lancer Emacs, il suffit de taper la commande +</p> +<div class="org-src-container"> +<pre class="src src-bash">emacs +</pre> +</div> +<p> +dans un terminal. Si le terminal ne permet pas l'ouverture de fenêtres +graphiques (pas de <code>DISPLAY</code>), Emacs démarrera alors en mode texte. Si +on utilise l'option <code>-nw</code>, pour <i>no window</i>, on force le lancement d'Emacs +en mode texte. +</p> +<div class="org-src-container"> +<pre class="src src-bash">emacs -nw +</pre> +</div> +<p> +Attention dans ce mode, pour quitter Emacs, il faut utiliser le +raccourcis clavier <code>C-x C-c</code> (contrôle-x puis contrôle-c). Une dernière +option pratique est l'option <code>-q</code>. Son effet est de lancer Emacs sans +utiliser la configuration locale. +</p> +<div class="org-src-container"> +<pre class="src src-bash">emacs -q +</pre> +</div> +</div> +</div> + +<div id="outline-container-org0f81a44" class="outline-2"> +<h2 id="org0f81a44"><span class="section-number-2">3</span> Prise en main</h2> +<div class="outline-text-2" id="text-3"> +<p> +La prise en main d'Emacs n'est pas difficile pour une utilisation +basique. En mode graphique Emacs dispose de menus qui permettent +d'accéder à toutes les opérations classiques. Néanmoins, pour +l'utiliser plus efficacement, il convient de comprendre un peu son +fonctionnement. +</p> + +<p> +Comme on l'a dit, Emacs a vu le jour comme un ensemble de <b>macros</b>, +c'est-à-dire des enchaînements de commandes simples ou d'autres +macros. Ces macros (ou plus précisément ces <b>fonctions</b>) sont toujours +un des piliers du fonctionnement d'Emacs. Le nombre de fonctions +proposées par Emacs est très important et pour y accéder rapidement +Emacs permet l'usage de raccourcis clavier. C'est en apprenant et en +utilisant ces raccourcis qu'on gagne en productivité. L'utilisation de +la souris avec Emacs est donc souvent contre productive. Enfin on peut +facilement créer et enregistrer des enchaînements de commandes pour +éviter les tâches répétitives. +</p> + +<p> +Une première façon d'apprendre un peu Emacs est d'effectuer le +<b>tutoriel intégré</b> qu'il propose. Pour démarrer le tutoriel il suffit de +saisir le raccourcis <code>C-h t</code>. Pour le novice, cela signifie qu'on doit +taper sur la touche contrôle (<code>C</code>) et sur la touche <code>h</code> simultanément, +puis sur la touche <code>t</code> seulement. +</p> +</div> + +<div id="outline-container-org77f4b37" class="outline-3"> +<h3 id="org77f4b37"><span class="section-number-3">3.1</span> Interface</h3> +<div class="outline-text-3" id="text-3-1"> +<p> +Globalement, l'interface d'Emacs est assez intuitive, mais elle a +conservé tous les ingrédients qui en faisaient sa richesse alors que +ce n'était pas une application graphique (la première version +graphique de GNU Emacs est la 19, sortie en 1994). Certains de ses +concepts ne sont donc pas si communs de nos jours. +</p> +</div> + +<div id="outline-container-org5359102" class="outline-4"> +<h4 id="org5359102"><span class="section-number-4">3.1.1</span> <i>Buffers</i></h4> +<div class="outline-text-4" id="text-3-1-1"> +<p> +Un <i>buffer</i> est une zone tampon et la plus petite unité d'édition. Il +correspond en général à la vue d'un fichier édité. +</p> +</div> +</div> + +<div id="outline-container-org9887f9b" class="outline-4"> +<h4 id="org9887f9b"><span class="section-number-4">3.1.2</span> <i>Windows</i></h4> +<div class="outline-text-4" id="text-3-1-2"> +<p> +Il est possible de visualiser plusieurs <i>buffers</i> simultanément dans +Emacs. Chaque vue est appelée <b>fenêtre</b>. Attention, dans le jargon +Emacs, une fenêtre n'est pas à confondre avec les fenêtres gérées par +le <i>window-manager</i> de l'interface graphique (voir +figure <a href="#orgefe5df7">1</a>, où un <a href="#orgc2613c8">cadre</a> Emacs est découpé en trois +fenêtres). On peut afficher un <b>même</b> <i>buffer</i> dans différentes fenêtres +et il peut être modifié dans n'importe laquelle de ses vues. +</p> + + +<div id="orgefe5df7" class="figure"> +<p><img src="emacs-windows.png" alt="emacs-windows.png" /> +</p> +<p><span class="figure-number">Figure 1 : </span>Trois fenêtres affichées dans Emacs</p> +</div> +</div> +</div> + +<div id="outline-container-org5813b41" class="outline-4"> +<h4 id="org5813b41"><span class="section-number-4">3.1.3</span> <a id="orgc2613c8"></a> Cadre (<i>frames</i>)</h4> +<div class="outline-text-4" id="text-3-1-3"> +<p> +Lorsqu'il est exécuté en mode graphique, une même instance d'Emacs +peut proposer plusieurs cadres (<i>frames</i>) d'affichage. Il s'agit en fait +de plusieurs fenêtres du gestionnaire graphique. +</p> + +<p> +Dans l'exemple de la figure <a href="#org43c68ad">2</a>, il s'agit bien de la même +instance d'Emacs : on a lancé un seul exécutable, mais on a ouvert un +cadre (<i>frame</i>) supplémentaire. Dans chacun des cadres, on affiche une +vue d'un <b>même</b> <i>buffer</i> d'édition, c'est-à-dire que le <b>même</b> <i>buffer</i> peut +être modifié par l'intermédiaire de l'un ou l'autre des cadres. +</p> + + +<div id="org43c68ad" class="figure"> +<p><img src="emacs-frames.png" alt="emacs-frames.png" /> +</p> +<p><span class="figure-number">Figure 2 : </span>Deux cadres (<i>frames</i>) Emacs affichant le même <i>buffer</i></p> +</div> +</div> +</div> + +<div id="outline-container-org6464c4b" class="outline-4"> +<h4 id="org6464c4b"><span class="section-number-4">3.1.4</span> <i>Modeline</i></h4> +<div class="outline-text-4" id="text-3-1-4"> +<p> +Dans Emacs, chaque <i>buffer</i> est délimité <b>en bas</b> par la <i>modeline</i>. Il +s'agit d'une zone dans laquelle sont affichées divers informations +quant au mode de fonctionnement d'Emacs dans son <i>buffer</i>. On la voit en +action sur la figure <a href="#orga0ffbc7">3</a>, le mode majeur est <code>CMake</code>, le +fichier édité s'appelle <code>CMakeList.txt</code>, enfin, on travaille sur la +branche <code>develop</code>. +</p> + + +<div id="orga0ffbc7" class="figure"> +<p><img src="emacs-modeline.png" alt="emacs-modeline.png" /> +</p> +<p><span class="figure-number">Figure 3 : </span>La <i>modeline</i>. Ici on voit qu'on est en mode <code>CMake</code>, que le fichier édité s'appelle <code>CMakeList.txt</code> et qu'on travaille sur la branche <code>develop</code>.</p> +</div> +</div> +</div> + +<div id="outline-container-org32b8e29" class="outline-4"> +<h4 id="org32b8e29"><span class="section-number-4">3.1.5</span> <i>Minibuffer</i></h4> +<div class="outline-text-4" id="text-3-1-5"> +<p> +Le <i>minibuffer</i> est un <i>buffer</i> spécial d'Emacs. C'est la zone +d'interaction avec l'utilisateur. C'est là qu'on doit répondre aux +éventuelles questions d'Emacs et c'est là qu'on tape les commandes. Il +faut donc le garder constamment à l'oeil. Voir la +figure <a href="#org9ca99fa">4</a> (ici une exécution de <code>grep</code> dans Emacs en +préparation). Pour exécuter une commande dans le <i>minibuffer</i> il faut +taper <code>M-x</code>. +</p> + + +<div id="org9ca99fa" class="figure"> +<p><img src="emacs-minibuffer.png" alt="emacs-minibuffer.png" /> +</p> +<p><span class="figure-number">Figure 4 : </span>Le <i>minibuffer</i> en action. Préparation de l'exécution d'une commande <code>grep</code> dans Emacs.</p> +</div> +</div> +</div> +</div> + +<div id="outline-container-org2473e02" class="outline-3"> +<h3 id="org2473e02"><span class="section-number-3">3.2</span> Fonctions</h3> +<div class="outline-text-3" id="text-3-2"> +<p> +Dans Emacs, tout est fonction. Et toute fonction peut-être surchargée +localement (dans un <i>buffer</i>), une famille de <i>buffers</i> (un <b>mode</b>) ou +globalement (dans tout Emacs). +</p> + +<p> +Par exemple, presser une touche (quel que soit le contexte) déclenche +l'appel d'une fonction et cette fonction dépend du contexte dans +lequel la touche est pressée. C'est ce concepts qui fait d'Emacs un +outil aussi puissant et versatile. Les fonctions peuvent être de deux +types. Ce sont +</p> +<ul class="org-ul"> +<li>soit des fonctions internes (écrites en <code>C</code>),</li> +<li>soit des fonctions utilisateur écrites en <code>ELisp</code>.</li> +</ul> +<p> +Par le passé, ce deuxième type de fonctions pouvait dégrader les +performances d'Emacs (si bien que certains lui donnaient l'acronyme +récursif <i>Emacs Makes All Computer Slow</i>). Mais les gains de +performances des ordinateurs et l'utilisation d'<code>ELisp</code> <i>byte</i>-compilé +plutôt que simplement interprété ont corrigé ce défaut. +</p> +</div> +</div> +</div> + +<div id="outline-container-org5012d36" class="outline-2"> +<h2 id="org5012d36"><span class="section-number-2">4</span> Quelques raccourcis</h2> +<div class="outline-text-2" id="text-4"> +<p> +On présente dans cette partie certains raccourcis utiles. Lorsque les +raccourcis de cette configuration diffèrent des raccourcis standard +d'Emacs, on l'indique. +</p> + +<p> +Mais rappelons tout d'abord les notations et principes. +</p> +<ul class="org-ul"> +<li><code>C-a</code> signifie qu'on appuie simultanément sur les touches <code>Ctrl</code> +(contrôle) et <code>a</code>.</li> +<li><code>C-M-a</code> signifie qu'on appuie simultanément sur les touches <code>Ctrl</code>, +<code>Meta</code> (<code>Alt</code> sur les claviers modernes) et <code>a</code>.</li> +<li><code>C-S-a</code> signifie qu'on appuie simultanément sur les touches <code>Ctrl</code>, <code>Maj</code> et <code>a</code>.</li> +<li><code>C-a C-b c</code> signifie qu'on appuie simultanément sur les touches +<code>Ctrl</code> et <code>a</code>, puis simultanément sur les touches <code>Ctrl</code> et <code>b</code>, +puis sur la touche <code>b</code>.</li> +</ul> + +<p> +On ne liste ici que quelques unes des commandes (et raccourcis), +seulement une liste de celles qu'on juge importantes. +</p> + +<p> +Noter que cette configuration utilise le mode <code>which-key</code>, dont l'une +des fonctionnalités est de fournir une aide dans le <i>minibuffer</i> lors de +la saisie de commandes. Par exemple, si on tape <code>C-x</code>, au bout d'un +instant <code>which-key</code> affiche dans le <i>minibuffer</i> la liste des commandes +qui commencent par <code>C-x</code>. C'est donc un excellent moyen de retrouver les +raccourcis et d'en apprendre de nouveaux. Cette aide est évidemment +contextuelle. +</p> +</div> + +<div id="outline-container-org38b8f3a" class="outline-3"> +<h3 id="org38b8f3a"><span class="section-number-3">4.1</span> Commandes générales</h3> +<div class="outline-text-3" id="text-4-1"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x C-c</code></td> +<td class="org-left">Sort d'Emacs</td> +</tr> + +<tr> +<td class="org-left"><code>C-g</code></td> +<td class="org-left">Interrompt la commande en cours</td> +</tr> + +<tr> +<td class="org-left"><code>C-S-g</code></td> +<td class="org-left">Force l'interruption de la commande</td> +</tr> + +<tr> +<td class="org-left"><code>M-x</code></td> +<td class="org-left">Lance une commande (dans le <i>minibuffer</i>)</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-n</code></td> +<td class="org-left">Relance l'évaluation du <i>buffer</i> (<code>normal-mode</code>)</td> +</tr> +</tbody> +</table> +</div> +</div> + +<div id="outline-container-org19ad496" class="outline-3"> +<h3 id="org19ad496"><span class="section-number-3">4.2</span> <i>minibuffer</i></h3> +<div class="outline-text-3" id="text-4-2"> +<p> +Lors d'une interaction avec le <i>minibuffer</i>, on a accès à certains +raccourcis qui facilitent son utilisation. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-x</code></td> +<td class="org-left">Lance une interaction dans le <i>minibuffer</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-x ESC ESC</code></td> +<td class="org-left">Édite la dernière commande dans le <i>minibuffer</i></td> +</tr> + +<tr> +<td class="org-left"><code>TAB</code></td> +<td class="org-left">Complète l'entrée autant que possible</td> +</tr> +</tbody> +</table> +<p> +Cette configuration utilise <code>swiper</code>, donc toutes les interactions +effectuées dans le <i>minibuffer</i> proposent la liste des commandes +disponibles qui correspondent à la chaîne entrée (<code>SPC</code> faisant office +de n'importe quelle liste de caractères). Il est alors possible de +naviguer dans cette liste (en utilisant les flèches du clavier pas +exemple) +</p> +</div> +</div> + +<div id="outline-container-orga79cec6" class="outline-3"> +<h3 id="orga79cec6"><span class="section-number-3">4.3</span> Obtenir de l'aide</h3> +<div class="outline-text-3" id="text-4-3"> +<p> +On peut lancer l'aide en tapant <code>C-h</code> et en suivant les indications du +<i>minibuffer</i>. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-h t</code></td> +<td class="org-left">Lance le tutoriel intégré</td> +</tr> + +<tr> +<td class="org-left"><code>C-h m</code></td> +<td class="org-left">Informations sur le mode courant</td> +</tr> + +<tr> +<td class="org-left"><code>C-h i</code></td> +<td class="org-left">Accède à la documentation (<code>info</code>)</td> +</tr> + +<tr> +<td class="org-left"><code>C-h a</code></td> +<td class="org-left"><b>à propos</b> (interaction dans le <i>minibuffer</i>)</td> +</tr> +</tbody> +</table> +</div> +</div> + +<div id="outline-container-org9087303" class="outline-3"> +<h3 id="org9087303"><span class="section-number-3">4.4</span> Naviguer dans un <i>buffer</i></h3> +<div class="outline-text-3" id="text-4-4"> +<p> +Au delà des flèches et autres touches usuelles du clavier, Emacs +propose d'autres moyens de se déplacer dans un <i>buffer</i>. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-b</code></td> +<td class="org-left">Recule d'un caractère</td> +</tr> + +<tr> +<td class="org-left"><code>C-f</code></td> +<td class="org-left">Avance d'un caractère</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>M-b</code></td> +<td class="org-left">Recule d'un mot</td> +</tr> + +<tr> +<td class="org-left"><code>M-f</code></td> +<td class="org-left">Avance d'un mot</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-p</code></td> +<td class="org-left">Ligne précédente</td> +</tr> + +<tr> +<td class="org-left"><code>C-n</code></td> +<td class="org-left">Ligne suivante</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-a</code></td> +<td class="org-left">Début de ligne</td> +</tr> + +<tr> +<td class="org-left"><code>C-e</code></td> +<td class="org-left">Fin de ligne</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>M-a</code></td> +<td class="org-left">Début de la phrase</td> +</tr> + +<tr> +<td class="org-left"><code>M-e</code></td> +<td class="org-left">Fin de la phrase</td> +</tr> + +<tr> +<td class="org-left"><code>M-m</code></td> +<td class="org-left">Début de l'indentation</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>M-g g</code> <i>numéro</i></td> +<td class="org-left">Positionne le curseur à la ligne numéro <i>numéro</i></td> +</tr> +</tbody> +</table> + +<p> +Noter qu'on peut généralement utiliser des combinaisons de <code>Ctrl</code>, +<code>Meta</code>,… avec les touches de déplacement du clavier (comme les +flèches). +</p> +</div> +</div> + +<div id="outline-container-org299d9f7" class="outline-3"> +<h3 id="org299d9f7"><span class="section-number-3">4.5</span> Marquer une zone d'un <i>buffer</i></h3> +<div class="outline-text-3" id="text-4-5"> +<p> +Une zone est délimitée par une une <b>marque</b> (position de départ) et la +position courante du curseur Créer une zone consiste donc à poser une +<b>marque</b>, puis à déplacer le curseur pour la délimiter. Tous les +caractères compris entre ces deux positions font partie de la zone. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-SPC</code> ou <code>C-@</code></td> +<td class="org-left">Pose une <b>marque</b></td> +</tr> + +<tr> +<td class="org-left"><code>C-g</code></td> +<td class="org-left">Supprime la <b>marque</b></td> +</tr> + +<tr> +<td class="org-left"><code>C-x C-x</code></td> +<td class="org-left">Inverse la <b>marque</b> et le curseur</td> +</tr> + +<tr> +<td class="org-left"><code>C-=</code></td> +<td class="org-left">Sélectionne un mot ou étend la sélection</td> +</tr> +</tbody> +</table> +<p> +Noter qu'un enchaînement de <code>C-=</code> permet d'étendre rapidement la zone +aux entités faisant sens. En effet, <code>C-=</code> s'arrête aux guillemets +encadrant une chaîne de caractères, aux paramètres ou au corps d'une +fonction par exemple, ce qui permet de facilement les sélectionner. +</p> +</div> +</div> + +<div id="outline-container-org1cb5087" class="outline-3"> +<h3 id="org1cb5087"><span class="section-number-3">4.6</span> Éditer le contenu d'un <i>buffer</i></h3> +<div class="outline-text-3" id="text-4-6"> +<p> +Le commandes citées ici concernent essentiellement les <b>modes</b> d'édition +classiques. Il est possible que pour certains modes les raccourcis ne +fonctionnent pas ou n'aient simplement pas de sens. Dans ces modes +d'édition classiques (modes de saisie par exemple), le clavier +fonctionne normalement. On précise simplement ici quelques commandes +usuelles. +</p> + +<p> +L'action des commandes d'édition décrites ci-dessous est effectuée +relativement à la position courante du curseur. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>DEL</code></td> +<td class="org-left"><b>Efface</b> un caractère vers la gauche</td> +</tr> + +<tr> +<td class="org-left"><code>C-d</code> ou <code>SUPR</code></td> +<td class="org-left"><b>Efface</b> le caractère sous le curseur</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>DEL</code> ou <code>SUPR</code></td> +<td class="org-left"><b>Efface</b> une zone sélectionnée</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-DEL</code>, <code>M-DEL</code> ou <code>C-w</code></td> +<td class="org-left"><b>Coupe</b> le mot vers la gauche</td> +</tr> + +<tr> +<td class="org-left"><code>M-d</code></td> +<td class="org-left"><b>Coupe</b> le mot vers la droite</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>M-0 C-k</code></td> +<td class="org-left"><b>Coupe</b> jusqu'au début de la ligne</td> +</tr> + +<tr> +<td class="org-left"><code>C-k</code></td> +<td class="org-left"><b>Coupe</b> jusqu'à la fin de la ligne</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-w</code></td> +<td class="org-left"><b>Coupe</b> une zone sélectionnée</td> +</tr> + +<tr> +<td class="org-left"><code>M-w</code></td> +<td class="org-left"><b>Copie</b> une zone sélectionnée</td> +</tr> + +<tr> +<td class="org-left"><code>M-z</code> <i>caractère</i></td> +<td class="org-left"><b>Coupe</b> jusqu'au prochain caractère <i>caractère</i></td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-_</code> ou <code>C-/</code> ou <code>C-x u</code></td> +<td class="org-left">Annule la dernière saisie/commande</td> +</tr> +</tbody> +</table> +<p> +Noter qu'avec cette configuration d'Emacs, si le caractère à effacer +est un <b>blanc</b>, tous les blancs suivants dans la direction d'effacement +sont supprimés. +</p> + +<p> +Puisqu'on vient d'aborder comment <b>copier</b> ou <b>couper</b> une zone du texte, +nous allons décrire le <b>coller</b>. Là encore, le vocable Emacs n'est pas +standard. L'action <b>couper</b> dans Emacs se nomme <b><i>kill</i></b> et <b>coller</b>, +<b><i>yank</i></b>. On comprend ainsi mieux les choix de lettres <code>k</code> et <code>y</code> dans ce +contexte. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-y</code></td> +<td class="org-left"><b>Colle</b> la dernière sélection <b>copiée</b></td> +</tr> + +<tr> +<td class="org-left"><code>M-y</code></td> +<td class="org-left">Remplace le texte collé par la copie précédente</td> +</tr> +</tbody> +</table> +<p> +En fait, Emacs conserve toutes les copies en mémoire (<i>kill-ring</i>) et on +peut donc les utiliser à tout moment. Dans sa version de base, +parcourir le <i>kill-ring</i> nécessite d'abord un <b>coller</b>. C'est-à-dire qu'il +faut effectuer <code>C-y</code> and de taper <code>M-y</code> pour le parcourir. +</p> + +<p> +Cette configuration d'Emacs utilise <code>swiper</code> et le parcours du <i>kill-ring</i> +est amélioré. En effet, <code>swiper</code> propose l'utilisation directe de <code>M-y</code> et +plutôt que de remplacer le texte <i>en ligne</i> comme le fait la version de +base, on y accède dans le <i>minibuffer</i>. On peut alors le parcourir, soit +en continuant à presser <code>M-y</code>, soit en utilisant les flèches du clavier, +soit même en entrant les une partie du texte comme pour les +<a href="#orgf167c7a">recherches</a>. +</p> +</div> +</div> + +<div id="outline-container-orgd6c9059" class="outline-3"> +<h3 id="orgd6c9059"><span class="section-number-3">4.7</span> Gestion des <i>buffers</i>, fenêtres et cadres</h3> +<div class="outline-text-3" id="text-4-7"> +</div> +<div id="outline-container-orgdf00108" class="outline-4"> +<h4 id="orgdf00108"><span class="section-number-4">4.7.1</span> <i>buffers</i></h4> +<div class="outline-text-4" id="text-4-7-1"> +<p> +Dans cette configuration, on utilise le paquet <code>IBuffer</code> à la place du +mode <code>Buffer</code> classique. Il fonctionne avec les mêmes raccourcis de +base. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x b</code></td> +<td class="org-left">Choisit un autre <i>buffer</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-x C-b</code></td> +<td class="org-left">Ouvre le mode <code>IBuffer</code></td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-x k</code></td> +<td class="org-left">Choisit un <i>buffer</i> à fermer</td> +</tr> + +<tr> +<td class="org-left"><code>C-x k RET</code></td> +<td class="org-left">Ferme le <i>buffer</i> courant</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-x left</code></td> +<td class="org-left">Retourne au <i>buffer</i> précédent</td> +</tr> + +<tr> +<td class="org-left"><code>C-x right</code></td> +<td class="org-left">Retourne au <i>buffer</i> suivant</td> +</tr> +</tbody> +</table> +<p> +Noter que les raccourcis <code>C-x left</code> et <code>C-x right</code> (où <code>left</code> et <code>right</code> +désignent les flèches du clavier) sont extrêmement utiles et il est +important de les mémoriser. On parle bien ici de retrouver le <i>buffer</i> +précédent ou suivant dans la même fenêtre. +</p> + +<p> +Lorsqu'on ferme un <i>buffer</i>, si les données n'ont pas été sauvegardées +Emacs invite l'utilisateur à le faire. +</p> +</div> +</div> + +<div id="outline-container-orgbb37bbd" class="outline-4"> +<h4 id="orgbb37bbd"><span class="section-number-4">4.7.2</span> Fenêtres</h4> +<div class="outline-text-4" id="text-4-7-2"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x 1</code></td> +<td class="org-left">Agrandit la fenêtre pour qu'elle occupe tout le cadre</td> +</tr> + +<tr> +<td class="org-left"><code>C-x 2</code></td> +<td class="org-left">Découpe la fenêtre courante horizontalement</td> +</tr> + +<tr> +<td class="org-left"><code>C-x 3</code></td> +<td class="org-left">Découpe la fenêtre courante verticalement</td> +</tr> + +<tr> +<td class="org-left"><code>C-x 0</code></td> +<td class="org-left">Ferme la fenêtre courante</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-x o</code></td> +<td class="org-left">Positionne le curseur dans une autre fenêtre</td> +</tr> +</tbody> +</table> + +<p> +Pour la gestion des fenêtres, on utilise le mode <code>ace-window</code> qui ajoute +la fonctionnalité suivante. Si plus de deux fenêtres sont actives dans +le cadre courant, <code>C-x o</code> affiche alors des numéros dans chacune des +fenêtres. On entre ce numéro pour basculer dans la fenêtre choisie. +</p> +</div> +</div> + +<div id="outline-container-orgf41179b" class="outline-4"> +<h4 id="orgf41179b"><span class="section-number-4">4.7.3</span> Cadres (<i>frames</i>)</h4> +<div class="outline-text-4" id="text-4-7-3"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x 5 0</code></td> +<td class="org-left">Ferme le actif cadre</td> +</tr> + +<tr> +<td class="org-left"><code>C-x 5 1</code></td> +<td class="org-left">Ferme tous les autres cadres</td> +</tr> + +<tr> +<td class="org-left"><code>C-x 5 2</code></td> +<td class="org-left">Crée un nouveau cadre</td> +</tr> +</tbody> +</table> +</div> +</div> +</div> + +<div id="outline-container-orgddae73e" class="outline-3"> +<h3 id="orgddae73e"><span class="section-number-3">4.8</span> Fichiers</h3> +<div class="outline-text-3" id="text-4-8"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x C-f</code></td> +<td class="org-left">Recherche incrémentale d'un fichier ou le crée</td> +</tr> + +<tr> +<td class="org-left"><code>C-x C-s</code></td> +<td class="org-left">Sauvegarde le <i>buffer</i> courant</td> +</tr> + +<tr> +<td class="org-left"><code>C-x s</code></td> +<td class="org-left">Sauvegarde tous les <i>buffers</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-x C-w</code></td> +<td class="org-left">Sauvegarde le <i>buffer</i> courant dans un nouveau fichier</td> +</tr> + +<tr> +<td class="org-left"><code>C-x i</code></td> +<td class="org-left">Insère le contenu d'un fichier dans le <i>buffer</i></td> +</tr> +</tbody> +</table> + +<div style="color: red;" class="mdframed"> +<p> +<b>IMPORTANT</b> +</p> + +<p> +Si on souhaite créer un nouveau fichier avec <code>C-x C-f</code> dont le nom est +une sous chaîne d'un fichier existant, il ne faut pas utiliser <code>RET</code> +pour valider, mais <code>C-M-j</code>. Utiliser <code>RET</code> valide la recherche. +</p> + +<p> +Une autre façon de créer le fichier <code>foo</code>, si un fichier correspondant à +l'expression <i>foo</i> existe (par exemple <code>foobar</code>), consiste à interrompre +la recherche incrémentale en sélectionnant la <b>zone de saisie</b> avec les +flèches puis à taper <code>RET</code>. +</p> + +</div> + +<p> +<b>Ouverture de fichiers/répertoirs distants.</b> À noter que cette +configuration d'Emacs utilise le mode <code>TRAMP</code> pour (<i>Transparent Remote +Access, Multiple Protocols</i>) qui permet l'ouverture de fichiers à +distance depuis Emacs. +</p> + +<p> +Pour que l'édition distante fonctionne, il suffit que la connexion par +<code>ssh</code> soit autorisée. +</p> + +<p> +L'intérêt de ce mode est évident puisqu'on n'a pas besoin de +réinstaller l'environnement Emacs sur cette nouvelle machine, pour +travailler dans son environnement usuel. Il suffit de pouvoir s'y +connecter par <code>ssh</code>. +</p> + +<p> +Pour ouvrir un fichier distant, il suffit d'utiliser le raccourci +<code>C-x C-f</code>, puis d'écrire dans le <code>minibuffer</code> +</p> +<div class="org-src-container"> +<pre class="src src-bash">/sshx:username@hostname: +</pre> +</div> +<p> +À partir de là, si on presse <code>RET</code>, Emacs ouvrira un <code>dired</code> <i>buffer</i> (c'est +à dire un buffer permettant de manipuler les fichiers du répertoire +<code>HOME</code> de l'utilisateur sur la machine distante. On peut aussi utiliser +<code>TAB</code> pour voir alors la liste des fichiers accessibles dans le +<i>minibuffer</i>, la complétion fonctionnant comme en local. +</p> + +<p> +Une fois un fichier ouvert, il est manipulé classiquement dans le +<i>buffer</i> et seule la sauvegarde du fichier nécessite la connexion. +</p> +</div> +</div> + +<div id="outline-container-orgd2d81fe" class="outline-3"> +<h3 id="orgd2d81fe"><span class="section-number-3">4.9</span> Recherche</h3> +<div class="outline-text-3" id="text-4-9"> +<table id="orgf167c7a" border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-s</code></td> +<td class="org-left">Recherche une chaîne dans le <i>buffer</i> vers le <b>bas</b></td> +</tr> + +<tr> +<td class="org-left"><code>C-r</code></td> +<td class="org-left">Recherche une chaîne dans le <i>buffer</i> vers le <b>haut</b></td> +</tr> + +<tr> +<td class="org-left"><code>C-S-s C-w</code></td> +<td class="org-left">Complète la chaîne à chercher avec le mot courant</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left"><code>C-M-s</code></td> +<td class="org-left">Recherche une expression régulière vers le <b>bas</b></td> +</tr> + +<tr> +<td class="org-left"><code>C-M-r</code></td> +<td class="org-left">Recherche une expression régulière vers le <b>haut</b></td> +</tr> +</tbody> +</table> +<p> +Une fois une occurrence trouvée, on peut poursuivre la recherche vers +le bas ou vers le haut, en faisant respectivement <code>C-s</code> ou +<code>C-r</code>. Puisqu'on utilise pas le mode standard de recherche d'Emacs, mais +le mode <code>swiper</code>, il est possible de naviguer dans le <i>minibuffer</i> avec +les flèches pour se déplacer d'une occurrence à l'autre. +</p> + +<p> +Quand la recherche est terminée, +</p> +<ul class="org-ul"> +<li>soit on utilise <code>C-g</code> pour revenir où on était quand on a commencé +la recherche,</li> +<li>soit <code>RET</code> pour continuer l'édition du <i>buffer</i> à la position de +l'occurrence.</li> +</ul> + +<p> +Une autre particularité intéressante de <code>swiper</code> est son utilisation de +<code>SPC</code> qui sert de joker pendant les saisies. Voir par exemple, la +figure <a href="#org52db774">5</a>, où on a lancé une recherche puis tapé +<code>y t x(</code> dans le <i>minibuffer</i>, les lignes correspondantes y sont +affichées. On peut parcourir cette liste à l'aide des flèches du +clavier, le <i>buffer</i> de recherche suit l'occurrence sélectionnée. +</p> + + +<div id="org52db774" class="figure"> +<p><img src="emacs-swiper-search.png" alt="emacs-swiper-search.png" /> +</p> +<p><span class="figure-number">Figure 5 : </span>Exemple de recherche avec `swiper`</p> +</div> + +<p> +Attention si on utilise <code>C-S-s C-w</code>, on n'utilise pas <code>swiper</code> pour la +recherche, mais l'outil recherche incrémentale classique d'Emacs. Il +est possible d'ajouter des mots à la recherche en faisant à nouveau +<code>C-w</code>. +</p> +</div> +</div> + +<div id="outline-container-org27c2fc0" class="outline-3"> +<h3 id="org27c2fc0"><span class="section-number-3">4.10</span> Remplacement de texte</h3> +<div class="outline-text-3" id="text-4-10"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-%</code></td> +<td class="org-left">Remplacer les occurrences d'une chaîne par une autre</td> +</tr> +</tbody> +</table> +<p> +La recherche des chaînes à remplacer se déroule depuis la position du +curseur vers la fin du <i>buffer</i>. +</p> + +<p> +Il s'agit d'un mode <b>interactif</b>. Pour chaque occurrence de la chaîne à +remplacer, Emacs attend une validation. +</p> +<ul class="org-ul"> +<li>Pour remplacer l'occurrence trouvée, taper <code>y</code>.</li> +<li>Pour ne pas la remplacer, presser <code>n</code>.</li> +<li>Pour interrompre le processus de remplacement, taper <code>q</code> ou <code>C-g</code>.</li> +<li>Pour tout remplacer, jusqu'à la fin du <i>buffer</i>, taper <code>!</code>.</li> +</ul> +<p> +Noter que le mode de remplacement est <i>intelligent</i> au sens où il +respecte la case si possible. +</p> + +<p> +Si on demande le remplacement de <code>foo</code> par <code>bar</code> on obtient les résultats +suivants. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Chaîne initiale</th> +<th scope="col" class="org-left">Résultat</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>foobar</code></td> +<td class="org-left"><code>barbar</code></td> +</tr> + +<tr> +<td class="org-left"><code>barfooFoobar</code></td> +<td class="org-left"><code>barbarBarbar</code></td> +</tr> + +<tr> +<td class="org-left"><code>Foobar</code></td> +<td class="org-left"><code>Barbar</code></td> +</tr> + +<tr> +<td class="org-left"><code>FOO</code></td> +<td class="org-left"><code>BAR</code></td> +</tr> +</tbody> +</table> +</div> +</div> + +<div id="outline-container-org3ea1574" class="outline-3"> +<h3 id="org3ea1574"><span class="section-number-3">4.11</span> Répétitions et macros</h3> +<div class="outline-text-3" id="text-4-11"> +<p> +Il existe de nombreuses façons d'automatiser des actions dans Emacs. +Les deux plus simples consistent à répéter une action (<b>macro</b> ou autre) +ou à créer une macro <i>interactivement</i>. +</p> + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-u</code> <i>nombre</i> <i>commande</i></td> +<td class="org-left">Exécute la commande <i>commande</i>, <i>nombre</i> de fois</td> +</tr> +</tbody> +</table> +<p> +Par exemple, si on tape <code>C-u 10 C-n</code>, on se déplace de 10 lignes vers le +bas dans le fichier. +</p> + +<p> +L'autre manière basique est la création et l'utilisation de macros +<i>clavier</i>. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-(</code></td> +<td class="org-left">Débute la création d'une macro</td> +</tr> + +<tr> +<td class="org-left"><code>f3</code></td> +<td class="org-left">Débute la création d'une macro ou insère le compteur</td> +</tr> + +<tr> +<td class="org-left"><code>C-)</code></td> +<td class="org-left">Termine la définition d'une macro</td> +</tr> + +<tr> +<td class="org-left"><code>C-x e</code> ou <code>f4</code></td> +<td class="org-left">Exécute la dernière macro créée</td> +</tr> +</tbody> +</table> +<p> +Il est donc très facile de créer et d'exécuter une macro clavier avec +Emacs. Mais on peut aller facilement un peu plus loin en utilisant les +commandes suivantes. On rappelle que pour exécuter la commande <i>cmd</i>, il +suffit de taper <code>M-x cmd</code>. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Commande</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>insert-kbd-macro</code></td> +<td class="org-left">Écrit le code (<code>ELisp</code>) de la dernière macro définie</td> +</tr> + +<tr> +<td class="org-left"><code>name-last-kbd-macro</code></td> +<td class="org-left">Donne un nom à la dernière macro définie</td> +</tr> +</tbody> +</table> +</div> +</div> + +<div id="outline-container-orga5132b8" class="outline-3"> +<h3 id="orga5132b8"><span class="section-number-3">4.12</span> Complétion</h3> +<div class="outline-text-3" id="text-4-12"> +<p> +Emacs propose de nombreux moyens de compléter un mot afin d'accélérer +la saisie de texte. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-/</code></td> +<td class="org-left">Complète le mot ou propose une nouvelle complétion</td> +</tr> +</tbody> +</table> + +<p> +Les complétions proposées sont les mots qui composent les <i>buffers</i> +actifs. Cela n'est pas toujours suffisant mais permet d'éviter +certaines erreurs de frappe. +</p> + +<p> +En fait, cette configuration utilise <code>company</code> qui est un moteur de +complétion plus souple et configurable. Le fonctionnement de <code>company</code> +est très intuitif. En effet pendant la saisie de texte, si des +complétion sont possibles, une fenêtre <i>pop-up</i> qui les propose apparaît +(voir figure <a href="#orgbfeea68">6</a>). +</p> + +<div id="orgbfeea68" class="figure"> +<p><img src="emacs-company.png" alt="emacs-company.png" /> +</p> +<p><span class="figure-number">Figure 6 : </span><i>Pop-up</i> présentant les complétions possibles</p> +</div> + +<p> +Pour compléter le texte, plusieurs possibilités sont offertes : +</p> +<ul class="org-ul"> +<li>l'utilisation de la touche <code>TAB</code> complète le mot au maximum +(s'arrêtant après complétion de la partie commune à toutes les +alternatives). On peut alors continuer la saisie en entrant le +caractère suivant, et ainsi de suite.</li> +<li>Une autre possibilité consiste à se déplacer dans le menu <i>pop-up</i> +pour choisir une entrée.</li> +</ul> +<p> +Si l'entrée n'est pas dans la liste, le <i>pop-up</i> se ferme +automatiquement lors de la saisie. +</p> + +<p> +Enfin, il est possible de quitter le <i>pop-up</i> en pressant <code>C-g</code> ou en +déplaçant le curseur vers la droite ou vers la gauche. +</p> + +<p> +À noter qu'avec cette configuration, la complétion peut-être beaucoup +plus évoluée selon le mode majeur actif. Par exemple, les modes de +programmation proposent une complétion contextuelle. En mode <code>LaTeX</code>, +les commandes LaTeX (qui commencent par un <code>\</code>) sont proposées (même si +elles ne sont pas présentes dans les <i>buffers</i> ouverts). De même, en <code>C++</code> +ou en <code>Python</code> par exemple, la complétion est contextuelle (les types et +variables accessibles, les fonctions ou fonctions membres sont +proposées). Dans certains cas, la complétion donne accès à un mode de +remplissage interactif des arguments de fonctions. On passe alors d'un +arguments au suivant en tapant <code>TAB</code> et <code>S-TAB</code> pour revenir en arrière. +</p> +</div> +</div> +</div> + +<div id="outline-container-org930a4aa" class="outline-2"> +<h2 id="org930a4aa"><span class="section-number-2">5</span> Modes utiles</h2> +<div class="outline-text-2" id="text-5"> +<p> +On présente ici quelques modes particulièrement utiles. La liste +compète des modes utilisés dans cette configuration (ainsi que +quelques raccourcis basiques est accessible dans le fichier +<a href="Configuration.html">Configuration.org</a>. +</p> + +<p> +De plus, on ne décrit que brièvement les modes en question, une +description complète étant hors de portée d'un tel document et +deviendrait inévitablement obsolète. +</p> +</div> + +<div id="outline-container-orge6aee40" class="outline-3"> +<h3 id="orge6aee40"><span class="section-number-3">5.1</span> Modes utilitaires</h3> +<div class="outline-text-3" id="text-5-1"> +</div> +<div id="outline-container-org7f6aa21" class="outline-4"> +<h4 id="org7f6aa21"><span class="section-number-4">5.1.1</span> Flyspell</h4> +<div class="outline-text-4" id="text-5-1-1"> +<p> +Il s'agit d'un mode mineur qui vérifie l'orthographe (uniquement +lexicale) dans un document à la volée. +</p> + +<p> +Il est actif dans cette configuration pour certains modes. Par défaut +on a choisi le dictionnaire <i>american</i> qui est finalement souvent le +plus utile. +</p> + +<p> +On peut cependant facilement choisir localement le dictionnaire dans +un <i>buffer</i> en utilisant la commande <code>M-x ispell-change-dictionary</code> et en +choisissant le dictionnaire adéquate ou en définissant une variable +locale dans le <i>buffer</i> pour que ce changement intervienne à chaque fois +que le fichier sera ouvert. Par exemple en LaTeX, on pourra mettre le +bloc suivant en fin de fichier. +</p> +<div class="org-src-container"> +<pre class="src src-emacs-lisp">% Local Variables: +% ispell-local-dictionary: <span class="org-string">"francais"</span> +% End: +</pre> +</div> +<p> +Pour désactiver le <code>flyspell</code> dans un fichier, on peut utiliser la +configuration locale. Par exemple en <code>Python</code>, on écrit +</p> +<div class="org-src-container"> +<pre class="src src-python"><span class="org-comment-delimiter"># </span><span class="org-comment">Local Variables:</span> +<span class="org-comment-delimiter"># </span><span class="org-comment">eval: (flyspell-mode -1)</span> +<span class="org-comment-delimiter"># </span><span class="org-comment">End:</span> +</pre> +</div> +</div> +</div> + +<div id="outline-container-org40085ae" class="outline-4"> +<h4 id="org40085ae"><span class="section-number-4">5.1.2</span> FlyCheck</h4> +<div class="outline-text-4" id="text-5-1-2"> +<p> +Ce mode mineur permet de vérifier la validité du code à la volée. Il +fonctionne pour les langages LaTeX, <code>C++</code>, <code>Python</code>, les scripts +<code>shell</code>,… +</p> + +<p> +Généralement, ce mode n'est pas très consommateur de CPU car la +compilation est très légère. Il est cependant possible de le déactiver +localement dans un <i>buffer</i>, soit en utilisant la commande +<code>M-x flycheck-mode</code>, soit en définissant une variable locale. En +<code>C++</code>, on peut par exemple utiliser +</p> +<div class="org-src-container"> +<pre class="src src-C++"><span class="org-comment-delimiter">// </span><span class="org-comment">Local Variables:</span> +<span class="org-comment-delimiter">// </span><span class="org-comment">eval: (flycheck-mode -1)</span> +<span class="org-comment-delimiter">// </span><span class="org-comment">End:</span> +</pre> +</div> +</div> +</div> +</div> + +<div id="outline-container-org5baee2c" class="outline-3"> +<h3 id="org5baee2c"><span class="section-number-3">5.2</span> Interfaces avec <code>git</code></h3> +<div class="outline-text-3" id="text-5-2"> +<p> +Emacs possède différentes interfaces à <code>git</code>. Les deux plus abouties +sont probablement <code>magit</code> et <code>GitGutter</code>. Ces deux modes sont +complémentaires, <code>GitGutter</code> permet d'afficher dans le <i>buffer</i> +quelles lignes ont été modifiées et de voir rapidement ce qu'on a +changé. Quant à <code>magit</code>, c'est une excellent interface à <code>git</code>. En fait le +mode <code>magit</code> à lui seul justifie l'utilisation d'Emacs. +</p> +</div> + +<div id="outline-container-orgd0cdab8" class="outline-4"> +<h4 id="orgd0cdab8"><span class="section-number-4">5.2.1</span> GitGutter</h4> +<div class="outline-text-4" id="text-5-2-1"> +<p> +Le principe de <code>GitGutter</code> est d'afficher (en marge de gauche) les +modifications faites au fichier. La mise à jour (pour ne pas +surcharger l'outil est effectuée à la sauvegarde du fichier). +</p> + +<p> +Cette configuration interface <code>GitGutter</code> avec <code>Hydra</code> ce qui permet de +simplifier l'utilisation des raccourcis clavier. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-g M-g</code></td> +<td class="org-left">Ouvre le <i>pop-up</i> <code>Hydra</code> pour <code>GitGutter</code></td> +</tr> +</tbody> +</table> + +<p> +Une fois qu'on a tapé <code>M-g M-g</code> une fenêtre <i>pop-up</i> apparaît et on peut +alors suivre les indications pour effectuer les commandes de révision +de la version. C'est-à-dire, qu'on peut parcourir les changements, +afficher les changements, ou annuler des changements. +</p> + +<p> +On peut également <b>ajouter</b> des zones particulières pour préparer un +commit <code>git</code> mais pour ce genre d'opérations, on préférera utiliser +<code>Magit</code>. +</p> +</div> +</div> + +<div id="outline-container-orgd3b7b3e" class="outline-4"> +<h4 id="orgd3b7b3e"><span class="section-number-4">5.2.2</span> Magit</h4> +<div class="outline-text-4" id="text-5-2-2"> +<p> +<code>Magit</code> est une superbe interface à <code>git</code> pour Emacs. Encore une fois, il +ne serait pas raisonnable de tenter de fournir une documentation +complète du mode dans ce tutoriel. On se contentera de décrire +simplement quelques éléments de son fonctionnement. Pour une +description plus précise, on se référera au site <a href="https://magit.vc/">web</a> de <code>Magit</code>. Enfin +il est important de préciser que l'aide en ligne de <code>Magit</code> est +simplement excellente. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x g</code></td> +<td class="org-left">Lance git dans un autre <i>buffer</i></td> +</tr> +</tbody> +</table> +<p> +Le <i>buffer</i> <code>Magit</code> (obtenu en tapant donc <code>C-x g</code>) n'est pas un <i>buffer</i> +d'édition, mais un <i>buffer</i> spécial. Dans ce <i>buffer</i>, les touches du +clavier sont directement surchargées. On a ainsi accès à des nouveaux +raccourcis très simples. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci <code>Magit</code></th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>h</code></td> +<td class="org-left">Affiche l'aide en ligne</td> +</tr> + +<tr> +<td class="org-left"><code>TAB</code></td> +<td class="org-left">(dé)plie la zone du curseur</td> +</tr> + +<tr> +<td class="org-left"><code>RET</code></td> +<td class="org-left">Affiche la zone du curseur</td> +</tr> + +<tr> +<td class="org-left"><code>g</code></td> +<td class="org-left">Rafraîchit le <i>buffer</i></td> +</tr> + +<tr> +<td class="org-left"><code>s</code></td> +<td class="org-left"><i>Stage</i> des modifications (<code>git add</code>)</td> +</tr> + +<tr> +<td class="org-left"><code>u</code></td> +<td class="org-left"><i>Unstage</i> des modifications</td> +</tr> + +<tr> +<td class="org-left"><code>c</code></td> +<td class="org-left">Démarre un <code>git commit</code> (propose plusieures options)</td> +</tr> + +<tr> +<td class="org-left"><code>F</code></td> +<td class="org-left">Lance un <code>git pull</code> (propose plusieures options)</td> +</tr> + +<tr> +<td class="org-left"><code>p</code></td> +<td class="org-left">Lance un <code>git push</code> (peut proposer plusieures options)</td> +</tr> + +<tr> +<td class="org-left"><code>k</code></td> +<td class="org-left">Annule des modifications ou efface un fichier non suivi</td> +</tr> +</tbody> +</table> +<p> +On insiste sur le fait qu'on a listé ici que quelques raccourcis des +plus utiles. L'aide en ligne, accessible donnée par <code>h</code> est très +complète. Il est par exemple très facile de choisir quelques lignes à +ajouter (<i>stager</i>) en sélectionnant une zone. +</p> +</div> +</div> +</div> + +<div id="outline-container-orgd378205" class="outline-3"> +<h3 id="orgd378205"><span class="section-number-3">5.3</span> Rédaction de documents LaTeX</h3> +<div class="outline-text-3" id="text-5-3"> +<p> +La rédaction d'un document LaTeX s'apparente plus à de la +programmation qu'à de l'édition simple de fichiers. De nombreux outils +existent maintenant pour éditer des documents LaTeX, mais il est +également possible de bénéficier de la puissance d'Emacs et de +nombreuses années d'expériences qui ont permis le développement de +modes qui permettent une excellente intégration Emacs/LaTeX. +</p> + +<p> +Avant de décrire les principaux modes, rappelons que cette +configuration utilise <code>FlyCheck</code> de sorte que les erreurs de syntaxe +LaTeX sont indiquées à la saisie, ce qui facilite grandement +l'écriture. Cette configuration propose aussi le mode <code>Preview-LaTeX</code> +qui ne sera pas abordé dans ce tutoriel. +</p> +</div> + +<div id="outline-container-orga6ed013" class="outline-4"> +<h4 id="orga6ed013"><span class="section-number-4">5.3.1</span> AUCTeX</h4> +<div class="outline-text-4" id="text-5-3-1"> +<p> +<a href="https://www.gnu.org/software/auctex/?lang=fr">AUCTeX</a> est un ensemble de macros Emacs qui permet d'éditer facilement +(et efficacement) des fichiers LaTeX. C'est le mode qui offre la +plupart des fonctionnalités utiles à l'édition LaTeX. +</p> + +<p> +Nous rappelons ici quelques raccourcis de base. Pour aller accéder à +la documentation complète d'<code>AUCTeX</code>, on peut parcourir l'aide intégrée +d'Emacs en tapant <code>C-h i</code> et en consultant la rubrique qui lui est +associée. +</p> +</div> + +<ol class="org-ol"> +<li><a id="org21364f6"></a>Typographie<br /> +<div class="outline-text-5" id="text-5-3-1-1"> +<p> +Pour les changements de styles typographiques, tous les raccourcis +débutent par la séquence <code>C-c C-f</code>. Le changement de fonte dépend du +contexte de saisie~: texte ou mathématique. Noter que si on saisit +<code>C-c C-f</code> suivit de n'importe quel caractère Emacs affiche la liste des +possibilités. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourcis</th> +<th scope="col" class="org-left">Style</th> +<th scope="col" class="org-left">Comm. (texte)</th> +<th scope="col" class="org-left">Style</th> +<th scope="col" class="org-left">Comm. (math)</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-f C-a</code></td> +<td class="org-left">--</td> +<td class="org-left">--</td> +<td class="org-left">calligraphique</td> +<td class="org-left"><code>\mathcal</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-b</code></td> +<td class="org-left">gras</td> +<td class="org-left"><code>\textbf</code></td> +<td class="org-left">gras</td> +<td class="org-left"><code>\mathbf</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-c</code></td> +<td class="org-left">petites capitales</td> +<td class="org-left"><code>\textsc</code></td> +<td class="org-left">--</td> +<td class="org-left">--</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-e</code></td> +<td class="org-left">emphase</td> +<td class="org-left"><code>\emph</code></td> +<td class="org-left">emphase</td> +<td class="org-left"><code>\emph</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-f</code></td> +<td class="org-left">sans serif</td> +<td class="org-left"><code>\textsf</code></td> +<td class="org-left">sans serif</td> +<td class="org-left"><code>\mathsf</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f TAB</code></td> +<td class="org-left">italique</td> +<td class="org-left"><code>\textit</code></td> +<td class="org-left">italique</td> +<td class="org-left"><code>\mathit</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-n</code></td> +<td class="org-left">normal</td> +<td class="org-left"><code>\textnormal</code></td> +<td class="org-left">normal</td> +<td class="org-left"><code>\mathnormal</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-r</code></td> +<td class="org-left">roman</td> +<td class="org-left"><code>\textrm</code></td> +<td class="org-left">roman</td> +<td class="org-left"><code>\mathrm</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-s</code></td> +<td class="org-left">penché</td> +<td class="org-left"><code>\textsl</code></td> +<td class="org-left">symbole</td> +<td class="org-left"><code>\mathbb</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-t</code></td> +<td class="org-left">machine à écrire</td> +<td class="org-left"><code>\texttt</code></td> +<td class="org-left">machine à écrire</td> +<td class="org-left"><code>\mathtt</code></td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-d</code></td> +<td class="org-left">supprime le style</td> +<td class="org-left">--</td> +<td class="org-left">supprime le style</td> +<td class="org-left">--</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-f C-k</code></td> +<td class="org-left">--</td> +<td class="org-left">--</td> +<td class="org-left">eufrak</td> +<td class="org-left"><code>\mathfrak</code></td> +</tr> +</tbody> +</table> +<p> +Noter que si une région est sélectionnée, la commande est appliquée à +la région, sinon, le curseur est positionné entre les accolades. +</p> + +<p> +Enfin, si on préfixe les raccourcis précédents par <code>C-u</code> alors, le style +est remplacé par le style demandé. Par exemple, si on avait le texte +suivant +</p> +<div class="org-src-container"> +<pre class="src src-latex"><span class="org-font-latex-sedate"><span class="org-keyword">\emph</span></span>{<span class="org-font-latex-italic">Un texte</span>} +</pre> +</div> +<p> +si on utilise la commande <code>C-u C-c C-f C-b</code>, il sera transformé en +</p> +<div class="org-src-container"> +<pre class="src src-latex"><span class="org-font-latex-sedate"><span class="org-keyword">\textbf</span></span>{<span class="org-font-latex-bold">Un texte</span>} +</pre> +</div> +</div> +</li> + +<li><a id="org273cd7a"></a>Sections<br /> +<div class="outline-text-5" id="text-5-3-1-2"> +<p> +AUCTeX propose moyen de créer les éléments structurants du document. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-s</code></td> +<td class="org-left">Crée une section</td> +</tr> +</tbody> +</table> +<p> +Une fois ce raccourci utilisé, une interaction dans le <i>minibuffer</i> +permet d'entrer son titre et éventuellement le label à lui attribuer. +Comme toujours en LaTeX, il est recommandé d'indiquer des noms +explicites. On préférera utiliser le caractère <code>-</code> plutôt que <code>_</code> pour +éventuellement séparer les termes qui composent le label. +</p> +</div> +</li> + +<li><a id="orgb485cdc"></a>Environnements<br /> +<div class="outline-text-5" id="text-5-3-1-3"> +<p> +De la même manière, on écrit des environnements simplement en +utilisant des raccourcis. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-e</code></td> +<td class="org-left">Ajoute un environnement</td> +</tr> +</tbody> +</table> +<p> +Ici encore, quand le raccourci a été utilisé, les environnements +possibles sont proposés dans le <i>minibuffer</i> et éventuellement, on +propose de saisir un label. +</p> + +<p> +Comme dans le cas des changements typographiques, si une région était +sélectionnée, les balises <code>begin</code> et <code>end</code> entourent la zone. Sinon, le +curseur est placé entre les balises. +</p> +</div> +</li> + +<li><a id="orge51e1bd"></a>Compilation et visualisation<br /> +<div class="outline-text-5" id="text-5-3-1-4"> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-c</code> ou <code>C-c C-z</code></td> +<td class="org-left">Accède à une commande LaTeX</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-k</code></td> +<td class="org-left">Tue le processus LaTeX actif</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-l</code></td> +<td class="org-left">Affiche la sortie de compilation</td> +</tr> +</tbody> +</table> +<p> +En fait, lorsqu'on invoque <code>C-c C-c</code> ou <code>C-c C-z</code>, la liste des commandes +proposées comprend la compilation du document, la compilation de la +bibliographie, la visualisation du document produit,… Par défaut +<code>AUCTeX</code> propose l'action qu'il juge naturelle. Par exemple, si le +document n'a pas besoin d'être recompilé il proposera sa +visualisation. +</p> + +<p> +Cette configuration utilise <code>pdf-tools</code> pour visualiser les documents +produits. Cela a plusieurs avantages, les <code>pdf</code> sont affichés +directement dans Emacs (dans une nouvelle <b>fenêtre</b>, mais on peut +évidemment utiliser un autre <b>cadre</b>. De plus, on utilise <code>synctex</code> qui +permet de synchroniser le source <code>tex</code> et le <code>pdf</code> produit. Ainsi si on +utilise <code>C-mouse1</code> ou le double-clic (<code>mouse1 mouse1</code>) sur une zone du +document <code>pdf</code> produit, Emacs positionne le curseur sur la partie du +source LaTeX associé. De même, on peut visualiser la zone du document +<code>pdf</code> correspondant au curseur dans les sources en utilisant le +raccourci <code>C-c C-g</code>. On rappelle dans le tableau suivant quelques +raccourcis utiles pour la visualisation. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left">dans les sources</td> +<td class="org-left"> </td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-a</code></td> +<td class="org-left">Génère et affiche le <code>pdf</code> (enchaîne toutes les commandes)</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-v</code></td> +<td class="org-left">Affiche le <code>pdf</code> s'il existe</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-g</code></td> +<td class="org-left">Synchronise la vue du <code>pdf</code> avec les sources au curseur</td> +</tr> +</tbody> +<tbody> +<tr> +<td class="org-left">dans le <code>pdf</code></td> +<td class="org-left"> </td> +</tr> + +<tr> +<td class="org-left"><code>C-mouse1</code> (ou double clic)</td> +<td class="org-left">Positionne le curseur dans les sources correspondantes</td> +</tr> + +<tr> +<td class="org-left"><code>PageUp</code></td> +<td class="org-left">Aller à la page précédente</td> +</tr> + +<tr> +<td class="org-left"><code>PageDown</code></td> +<td class="org-left">Aller à la page suivante</td> +</tr> + +<tr> +<td class="org-left"><code>SPC</code></td> +<td class="org-left">Avance dans le document</td> +</tr> + +<tr> +<td class="org-left"><code>DEL</code></td> +<td class="org-left">Recule dans le document</td> +</tr> + +<tr> +<td class="org-left"><code>B</code></td> +<td class="org-left">Retourne en arrière (page précédemment visité)</td> +</tr> + +<tr> +<td class="org-left"><code>N</code></td> +<td class="org-left">Retourne en avant (inverse de <code>B</code>)</td> +</tr> +</tbody> +</table> +</div> +</li> +</ol> +</div> + +<div id="outline-container-orgf4918cd" class="outline-4"> +<h4 id="orgf4918cd"><span class="section-number-4">5.3.2</span> RefTeX</h4> +<div class="outline-text-4" id="text-5-3-2"> +<p> +<code>AUCTeX</code> est distribué avec <code>RefTeX</code> qui est un mode mineur qui permet une +gestion simplifiée des références. Que ce soient des références à des +équations, des figures, des tables ou des citations +bibliographiques. <code>RefTeX</code> analyse le fichier source (ou les fichiers si +nécessaire) pour déterminer les références possibles. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c (</code></td> +<td class="org-left">Ajoute un label</td> +</tr> + +<tr> +<td class="org-left"><code>C-c )</code></td> +<td class="org-left">Crée une référence</td> +</tr> + +<tr> +<td class="org-left"><code>C-c [</code></td> +<td class="org-left">Insère une référence bibliographique</td> +</tr> + +<tr> +<td class="org-left"><code>C-c /</code></td> +<td class="org-left">Ajoute une référence à un index ou un glossaire</td> +</tr> +</tbody> +</table> +<p> +Une fois la commande activée, l'interaction est classique et se +déroule soit dans le <i>minibuffer</i> soit dans un <i>buffer</i> annexe. +</p> +</div> +</div> +</div> + +<div id="outline-container-org2ac1179" class="outline-3"> +<h3 id="org2ac1179"><span class="section-number-3">5.4</span> Programmation</h3> +<div class="outline-text-3" id="text-5-4"> +<p> +On l'a déjà dit, cette configuration d'Emacs propose par défaut +l'utilisation de <code>flycheck</code> qui active une compilation (légère) à la +volée du <i>buffer</i>, ce qui aide à rapidement trouver les erreurs de +syntaxe. +</p> + +<p> +La plupart des modes de programmation nécessitent l'installation +d'outils annexes pour fonctionner. On se reportera donc au fichier +<a href="Installation.html">Installation.org</a> pour des détails à ce sujet. +</p> +</div> + +<div id="outline-container-orgd602f40" class="outline-4"> +<h4 id="orgd602f40"><span class="section-number-4">5.4.1</span> Python</h4> +<div class="outline-text-4" id="text-5-4-1"> +<p> +On utilise le paquet <code>jedi</code> qui gère la complétion dans Emacs pour +<code>Python</code>. On se reportera donc à la documentation en ligne +<a href="http://tkf.github.io/emacs-jedi/latest/">http://tkf.github.io/emacs-jedi/latest/</a>, pour plus d'informations. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-c</code></td> +<td class="org-left">Exécute le script</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-z</code></td> +<td class="org-left">Passe du <i>buffer</i> du code à la console d'exécution ou inversement</td> +</tr> + +<tr> +<td class="org-left"><code>S-TAB</code> ou <code>backtab</code></td> +<td class="org-left">Supprime une indentation</td> +</tr> +</tbody> +</table> + +<p> +Il existe également, une interface à <code>Jupyter</code>, mais cette dernière ne +fait pas partie de cette configuration. +</p> + +<p> +Enfin, si on exécute les scripts dans Emacs <code>C-c C-c</code>, le terminal +occupe un <i>buffer</i> interactif (c'est-à-dire qu'on peut y entrer des +commandes comme dans n'importe quel terminal), où il est possible, +comme dans les <i>buffers</i> de compilation de cliquer sur les lignes +d'erreur pour positionner le curseur dans la ligne correspondante des +sources. +</p> +</div> +</div> + +<div id="outline-container-orgb2d0921" class="outline-4"> +<h4 id="orgb2d0921"><span class="section-number-4">5.4.2</span> C++</h4> +<div class="outline-text-4" id="text-5-4-2"> +<p> +Pour la complétion et la correction syntaxique à la volée, on utilise +le paquet <code>irony</code>. Il est nécessaire pour cette fonctionnalité de +configurer correctement le système et en particulier de disposer d'une +version adaptée du compilateur <code>clang</code> (voir les consignes +d'installation). +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-c</code></td> +<td class="org-left">Affiche l'invite de compilation dans le <i>minibuffer</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-c `</code></td> +<td class="org-left">Positionne le curseur à la première erreur de compilation</td> +</tr> +</tbody> +</table> + +<p> +Le <i>buffer</i> de compilation est interactif : si on clique sur un message +d'erreur, les sources sont ouvertes et le curseur est positionné à +l'endroit correspondant. Il est donc très pratique de compiler dans +Emacs plutôt que dans un terminal. +</p> + +<p> +On notera également que si on laisse le curseur positionné sur un mot +du code source, le <i>minibuffer</i> affiche des informations concernant le +type ou l'objet en question. +</p> +</div> +</div> + +<div id="outline-container-org09db0b4" class="outline-4"> +<h4 id="org09db0b4"><span class="section-number-4">5.4.3</span> Tags</h4> +<div class="outline-text-4" id="text-5-4-3"> +<p> +Les <i>tags</i> (ou étiquettes en français) sont utilisés pour parcourir +facilement les sources d'un code. Cette installation est configurée +pour fonctionner avec <code>GNU Global</code> (voir +<a href="http://www.gnu.org/software/global/">http://www.gnu.org/software/global/</a>) qui indexe et exploite des bases +de <i>tags</i>. Une telle base est une base de données qui répertorie des +informations sur les sources du code : quel est le type d'une +variable, où est elle déclarée ou utilisée ? Quel est le fichier qui +définit une classe, un type, etc… L'utilisation d'une telle base +permet donc de facilement accéder à de nombreuses informations sans +avoir à faire de recherches par ailleurs. +</p> + +<p> +Comme cette configuration utilise les <code>ggtags</code> et repose donc sur le +logiciel tiers <code>GNU Global</code>, il convient de l'installer. Pour cela, on +se référera au fichier <a href="Installation.html">Installation.org</a>. +</p> + +<p> +Avant de rappeler quelques raccourcis usuels de ce mode, rappelons +qu'à la première utilisation des <code>ggtags</code> pour un code, la base sera +créée. +</p> + +<p> +Enfin précisons que les <i>tags</i> ne sont qu'une base de données +d'occurrences de textes et même si elle est plutôt efficace, il est +parfois possible que les références ne correspondent pas au même +objet. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-.</code></td> +<td class="org-left">Cherche un <i>tag</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-M-.</code></td> +<td class="org-left">Cherche les <i>tags</i> qui correspondent à une expression régulière</td> +</tr> + +<tr> +<td class="org-left"><code>M-,</code></td> +<td class="org-left">Continue à chercher un <i>tag</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-c M-%</code></td> +<td class="org-left">Remplace un <i>tag</i> par une nouvelle chaîne dans tout le code</td> +</tr> + +<tr> +<td class="org-left"><code>C-c M-g</code></td> +<td class="org-left">Lance un <code>grep</code> dans la base des <i>tags</i></td> +</tr> + +<tr> +<td class="org-left"><code>C-c M-f</code></td> +<td class="org-left">Ouvre un fichier référencé dans la base des <i>tags</i></td> +</tr> +</tbody> +</table> +<p> +Dans ce contexte, on rappelle que pour revenir dans le <i>buffer</i> il est +conseillé d'utiliser les raccourcis de navigation classiques : +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x left</code></td> +<td class="org-left">Retourne au <i>buffer</i> précédent</td> +</tr> + +<tr> +<td class="org-left"><code>C-x right</code></td> +<td class="org-left">Retourne au <i>buffer</i> suivant</td> +</tr> +</tbody> +</table> +</div> +</div> + +<div id="outline-container-org44ba3b7" class="outline-4"> +<h4 id="org44ba3b7"><span class="section-number-4">5.4.4</span> YASnippet</h4> +<div class="outline-text-4" id="text-5-4-4"> +<p> +Il n'est pas envisageable d'écrire un tutoriel Emacs sans évoquer les +<code>snippets</code>. Commençons donc par rappeler de quoi il s'agit. Les <code>snippets</code> +(littéralement <b>fragments</b> en français) sont des patrons (<i>template</i>) de +code qui évitent de taper toujours et encore des motifs de code qui se +répètent. Emacs offre depuis très longtemps des <code>snippets</code> qui +permettent souvent de n'écrire que les zones du code faisant +sens. <code>YASnippet</code> s'est imposé comme la version la plus aboutie et est +maintenant la plus utilisée. +</p> + +<p> +Il faut bien intégrer le fait que les <code>snippets</code> ne sont pas des +morceaux de code simplement insérés mais de véritables modèles. Quand +on les utilise, Emacs invite l'utilisateur à renseigner certains +champs (en ligne) ce qui permet d'obtenir directement le code +correspondant au patron sans autre modification. +</p> + +<p> +Notons également que <code>YASnippet</code> est livré avec une collection +impressionnante de modèles. Ces patrons sont accessibles selon le +contexte d'édition : les patrons utiles au <code>Python</code>, à la rédaction +LaTeX ou au <code>C++</code>, par exemple ne sont proposés que dans leur mode. Au +vu de leur nombre, il serait impensable d'en faire une quelconque +liste ici, mais on peut en avoir la liste dans le menu <code>YASnippet</code> ou en +tapant la commande <code>M-x yas-describe-tables</code> qui ouvre un buffer +contenant tous les <code>snippets</code> disponibles. +</p> + +<p> +Un autre avantage de <code>YASnippet</code> est qu'il est très facile d'ajouter de +nouveaux modèles, mais nous ne décrivons pas la procédure ici (voir +<a href="http://joaotavora.github.io/yasnippet">http://joaotavora.github.io/yasnippet</a> pour les détails). +</p> + +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-RET</code></td> +<td class="org-left">Développe le modèle</td> +</tr> +</tbody> +</table> +<p> +Dans cette configuration, on a désactivé le raccourci usuel <del><code>TAB</code></del>, qui +pouvait avoir des effets inattendus et désagréables, au profit de +<code>C RET</code>. En effet, l'effet principal de <code>TAB</code> est l'indentation du code, +mais si le <i>mini-mode</i> de <code>YASnippet</code> interceptait un développement de +modèle possible, il prenait la main et remplaçait l'indentation +demandée par une expansion de modèle. Le nouveau raccourci reste +simple et n'interfère plus avec les fonctions usuelles. +</p> + +<p> +On termine cette courte introduction en donnant un exemple +d'utilisation en <code>C++</code>. Si on écrit <code>cls</code> et si on utilise immédiatement +le raccourci <code>C-RET</code>, le modèle (simple) de <b>classe</b> est utilisé. On +obtient alors +</p> +<div class="org-src-container"> +<pre class="src src-C++"><span class="org-keyword">class</span> <span class="org-type">Name</span> +<span class="org-rainbow-delimiters-depth-1">{</span> +<span class="org-keyword">public</span>: + <span class="org-function-name">Name</span><span class="org-rainbow-delimiters-depth-2">()</span>; + <span class="org-keyword">virtual</span> ~<span class="org-function-name">Name</span><span class="org-rainbow-delimiters-depth-2">()</span>; +<span class="org-rainbow-delimiters-depth-1">}</span>; +</pre> +</div> +<p> +Le curseur est alors positionné sur le premier <code>Name</code> qui est en fait +éditable. On est toujours en train d'appliquer le modèle et il suffit +maintenant (sans autre action) d'entrer le nom de la classe. Par +exemple, si on écrit <code>Tableau</code> (une seule fois), on obtient +</p> +<div class="org-src-container"> +<pre class="src src-C++"><span class="org-keyword">class</span> <span class="org-type">Tableau</span> +<span class="org-rainbow-delimiters-depth-1">{</span> +<span class="org-keyword">public</span>: + <span class="org-function-name">Tableau</span><span class="org-rainbow-delimiters-depth-2">()</span>; + <span class="org-keyword">virtual</span> ~<span class="org-function-name">Tableau</span><span class="org-rainbow-delimiters-depth-2">()</span>; +<span class="org-rainbow-delimiters-depth-1">}</span>; +</pre> +</div> +<p> +On n'a modifié qu'un champ pour obtenir ce résultat. <code>TAB</code> permet de +passer au champ suivant s'il y en a d'autres et <code>S-TAB</code> (ou <code>backtab</code>) +permet de revenir à l'édition d'un champ précédent. Pour obtenir ce +résultat, on a simplement pressé la suite de touches suivantes. +</p> +<pre class="example"> +c l s C-RET T a b l e a u +</pre> +<p> +Cet exemple simple illustre bien l'efficacité de l'approche. +</p> +</div> +</div> +</div> +</div> + +<div id="outline-container-org6a3e84f" class="outline-2"> +<h2 id="org6a3e84f"><span class="section-number-2">6</span> Pour aller plus loin</h2> +<div class="outline-text-2" id="text-6"> +</div> +<div id="outline-container-orgc162f55" class="outline-3"> +<h3 id="orgc162f55"><span class="section-number-3">6.1</span> Org-mode</h3> +<div class="outline-text-3" id="text-6-1"> +<p> +Une fois encore, il est inenvisageable de faire un tour complet de ce +mode dans un tel document. On va donc seulement en tracer les grandes +lignes et décrire certaines de ses fonctionnalités. Pour vraiment en +appréhender les possibilités, il faut consulter les multiples +ressources disponibles sur le net, et en particulier des vidéos de +démonstrations. +</p> + +<p> +Initialement, <code>Org-mode</code> est un outil conçu pour la gestion, le suivi et +l'archivage de tâches personnelles. La gestion d'agenda n'en est plus +aujourd'hui qu'un aspect mineur. Son intégration à Emacs est +extrêmement poussée<sup><a id="fnr.1" class="footref" href="#fn.1">1</a></sup> et tire profit de l'interopérabilité des +différents modes d'Emacs. Il bénéficie donc d'une extensibilité assez +spectaculaire. En fait, <code>Org-mode</code> définit en fait un véritable langage +de (méta-)programmation et utilise son propre format de fichier <code>.org</code>. +</p> + +<p> +Même si un document <code>Org-mode</code> est <b>lisible</b> avec n'importe quel éditeur +de texte, de nombreux rendus sont possibles : <code>Markdown</code>, texte (ASCII +ou UTF-8), <code>PDF</code> (générés en LaTeX), <code>HTML</code>, <code>OpenDocument</code>,… On peut +publier des <i>blogs</i>, générer des présentations (<code>Beamer</code> ou autres). Et +<code>Org-mode</code> permet beaucoup d'autres choses encore. +</p> + +<p> +L'une des forces d'<code>Org-mode</code> est la possibilité d'insérer des blocs de +code (dans de nombreux langages) directement dans le +document. <code>Org-mode</code> peut alors les évaluer en les compilant ou en les +exécutant par exemple. Dans un même document, on peut par exemple +utiliser des programmes <code>C++</code> ou <code>Python</code>, des script <code>shell</code>, des commandes +LaTeX, des instructions <code>gnuplot</code>, tracer des graphes ou des diagrammes +avec <code>dot</code>,… <code>Org-mode</code> permet en plus de faire communiquer ces +différents programmes. Dans un document <code>Org-mode</code>, il est possible +d'afficher des images en ligne. On peut aussi créer des tableaux +dynamiques (provenant d'évaluations de blocs de code par exemple) ou +statiques. On peut écrire des formules mathématiques en ligne, c'est à +dire sans définir des zones de code source, en utilisant directement +des formules LaTeX (<code>$(a+b)^2 = a^2+2ab+b^2$</code> est interprété directement +\((a+b)^2 = a^2+2ab+b^2\)),… +</p> + +<p> +Ce document (et ce n'est qu'un exemple <b>très</b> simple) est rédigé en +<code>Org-mode.</code> C'est aussi le cas du fichier de configuration +<a href="Configuration.html">(Configuration.org</a>). Cette pratique est devenue un standard de nos +jours. On préfère écrire une configuration en <code>Org-mode</code> plutôt que +directement en <code>Elisp</code>. Cela donne une véritable structure au document +et donc, en améliore beaucoup la lisibilité. Au delà, on peut même +exporter le contenu (en <code>HTML</code> par exemple) pour obtenir une véritable +documentation de la configuration. Notons aussi que <code>Gitlab</code> et <code>Github</code> +affichent raisonnablement le contenu des fichiers <code>.org</code> (sans toute +fois interpréter les zones de code ou les équations LaTeX). C'est +commode pour partager une configuration. +</p> + +<p> +Dans le cas d'un fichier de configuration, ces blocs sont +principalement des morceaux de codes <code>ELisp</code> dont l'évaluation modifie +le comportement d'Emacs. Mais, en général, il est aussi possible de +récupérer le résultat de l'exécution et de l'insérer automatiquement +dans le document. De ce fait, le document est extrêmement +dynamique. La rédaction de documentations ou de tutoriels par exemple +est donc grandement facilité, puisqu'Emacs vérifie par l'évaluation du +document <code>Org-mode</code> que tous les morceaux de code sont valides et met à +jour les résultats. +</p> + +<p> +Par certains aspects, <code>Org-mode</code> est similaire à certains langages de +description de contenus comme par exemple <code>Markdown</code>, puisqu'il est très +simple de définir des hiérarchies de sections, des listes, des +hyperliens, de créer des tableaux,… +</p> + +<p> +Par exemple pour créer une section de niveau \(n\), on débute une ligne +avec \(n\) étoiles (\(\star\)) consécutives suivies d'un espace et du +titre. La création d'une liste est tout aussi simple, il suffit par +exemple de commencer les lignes par un tiret (\(-\)), l'indentation +définit le niveau de l'item. +</p> + +<p> +On termine cette très brève introduction par un rappel de quelques +raccourcis basiques. +</p> + +<p> +Les raccourcis suivants fonctionnent pour les sections et les +listes. Les mêmes raccourcis ont des effets voisins dans les tableaux, +voir plus bas. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-up</code></td> +<td class="org-left">Échange l'élément avec l'élément précédent (de même niveau)</td> +</tr> + +<tr> +<td class="org-left"><code>M-down</code></td> +<td class="org-left">Échange l'élément avec l'élément suivant (de même niveau )</td> +</tr> + +<tr> +<td class="org-left"><code>M-left</code></td> +<td class="org-left">Diminue le niveau de l'élément (plus haut dans la hiérarchie)</td> +</tr> + +<tr> +<td class="org-left"><code>M-right</code></td> +<td class="org-left">Augmente le niveau de l'élément (plus bas dans la hiérarchie)</td> +</tr> + +<tr> +<td class="org-left"><code>TAB</code></td> +<td class="org-left">Plie ou déplie le contenu</td> +</tr> + +<tr> +<td class="org-left"><code>S-left</code> ou <code>S-right</code></td> +<td class="org-left">Modifie le statut de l'élément (<code>TODO</code>, <code>DONE</code>,…)</td> +</tr> + +<tr> +<td class="org-left"><code>M-RET</code></td> +<td class="org-left">Crée un élément de même niveau que l'élément courant</td> +</tr> +</tbody> +</table> +<p> +Dans le cas des listes, <code>S-left</code> et <code>S-right</code> modifient le type d'élément +de la liste (et des éléments de même niveau), on peut ainsi obtenir +une numérotation par exemple. +</p> + +<p> +Enfin, si on utilise <code>M-RET</code> au milieu d'un élément, il est décomposé en +deux éléments, le contenu reste associé à la seconde partie de l'élément. +</p> + +<p> +Insistons sur le fait qu'en cas de déplacement d'un élément, son +contenu (les sous items en particulier) lui restent attachés. Dans le +cas des listes numérotées, la numérotation est maintenue à jour par +toutes les opérations. +</p> + +<p> +Dans le cas des tableaux, comme on l'a dit, ces raccourcis sont +réutilisés avec des effets très voisins +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>M-up</code></td> +<td class="org-left">Échange la ligne avec la ligne précédente</td> +</tr> + +<tr> +<td class="org-left"><code>M-down</code></td> +<td class="org-left">Échange la ligne avec la ligne suivante</td> +</tr> + +<tr> +<td class="org-left"><code>M-left</code></td> +<td class="org-left">Échange la colonne avec la colonne précédente</td> +</tr> + +<tr> +<td class="org-left"><code>M-right</code></td> +<td class="org-left">Échange la colonne avec la colonne suivante</td> +</tr> + +<tr> +<td class="org-left"><code>TAB</code></td> +<td class="org-left">Positionne le curseur sur la cellule suivante (ajoute une ligne si nécessaire)</td> +</tr> + +<tr> +<td class="org-left"><code>S-TAB</code> ou <code>backtab</code></td> +<td class="org-left">Positionne le curseur sur la cellule précédente</td> +</tr> +</tbody> +</table> +<p> +En fin de ligne (après le dernier <code>|</code>), si on presse <code>TAB</code>, alors le +tableau est réaligné. Il existe de nombreux autres raccourcis pour les +tableaux, (suppression/ajout de lignes ou de colonnes) mais comme +certains sont dangereux nous ne les rappelons pas ici. Ces raccourcis +sont rappelés dans le menu <code>Tbl</code>. +</p> + +<p> +Nous terminons cette description des tableaux en donnant <b>un</b> moyen de +les créer. Il est extrêmement simple. Il suffit de commencer une ligne +par un <code>|</code> puis de séparer les colonnes par d'autres <code>|</code>. Pour ajouter une +ligne de séparation, il suffit de commencer une ligne par la séquence +<code>|-</code> puis de presser <code>TAB</code> n'importe où dans la zone du tableau. +</p> + +<p> +Finalement, on donne quelques raccourcis plus généraux pour +<code>Org-mode</code>. On ne décris pas ici comment générer des zones de code, ni +autres comportements dynamiques. Les fonctionnalités basiques sont +accessibles dans le menu, mais il est préférable pour cela de +consulter de vraies documentations. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-c C-c</code></td> +<td class="org-left">Évalue une zone de code et met à jour le résultat</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-v C-b</code></td> +<td class="org-left">Évalue tout le document et met à jour les résultats</td> +</tr> + +<tr> +<td class="org-left"><code>C-c C-e</code></td> +<td class="org-left">Lance le menu <code>Hydra</code> pour déclencher les exports</td> +</tr> + +<tr> +<td class="org-left"><code>C-c '</code></td> +<td class="org-left">Édite une zone de code dans le mode approprié</td> +</tr> +</tbody> +</table> +<p> +Ce dernier raccourci : <code>C-c '</code> est <b>extrêmement</b> important pour la +modification des blocs de codes. Il faut éviter de modifier +directement ces éléments avec le mode <code>Org</code>. +</p> +</div> +</div> + +<div id="outline-container-org24a67a3" class="outline-3"> +<h3 id="org24a67a3"><span class="section-number-3">6.2</span> Pliage et dépliage avec <code>narrow-or-widen-dwim</code></h3> +<div class="outline-text-3" id="text-6-2"> +<p> +Emacs propose des fonctions de (dé)-pliage de zones. La dénomination +pour ces fonctionnalités dans Emacs est <i>narrowing</i> (pliage) et <i>widening</i> +(dépliage). +</p> + +<p> +Il s'agit d'un outil très puissant pour l'édition avec Emacs. Son +fonctionnement n'est pas de cacher des zones de texte comme le +proposent de nombreux outils, mais de modifier le <i>buffer</i> pour qu'il ne +contienne plus que la région sélectionnée. Le <i>buffer</i> <b>n'est donc plus</b> +le reflet du fichier édité, mais simplement le reflet de la zone. +</p> + +<p> +Les modifications apportées à la zone sont donc bien sauvées dans le +fichier, mais on ne peut plus modifier le reste du fichier. C'est donc +très pratique lorsqu'on veut appliquer une série de modifications sans +avoir à se préoccuper de leur impact hors de la région. Un bon exemple +est l'utilisation d'une macro clavier. +</p> + +<p> +Dans cette configuration, on utilise <code>narrow-or-widen-dwim</code> qui +simplifie la sélection des régions à éditer, c'est l'effet <i>dwin</i> (<i>Do +What I Mean</i>). +Un seul raccourci est nécessaire à l'activation du pliage ou du +dépliage d'une zone. +</p> +<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides"> + + +<colgroup> +<col class="org-left" /> + +<col class="org-left" /> +</colgroup> +<thead> +<tr> +<th scope="col" class="org-left">Raccourci</th> +<th scope="col" class="org-left">Description</th> +</tr> +</thead> +<tbody> +<tr> +<td class="org-left"><code>C-x n</code></td> +<td class="org-left">Active ou déactive le pliage</td> +</tr> +</tbody> +</table> +<p> +Là où ce mode est intelligent c'est en sa façon de reconnaître quelle +est la région qui sera éditée. En fait, si une région est sélectionnée +c'est cette région qui sera considérée, mais sinon, c'est le +paragraphe, la section ou la fonction courante (dans un mode de +programmation) même qui occupera tout le <i>buffer</i>. +</p> +</div> +</div> + +<div id="outline-container-orgb8c74bc" class="outline-3"> +<h3 id="orgb8c74bc"><span class="section-number-3">6.3</span> Autres modes installés</h3> +<div class="outline-text-3" id="text-6-3"> +<p> +En dehors des modes internes fournis avec Emacs, on pourra consulter +le fichier de configuration (<a href="Configuration.html">Configuration.org</a>) où sont décrites +succinctement des modes plutôt utiles comme <code>WGrep</code>, <code>iedit</code>, <code>Dumb Jump</code>, +<code>AutoYASnippet</code>, <code>Avy</code>, <code>projectile</code>, … +</p> + +<p> +Ils ne sont pas abordés dans ce tutoriel. +</p> +</div> +</div> + +<div id="outline-container-orgc0b25c3" class="outline-3"> +<h3 id="orgc0b25c3"><span class="section-number-3">6.4</span> Personnalisation</h3> +<div class="outline-text-3" id="text-6-4"> +</div> +<div id="outline-container-orga7d01e4" class="outline-4"> +<h4 id="orga7d01e4"><span class="section-number-4">6.4.1</span> custom.el</h4> +<div class="outline-text-4" id="text-6-4-1"> +<p> +Même si on souhaite pouvoir suivre les développements de cette +configuration et les mettre à jour avec <code>git</code>, il est possible de la +personnaliser un peu. +</p> + +<p> +Pour cela, les modifications doivent être apportées au fichier +<code>~/.emacs.d/custom.el</code>. En fait, ce fichier particulier est ignoré +par <code>git</code>, mais il est généré au lancement d'Emacs s'il n'existe pas. +</p> + +<p> +Une façon de <b>supprimer</b> toutes les personnalisations est donc de +l'effacer puis de relancer Emacs. Si des personnalisations sont +importantes, il convient donc de les sauvegarder ailleurs. +</p> +</div> +</div> + +<div id="outline-container-orgda154fe" class="outline-4"> +<h4 id="orgda154fe"><span class="section-number-4">6.4.2</span> Emacs lisp</h4> +<div class="outline-text-4" id="text-6-4-2"> +<p> +Rappelons le, Emacs n'est pas un simple éditeur. C'est en fait une +véritable machine interprétant le langage <code>ELisp</code> dont des +fonctionnalités sont adaptées à l'édition de sources. +</p> + +<p> +Donc pour une personnalisation (extrêmement) poussée, ou pour +développer de nouveaux modes, il est indispensable de connaître +suffisamment <code>ELisp</code>. Évidemment, on ne couvre pas cet aspect des choses +dans ce document. Il faudra donc se référer aux nombreuses +documentations disponibles sur internet. +</p> + +<p> +Voici quelques références, classées par ordre croissant de complexité. +</p> +<ul class="org-ul"> +<li><a href="https://github.com/chrisdone/elisp-guide">Un guide rapide des bases d'ELisp</a></li> +<li><a href="http://ergoemacs.org/emacs/elisp.html">Practical Emacs Lisp</a></li> +<li><a href="https://www.gnu.org/software/emacs/elisp-manual/elisp.html">Manuel de référence</a></li> +</ul> +</div> +</div> +</div> +</div> +<div id="footnotes"> +<h2 class="footnotes">Notes de bas de page: </h2> +<div id="text-footnotes"> + +<div class="footdef"><sup><a id="fn.1" class="footnum" href="#fnr.1">1</a></sup> <div class="footpara"><p class="footpara"> +<code>Org-mode</code> n'existe que dans Emacs. Il n'y a pas d'application +autonome qui offre les mêmes fonctionnalités. Cela n'aurait pas +vraiment de sens. +</p></div></div> + + +</div> +</div></div> +<div id="postamble" class="status"> +<p class="date">Created: 2020-04-17 ven. 19:55</p> +<p class="validation"><a href="http://validator.w3.org/check?uri=referer">Validate</a></p> +</div> +</body> +</html> diff --git a/Tutoriel.pdf b/Tutoriel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b1cfd8f65675832655cc3f7137fb956a04303af Binary files /dev/null and b/Tutoriel.pdf differ