La complétion automatique avec popup pour Emacs

Ce tutoriel s'adresse aux utilisateurs et utilisatrices de GNU Emacs et ses dérivés.

Un système de complétion automatique propose s'il le peut un ou plusieurs compléments à une chaîne de caractères que l'utilisateur/utilisatrice a commencé à taper. Par exemple, un moteur de recherche pourrait proposer des compléments pour "GNU ", comme "Emacs", "Bash", "GPL", "Octave" et "R". Emacs a déjà cette fonctionnalité, par exemple pour le nom des buffers avec C-x b (ou M-x switch-to-buffer).

Néanmoins, au moins jusqu'à la version 24, GNU Emacs n'a pas de système de complétion automatique avec des popup. Ce système peut être pratique et est inclus dans certains éditeurs de code, comme Eclipse et Geany. Mais il existe un mode pour Emacs écrit en Emacs Lisp et qui est bien entendu libre (sous licence GPL 3+ pour le code et FDL 1.3+). Celui se nomme auto-complete.

Télécharger

Télécharger via un gestionnaire de sources de paquets

Ce mode est disponible sous forme de paquet au moins avec ces systèmes :

Télécharger via le dépôt Git

Si vous voulez le dépôt Git, il est disponible sur GitHub. Pour le cloner via un shell texte, git clone https://github.com/auto-complete/auto-complete.git. Vous aurez aussi besoin de popup-el.

Installer

Placer le fichier Emacs Lisp à un endroit connu d'Emacs

Les fichiers Emacs Lisp sont probablement à un endroit connu d'Emacs avec si vous les avez installé avec un gestionnaire de sources de paquets avec lequel vous avez aussi installé Emacs. Dans le cas contraire, lisez la documentation.

Configurer Emacs

Dans votre fichier .emacs, ajoutez :
(require 'auto-complete-config)
(ac-config-default)

Astuces

Ne pas montrer le menu automatiquement

Il peut être agacant que le menu s'affiche automatiquement. Pour régler ce problème, il faut ajouter (setq ac-auto-show-menu nil) à votre fichier de configuration Emacs. Vous pouvez aussi régler un temps avant l'apparition du menu avec (setq ac-auto-show-menu value), value étant un nombre flottant positif avec pour unité la seconde.

La hauteur du menu peut être réglée avec (setq ac-menu-height value), value étant un nombre entier positif qui est le nombre de lignes.

Gestion de la casse

;; Ignore la casse dans tous les cas
(setq ac-ignore-case t)
;; Ignore la casse si la chaine de caractères de la cible de la complétion n'inclut pas de caractères majuscules
(setq ac-ignore-case 'smart)
;; Distingue la casse dans tous les cas
(setq ac-ignore-case nil)

En savoir plus