Contexte

Explications préliminaires

Emacs et VIM sont des éditeurs de texte. Ils fournissent un interface d'édition de texte particulièrement efficace. Les autres IDE n'ont qu'une toute petite partie de leurs capacités de bases.

Les IDE (VS, Atom) et VIM ont des langages d'extensions pour ajouter des capacités. (Celui de Vim est particulièrement perfectible)

Emacs, c'est une autre approche. Emacs n'est pas un éditeur avec un langage pour écrire des extensions. C'est un éditeur codé dans le langage dynamique LISP (comme python) qui manipulent des listes. C'est l'ancetre (1958, 1 an après FORTRAN !) de tous les langages fonctionnelles et il est encore bien vivant. Cette omniprésence du langage au sein de l'éditeur permet de réaliser facilement des choses difficiles avec tous les autres éditeurs.

DANGER: trop de doigts, pas de lune

[2019-09-12 jeu.] Pendant la démo AST, il m'est apparu évident qu'ils ont regardé mes doigts (les démo 1 à une, séparée) et pas la lune: il faudrait trouver une démo intégratrice:

  • occur avec l'édition d'un rectangle dans la fenêtre occur: Bonne idée ! Travailler le côté graphique ! Ou l'inclusion d'un troisième mode (PDF semble compliqué)

  • Pourquoi pas le highlight-mode ?

  • PDF avec org-noter

IDE: il faudrait montrer que l'on peut ressemble à un IDE classique

  • ede en C ?

  • gdb avec gdb-many-windows

  • neotree avec le theme icons

Init

Démarrer emacs sans argument (ou avec -q pour avoir la version "de base"). Se mettre en plein écran (large) avec <F11>.

Lisp

Dans le Scratch, écrire une petite opération arithmétique avec plus de deux termes, ou facteurs, pour mettre l'accent sur les listes. Puis après la dernière parenthèse, faire C-j, ce qui affiche le résultat.

  (+ 1 2 3 4 (* 5 6 7))
220

Quote: Code: une liste == Données une liste

