Le but de ce topic unique est de présenter et parler d'emacs, l'éditeur de texte qui se prend pour un OS. Dans ce topic prendra place tout ce qui concerne son utilisation, sa configuration, ainsi que (pour les plus courageux, donc pas moi ), la programmation en elisp pour créer vos propres extensions.
C'est quoi emacs ?
emacs est l'éditeur de texte du projet GNU. On est très loin du notepad de base, puisqu'il s'agit d'un éditeur fait par des programmeurs pour des programmeurs. D'une première approche plutot ardue, après quelques heures d'utilisation, on se rend compte de sa puissance, de sa souplesse, et de la variété d'opération qu'il permet de faire (à peu près tout ce que l'on peut faire avec un ordinateur peut être fait dans emacs). Si vous utilisez un éditeur de texte plusieurs heures par jour, et surtout si vous programmez, vous devriez jeter un oeil à la bête.
Comment ça s'installe ?
Le cas le plus simple est sous linux. Il est généralement déjà installé. Sinon, sous debian, un "apt-get install emacs", sous mandrake un "urpmi emacs" vous installeras la bête avec une configuration par défaut raisonnable.
Et sous windows (tm) ?
Sous windows, c'est plus compliqué. Il vous faut déjà récupérer le binaire dans http://ftp.gnu.org/gnu/windows/emacs/ . Prenez la version fullbin, elle contient tout ce qu'il vous faut, puis dezippez là dans un répertoire. Par exemple c:\emacs. Puis, il va falloir définir votre répertoire home. Pour cela deux solutions. Créer une variable d'environnement HOME, pointant vers un répertoire à vous, soit créer sous regedit une clef HOME sous HKEY_LOCAL_MACHINE\SOFTWARE\GNU\emacs et qui aura comme valeur votre répertoire home voulu. Personnellement, j'utilise la racine d'emacs, mais sous windows, la solution de bon aloy consisterais à utiliser C:\Documents and Settings\votre-login.
Maintenant, contrairement à linux, la configuration par défaut est pas terrible. Il va donc falloir se le préconfigurer. Dans votre répertoire HOME choisi ci-dessus, créez un fichier _emacs, puis reportez-vous au chapitre sur la configuration.
Euuhhhh, c'est quoi la différence entre emacs et xemacs ?
Ah, j'avais failli l'oublier celle là. Il y a quelques années, il n'y avait qu'une seule version d'emacs, celle créé par la FSF, aussi appelée GNU/emacs. Un entreprise du nom de Lucid éditait un environnement de développement, et emacs était leur éditeur. Comme certaines choses dans emacs ne leurs convenaient pas, ils ont voulu faire des évolutions. Mais comme il y avait une différence de points de vue entre les gens de lucid et les gens de la FSF, lucid à décider de forker emacs et de développer leur propre version. Quelques années plus tard, lorsque lucid déposa le bilan, ce travail ne fut pas perdu et lucid emacs devint xemacs. Les deux logiciels sont assez proches, bien qu'il y ait quelques différences de comportement (lorsque vous faites "open file", xemacs ouvrira une boite de dialogue alors que GNU/emacs vous demandera le nom du fichier dans la console).
Premiers pas sous emacs, et quelques commandes de base
Premier reflexe, taper du texte sous emacs, et après quelques instants, on se rend compte que les racourcis claviers windows ne fonctionnent pas. Controle-c Controle-v, ça marche pas terrible. Voici donc quelques commandes de bases qui permetteront à l'utilisateur de faire le minimum vital.
Ah, juste un truc. C- signifie controle, et M- méta. Si la trouche controle tous le monde la voit, la touche meta c'est plus dur. Elle est généralement accessible en maintenant la touche alt enfoncée, ou en tapant une fois sur Echap. Par exemple, C-x C-c Signifie qu'il faut faire Ctrl+X, suivit de Ctrl+C. Oui, sous emacs, de nombreux raccourcis utilisent plusieurs touches de suite, et celui là permet de quitter.
Une dernière remarque, lorsque l'on demande une informlation à taper (nom d'une commande, d'un fichier, etc...), la touche tab active la complétion automatique. Essayez en ouvrant un fichier.
Annuler
Pour annuler la commande en cours : C-g ou Echap Echap Echap
Undo : C-_
Quitter : C-x C-c
Opérations fichiers
C-x C-f : ouvrir un fichier
C-x C-s : sauvegarder le fichier sous son nom courant
C-x C-w : sauvegarder le fichier sous un nouveau nom
C-x C-k : fermer le fichier courant
C-x C-b : passer au fichier ouvert suivant
C-x b : afficher la liste des fichiers ouverts
gestion des vues
Les vues sous la séparation de l'interface d'emacs en plusieurs fenetre, chaque fenetre affichant indépendament un buffer, pouvant contenir un fichier ou autre chose.
C-x 2 : ouvrir une nouvelle vue (separation horizontale)
C-x 3 : ouvrir une nouvelle vue (separation verticale)
C-x 1 : la vue courante prend tout l'espace
C-x 0 : la vue courante prend en plus l'espace de la vue avec laquelle elle partage l'espace (c'est plus clair en le testant).
C-x o : passer à la vue suivante
Copier/Couper/Coller
La gestion du copier/coller sous emacs est particulière, puisqu'en fait on marque un début de zone, et la commande permettant de marquer la fin de zone permet en plus de décider si on coupe ou si on copie. De plus, une fois copier, le texte est mis dans une pile, ou on garde tous les éléments copiés. Donc rien n'empêche de copier plusieurs texte de suite et d'aller seulement ensuite les coller.
C-<espace> : début de zone
M-w : copier
C-w : couper
C-y : coller la tête de pile
C-k : couper jusque la fin de la ligne et la mettre dans la pile.
La recherche
Sous emacs, la recherche est incrémentale, c'est à dire que la recherche à lieu pendant que l'on tape. A noter que tant que l'on tape en minuscule, la recherhce n'est pas sensible à la casse, et le devient lorsque l'on met au moins une majuscule.
C-s : lancer la recherche en avant.
C-r : lancer la recherche en arrière.
C-w : completer la recherche avec le mot courant.
<backspace> : retrourner à l'élément trouvé précédent.
Aide
C-h t : affiche le tutorial d'emacs
C-h F : affiche la faq au format info
C-h i : affiche l'aide l'emacs au format info
Le mode commande
Bon, là on entre dans la grande particularité d'emacs. En fait emacs est un interprêteur lisp préconfiguré sous forme d'éditeur. Et toutes ses commandes (approximativement 1900 chez moi) sont accessibles par une ligne de commande, accessible en tapant M-x. A partir de là, faite <tab> pour afficher la liste, et vous pouvez partir à l'aventure, des heures de bonheur en perspective.
La configuration de la bête
La configuration par défaut d'emacs est pas très sexy. Pour arranger cela, il faut le configurer. La configuration d'emacs est simple. Au lancement, il cherche un fichier .emacs (ou _emacs sous windows) dans le répertoire HOME de l'utilisateur et l'évalue grace à son interprêteur lisp. Ce fichier contiendra donc un ensemble de commandes lisp qui configurerons emacs au fur et à mesure de son exécution. Pour information, un extrait du mien. Il est commenté, les lignes commençant par ;; étant les lignes de commentaire.
;; on est des vrais, pas de menus , pas de toolbar
;; bon, si vous avez pas l'habitude, vous pouvez les laisser
(tool-bar-mode nil)
(menu-bar-mode nil)
;; mettre en surligné la zone en cours de selection.
;; Souvenez-vous de C-<espace> et tout ça ...
(transient-mark-mode t)
;; parenthese matching, permet de verifier au fur et à mesure
;; de la frappe que l'on ferme bien de que l'on ouvre, aussi
;; bien pour les parenthèses que les crochets ou les accolades.
(show-paren-mode 1)
(setq-default hilight-paren-expression t)
;; une jolie couleur de fond
(set-background-color "Wheat" )
;; colorisation de la syntaxe ...
(global-font-lock-mode t)
;; ...avec le maximum de couleurs
(setq font-lock-maximum-decoration t) ;; completion sur shift-tab
(global-set-key (quote [S-iso-lefttab]) (quote dabbrev-expand))
(global-set-key (quote [S-tab]) (quote dabbrev-expand))
;; circuler entre les vues par ctrl-tab
(global-set-key [(control tab)] `other-window)
;; redefinition de quelques touches (global-set-key [delete] 'delete-char)
(global-set-key [home] 'beginning-of-line)
(global-set-key [end] 'end-of-line)
;; moi, j'aime bien avoir le undo en Ctrl-Z
(global-set-key [(control z)] `undo)
;; F7 lance la compilation
(global-set-key [f7] `compile)
;; on arrete de rajouter des lignes avec bas en fin de buffer
(setq next-line-add-newlines nil)
;; on est en europe, config du charset par defaut proprement
(standard-display-8bit 128 255)
(standard-display-european 1)
;; affichage de l heure dans la barre d'info (format 24h) :
(display-time)
(setq display-time-24hr-format t)
;; Affiche numero de ligne et colonne dans la barre d'info
(setq column-number-mode t)
(setq line-number-mode t)
;; petite fenetre de compil, pas tout l'ecran, merci
(setq compilation-window-height 10)
;; chargement de quelques bibliothèques complémentaires que ;; j'ai sur ma machine
(load "php-mode" )
(load "python-mode" )
;; une petite fonction complémentaire que j'aime bien
(defun replace-region-by-yank ()
"supprime une region et colle le contenu du clipboard a la place"
(delete-region (point-min-marker) (point-max-marker))
(yank)
)
(global-set-key [(control z)] 'replace-region-by-yank)
|
Ca a l'air compliqué le lisp en fait ?
En fait, ça dépend ce que l'on compte faire. Tant qu'il s'agit de se faire sa petite configuration dans le .emacs, ça va. Si l'on veut écrire un projet complet, il faut avoir quelques connaissances en programmation fonctionnelles. Ceux qui on fait du caml ne devraient pas être perdu. Venant d'un langage procédural, c'est beaucoup plus difficile de frachir le pas .
Commençons simple. Le raccourci C-x C-e permet d'evaluer l'expression lisp précédente, ça va nous servir pour faire des expérimentations. Une expression lisp, c'est une fonction et une liste d'arguments entre parenthèse. Par exemple, dans un buffer, tapez, puis faites C-x C-e après la seconde parenthèse :
Dans la minibar, vous verrez s'afficher 17. La fonction utilisée est +, les arguments sont la liste des nombres à additionner, plus bête, on peut pas. Après, on peut imbriquer les fonctions, et le resultat d'une fonction sera pris comme argument de la fonction de niveau supérieur :
(+ 4 (- 5 2) (* 4 (* 4 4)))
|
Cela fait 71. Si on tente de la faire classiquement, on obtient : 4 + (5 - 2) + ( 4 * (4*4)). On retrouve bien 71 sous cette forme. Ouf. A partir de là, voyons les cas les plus courant que l'on trouve dans un .emacs pour les réutiliser.
Affecter une variable de configuration.
De nombreuses fonctions d'emacs se configurent par des variables. Pour cela, on utilise la fonction setq, dont le premier argument est le nom de la variable, et le second sa valeur. (setq toto 45) affecte 45 à la variable toto. (setq next-line-add-newlines nil) affecte la valeur nil (liste vide) à la variable "next-line-add-newlines" qui permet de savoir si emacs doit ajouter des lignes vides à la fin du fichier si on tente de circuler au dela de la fin du fichier.
Reaffecter une touche.
Sous emacs, de nombreuses commandes que l'on aimerais bien avoir ne sont pas accessibles directement, ou avec un raccourci que l'on aime pas. Mais dans le .emacs, on peut reaffecter une touche avec la commande global-set-key (global car cette commande sera accessible par cette touche dans tout emacs, et pas juste pour le mode courant comme on peut le faire avec local-set-key. Exemple :
(global-set-key [(control x) (f8)] 'version)
|
Quelques explications néanmoins. Dans cet exemple, on affecte la fonction version à la sequence de touche C-x F8. Entre crochet (premier paramètre), on met la séquence de touche à utiliser. Le second paramètre est la fonction à appeler. l'apostrophe permet de demander à ce que l'on affecte la fonction, et pas le résultat de la fonction. Sans cette apostrophe, on aurait évalué version à l'appel de global-set-key, et affecté le résultat de la fontion à la séquence de touche. Ce n'est pas ce qui est demandé.
biblio-linkographie
Pour en savoir plus, ou pour demander de l'aide.
Des liens généraux ...
Tutorial
Des exemples de fichiers .emacs
http://www.dotfiles.com/index.php3?app_id=6 : Des exemples de fichiers .emacs, certains sont de vraies usines à gaz.
Pour apprendre le elisp :
Pour des trucs et astuces
Des livres
- http://www.oreilly.fr/catalogue/emacs_pkt.html : Emacs précis et concis chez O'reilly. 50 pages de raccourcis claviers, classés par thèmes. C'est un aide mémoire plus qu'autre chose, mais le format est moins pratique qu'une refcard.
- http://www.oreilly.fr/catalogue/emacs.html : Introduction à GNU/Emacs. Un livre assez sympa, mais qui commence à dater, puisqu'il a 6 ans et s'applique à la version 19 alors que l'on en est à la 21. Néanmoins, pour tout ce qui est utilisation basique, cela ne se sent pas.
- http://www.oreilly.com/catalog/gnuext/ : Writting GNU/Emacs extensions. Un livre pour apprendre le elisp. Comme le précédent, il est assez ancien, et en plus, je ne l'ai pas lu.
Des modules complémentaires utiles
Message édité par kadreg le 12-10-2003 à 13:47:08
---------------
brisez les rêves des gens, il en restera toujours quelque chose... -- laissez moi troller sur discu !