Mes notes pour faire une démo maximaliste de emacs
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
ouCtrl-fbnp
se déplacer d'une lettre; -
Ctrl-Fleche
ouM-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
-
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
-
un en plus
<F4>
pour avoir en plus. garder le doigt appuyé quelques secondes pour en faire plus.
toto1
-
123 de plus
C-u 123 <F4>
Pour avoir les 123 suivants
-
(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
-
M-q
pour mettre en forme une région sélectionnée sur 80 colones -
revenir en arrière mot à mot avec
M-Left
-
M-u
pour mettre tout le mot en upper case -
M-c
pour mettre juste une majuscule au début -
Revenir au début
M-<
Macro
-
mettre en upper-case
-
avancer de deux mots
-
mettre en majuscule
-
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
-
Sélectionner une ou deux lignes et sauvegarder la sélection dans le registre a
Ctrl-x r s a
-
Idem avec deux autres lignes dans le registre b
Ctrl-x r i b
-
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
-
mettre le curseur sur toto1 (il est multiple)
-
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
-
-
Faire de même avec un toto en majuscule
-
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)))
-
-
enlever le souligné avec
M-s h u
-
relire et activé le commentaire avec
M-s h f
-
les soulignés sont gardés pour la section suivante sur le remplacement
Smart cases dans le remplacement et édition récursive
-
selectionner une région avec les mots
Ctrl-space
et déplacement de curseur, avec des changement de casse. Garder quelques toto1 en dehors. -
M-%
et remplacer toto par tata -
quelque yes
-
retour sur un changement avec un ou deux
^
-
C-r
pour éditer récursivement -
C-M-c
pour sortir de l'édition récursive -
quelque yes et no
-
!
pour faire tout le reste -
Montrer le smart cases avec les toto ayant changé de casse
-
enlever le souligné avec
M-s h u
Occur
-
M-s o
et choisir les TATA -
cliquer pour déplacer le curseur (1 ou deux), ou avec
Ret
-
retourner dans le buffer occur en cliquant en fin de ligne
-
e
pour éditer une ligne de contexte occur -
éditer avec un rectangle
C-x space
-
C-c C-c
pour revenir en mode occur -
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
-
écrire $integ(exp(x+pi), x, 0, 42)$
-
lancer calc en embed
C-x * e
-
si soucis avec le grab, recommencer
-
-
pour obtenir la valeur faire un égal (
=
) -
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
-
faire quelques undo (qui crée de nouveau états)
-
déplacer la flèche
-
faire quelques undo (qui font des redo)
Documentation
-
Montrer la documentation interne
Ctrl-h i
-
Déplacement dans la doc de emacs lui-même
m E<tab>
Multi-buffer et follow mode
-
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
-
-
Découper en 3 buffer avec un
Ctrl-x 3
-
Équilibrer les buffers avec
Ctrl-x +
-
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. -
Quiter la documentation avec
C-x 1
puisq
pour avoir juste le scratch
Utf-8
-
Grossir la fonte avec
C-x C-+
-
Insérer un α
C-x 8 RETURN
puisgreek small letter alpha
-
M-u
etM-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
-
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>
etC-u C-<space>
) AvecC-x C-<space>
-
les registers avec positions et rectangles
-
proced (htop dans emacs)
-
org-noter et org-pdfview