Le quote permet d'empêcher l'évaluation d'une liste.

  (+ 1 2)
  3
  '(+ 1 2)
  (+ 1 2)
  (* 3 (eval '(+ 1 2)))
  (setq variable valeur)
  (setq org-pretty-entities t)
9

Explications

LISP est le père des langages fonctionnels (OCaml, Haskell) mais aussi de ceux ayant un garbage collector (Java, Python, Perl). Sa syntaxe et ses concepts simples donnent une grande liberté et une grande concision dans le code.

Le code et les données ont le même statut. Ce sont juste des listes !

la touche la plus importante: M-x (ou Echap-x)

M-x tool-bar-mode

Mais les menus existent aussi: Options => Show/Hide => Line numbers for all lines.

Helm: utilisation sans connaître du tout la commande

  • taper les mot clefs permet de retrouver la commande et/ou son raccourci clavier

    Exemple: "replace regexp"

Lire la doc pour savoir faire quelque chose

Ctrl-h i puis m emacs

Configuration par défaut

Pour les vimiens en exil:

  • evil mode

  • ou avec des starter kits: doom emacs ou spacemacs

Pour les autres

  • centaur emacs

  • prelude

  • purcell

  • ou juste le faire à la main :-)

Emacs est aussi un éditeur

Déplacement rapide

  • Fleche ou Ctrl-fbnp se déplacer d'une lettre;

  • Ctrl-Fleche ou M-fbnp pour se déplacer de mot en mot;

  • M-ae déplacement à la fin de la phrase (A tester dans la doc)

  • M-{} déplacement de paragraphe en paragraphe

  • C-x [] déplacement d'une page à la suivante

Option de recherche très évolué

  • Ctrl-s démarre une recherche interactive

    • Ctrl-w récupère le mot sous le point

  • C-u Ctrl-s avec regexp

  • M-% search and replace interactif

  • C-M-% search and replace de regexp interactif

  • M-s w recherche par mot en oubliant les ponctuations intermédiaires ou les fin de lignes

Macro

  1. Faire une macro qui affiche toto et un numéro qui s'incrémente

    <F3>
    toto<F3> <F4>
    

    affiche

    toto0
    

    Note: il y a un espace à insérer après toto0

  2. un en plus

    <F4>
    

    pour avoir en plus. garder le doigt appuyé quelques secondes pour en faire plus.

    toto1
    
  3. 123 de plus

    C-u 123 <F4>
    

    Pour avoir les 123 suivants

  4. (LUNE) nommer la macro, l'exécuter et afficher son code

    C-x C-k n toto
    M-x toto
    M-x insert-kbd-macro toto
    

Remise en forme, déplacement rapide et upper case

  1. M-q pour mettre en forme une région sélectionnée sur 80 colones

  2. revenir en arrière mot à mot avec M-Left

  3. M-u pour mettre tout le mot en upper case

  4. M-c pour mettre juste une majuscule au début

  5. Revenir au début M-<

Macro   10min

  1. mettre en upper-case

  2. avancer de deux mots

  3. mettre en majuscule

  4. Exécuter la macro 200 fois (plus que le nombre de mot), pour montrer que la macro s'arrête à la fin des mots

Copier-coller avec des registres

  1. Sélectionner une ou deux lignes et sauvegarder la sélection dans le registre a

    Ctrl-x r s a
    
  2. Idem avec deux autres lignes dans le registre b

    Ctrl-x r i b
    
  3. Insérer a puis b

Les registres peuvent sauvegarder

  • les positions

  • les rectangles

  • les nombres

  • l'agencement des fenêtres

Et peuvent être sauvegarder d'une session à l'autre

il y a des bookmarks aussi

Highlight-mode   10min

  1. mettre le curseur sur toto1 (il est multiple)

  2. surligner ses instances (regexp) en couleur M-s h r (M-s h . si vous avez un mot qui apparaît plusieurs fois)

    • indiquer que l'on peut souligner des phrases, ou des lignes.

    • NOTE: attention avec l'operateur point, il ajoute un espace à la fin du mot

  3. Faire de même avec un toto en majuscule

  4. Aller à la fin M->. Produire un commentaire avec la regexp (M-s h w)

    • Cela affiche dans le scratch

      ;; Hi-lock: (("\\_<regexp\\_>" (0 (quote hi-yellow) prepend)))
      
  5. enlever le souligné avec M-s h u

  6. relire et activé le commentaire avec M-s h f

  7. les soulignés sont gardés pour la section suivante sur le remplacement

Smart cases dans le remplacement et édition récursive

  1. selectionner une région avec les mots Ctrl-space et déplacement de curseur, avec des changement de casse. Garder quelques toto1 en dehors.

  2. M-% et remplacer toto par tata

  3. quelque yes

  4. retour sur un changement avec un ou deux ^

  5. C-r pour éditer récursivement

  6. C-M-c pour sortir de l'édition récursive

  7. quelque yes et no

  8. ! pour faire tout le reste

  9. Montrer le smart cases avec les toto ayant changé de casse

  10. enlever le souligné avec M-s h u

Occur   10min

  1. M-s o et choisir les TATA

  2. cliquer pour déplacer le curseur (1 ou deux), ou avec Ret

  3. retourner dans le buffer occur en cliquant en fin de ligne

  4. e pour éditer une ligne de contexte occur

  5. éditer avec un rectangle C-x space

  6. C-c C-c pour revenir en mode occur

  7. q pour quitter

Expression régulière programmable

  • Remplacer les nobres en fin de toto par le double de leur valeurs en hexadécimal (idée venant de mastering emacs)

    C-M-% toto\([[:digit:]]+\) toto\,(format "%x" (* 2 \#1))
    

Calculatrice

  1. écrire $integ(exp(x+pi), x, 0, 42)$

  2. lancer calc en embed C-x * e

    • si soucis avec le grab, recommencer

  3. pour obtenir la valeur faire un égal (=)

  4. sortir du mode calculatrice C-x * e

    Pour une version infomercialle complète: https://nullprogram.com/blog/2009/06/23/

Undo

Pour montrer que l'on peut repasser par tous les états

  1. faire quelques undo (qui crée de nouveau états)

  2. déplacer la flèche

  3. faire quelques undo (qui font des redo)

Documentation   10min

  1. Montrer la documentation interne Ctrl-h i

  2. Déplacement dans la doc de emacs lui-même m E<tab>

Multi-buffer et follow mode

  1. Affichage deux buffers cote à cote Ctrl-x 3

    • Montrer que les deux buffer sont indépendants: pratique pour voir deux morceaux d'un même fichier

  2. Découper en 3 buffer avec un Ctrl-x 3

  3. Équilibrer les buffers avec Ctrl-x +

  4. Affichage quadruple colones liés avec M-x follow-mode, pour montrer que l'on a toujours la suite de la page courante sur la page de droite.

  5. Quiter la documentation avec C-x 1 puis q pour avoir juste le scratch

Utf-8

  • Grossir la fonte avec C-x C-+

  • Insérer un α C-x 8 RETURN puis greek small letter alpha

  • M-u et M-l pour montrer que emacs parle grec et comprend utf-8 en changeant la majuscule/minuscule de alpha

  • M-x view-hello-file pour terminer (C-h h)

Paquetages   10min

  • Montrer l'ensemble des paquets M-x list-packages

  • installer slime-volleyball et jouer quelques secondes pour terminer

TRAMP + DIRED + édition d'un tar.gz

démo: se connecter à distance à un serveur ssh et éditer un fichier tar.gz

  • se connecter et afficher le répertoire home

C-x f /ssh:login@machine:.

  • trouver un tar.gz et appyer sur Entrée

  • sélectionné un fichier du tar, l'éditer et le sauvegarder

TRAMP utilise entre autre aussi GVFS

  • Dropbox, Google drive, SMB/CIFS (Partage Windows)

Démos à inventer

  • org-mode

  • recursive-grep-search

  • dired

  • pdf-tools

  • remote avec tramp (trop tôt ? ils n'ont pas la notion de remote)

  • version control (en magit) (trop tôt, ils n'ont pas vu git)

  • shell (shell, eshell et/ou ansi-term)

  • server avec emacsclient

  • greffon pour firefox (remplacement de its-all-text)

  • flyspell pour l'orthographe

  • langagetool pour la grammaire

    • retester grammalecte+flycheck pour voir si il fonctionne

  • narrow (ou peut-être plutôt fancy-narrow)

  • lgrep, regrep pour montrer l'inclusion avec les outils UNIX

  • dired et son mode édition

  • le undo dans une région C-u C-/

  • les mark ring ? (C-<space> C-<space> et C-u C-<space>) Avec C-x C-<space>

  • les registers avec positions et rectangles

  • proced (htop dans emacs)

  • org-noter et org-pdfview