Emacs (Français)

From ArchWiki
État de la traduction: Cet article est la version francophone de Emacs. Date de la dernière traduction: 2022-04-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Emacs est un éditeur d'affichage en temps réel extensible, personnalisable et auto-documenté. Au cœur d'Emacs se trouve un interprète Emacs Lisp, le langage dans lequel la majorité des fonctionnalités intégrées et des extensions d'Emacs sont implémentées. GNU Emacs utilise GTK comme sa boîte à outils X, bien qu'il fonctionne aussi bien dans un environnement CLI.

Installation

Pour la version stable de GNU Emacs, installez le paquet emacs. Les variantes incluent :

  • emacs28-gitAUR : Pré-test pour la future version 28.1 d'Emacs. Inclut la prise en charge de la compilation native, qui a été fusionnée en amont. En février 2022, il est assez stable.
  • emacs-gitAUR : Branche de développement de GNU Emacs. Depuis juin 2021, elle prend en charge la compilation native fusionnée depuis la branche d'Emacs feature/native-comp.
  • emacs-pgtk-native-comp-gitAUR ou emacs-native-comp-git-enhancedAUR[broken link: package not found] : Un fork non officiel combinant la branche de développement de GNU Emacs (y compris la compilation native) avec le nouveau moteur de rendu PGTK.
  • emacs-nox : GNU Emacs sans prise en charge de X11, pour une utilisation dans un terminal. Cette variante a des limitations, notamment moins de couleurs, moins de fonctionnalités pour la gestion des polices (changement de taille en direct, différentes tailles dans un document, etc.), et des limitations avec des fonctionnalités avancées comme la barre de vitesse ou GUD (l'environnement de débogage). Elle est également plus lente lors de la manipulation de faces complexes (l'apparence visuelle du texte dans Emacs).

Exécuter Emacs

Avant de lancer emacs, vous devez savoir comment le fermer (surtout si vous l'exécutez dans un terminal) : utilisez la séquence de touches Ctrl+xCtrl+c séquence de touches.

Pour lancer Emacs, exécutez :

$ emacs

ou, pour l'utiliser depuis la console :

$ emacs -nw

ou, pour un chargement rapide (sans .emacs) et une édition dans la CLI :

$ emacs -Q -nw

Si vous avez installé la version nox, 'emacs' et 'emacs -nw' seront les mêmes.

Un nom de fichier peut également être fourni pour ouvrir ce fichier immédiatement :

$ emacs nomfichier.txt

Sans couleurs

Par défaut, Emacs démarre avec un thème de couleurs montrant les hyperliens en bleu foncé. Pour démarrer Emacs sur un terminal texte sans aucun thème ou schéma de couleurs :

$ emacs -nw --color=no

Ceci fera apparaître tout le texte dans la couleur de premier plan du terminal — normalement du texte blanc sur un fond noir, ou du texte noir sur un fond blanc.

En tant que daemon

Afin d'éviter de recharger le fichier de configuration d'Emacs à chaque fois qu'Emacs démarre, vous pouvez exécuter Emacs en tant que daemon :

$ emacs --daemon

Vous pouvez ensuite vous connecter au daemon en exécutant :

$ emacsclient -nc

Ce qui crée un nouveau cadre -c (utilisez -t si vous préférez l'utiliser dans le terminal) et ne monopolise pas le terminal -n (--no-wait). Notez que certains programmes comme Mutt ou Git (pour les messages de commit) attendent que l'éditeur se termine, vous ne pouvez donc pas utiliser le paramètre -n. Si votre éditeur par défaut est configuré pour l'utiliser, vous devrez spécifier un éditeur alternatif (e.g. emacsclient -a "" -t) pour ces programmes.

En tant qu'unité de systemd

Une unité systemd est incluse dans Emacs 26.1. L'unité est installée avec Emacs, mais elle doit être activée en tant qu'unité utilisateur (et non pas à l'échelle du système) après avoir installé Emacs.

Après le démarrage du service, Emacs est prêt.

Notez que les unités utilisateur de systemd n'héritent pas des variables d'environnement d'un shell de connexion (comme ~/.bash_profile). Consultez Systemd (Français)/User (Français)#Variables d'environnement pour plus d'informations.

Si vous démarrez emacs en tant que daemon, vous pouvez définir les variables d'environnement VISUAL et EDITOR à emacsclient afin que les programmes qui démarrent un éditeur utilisent emacsclient au lieu de démarrer une nouvelle instance complète de l'éditeur. Les programmes qui utilisent un éditeur externe comprennent les programmes de messagerie (pour éditer le message), Git (pour éditer le message commit) et less (la commande v pour éditer le fichier affiché). N'utilisez pas la commande -n (--nowait) à emacsclient, car les programmes s'attendent généralement à ce que l'édition soit terminée lorsque l'éditeur se termine.

Il est également recommandé de modifier toute entrée du menu de démarrage de l'interface graphique (ou équivalent) pour Emacs afin de pointer vers emacsclient au lieu d'emacs, de sorte que le daemon emacs soit utilisé au lieu de démarrer un nouveau processus emacs.

Obtenir de l'aide

Emacs a un tutoriel intégré auquel on peut accéder en cliquant sur le premier lien de l'écran d'accueil et en sélectionnant Aide->Tutoriel Emacs dans le menu ou en appuyant sur C-h t.

Emacs est auto-documenté par conception. En tant que tel, une grande quantité d'informations est disponible pour déterminer le nom d'une commande spécifique ou sa combinaison de touches, par exemple. Consultez tous les raccourcis d'aide contextuelle avec C-h C-h.

Emacs comprend également un ensemble de cartes de référence, utiles pour les débutants comme pour les experts, consultez /usr/share/emacs/<version>/etc/refcards/ (remplacez <version> par votre version d'emacs).

Les manuels

Si vous voulez vraiment maîtriser Emacs, la source de documentation la plus recommandée reste les manuels officiels :

  • Emacs : le manuel complet de l'utilisateur d'Emacs.
  • Emacs FAQ.
  • Emacs Lisp Intro : si vous n'avez jamais utilisé de langage de programmation auparavant.
  • Elisp : si vous êtes déjà familier avec un langage de programmation.

Vous pouvez y accéder en tant que PDF à partir de GNU.org ou directement à partir d'Emacs lui-même grâce au lecteur 'info' intégré : C-h i. Appuyez sur m pour choisir un livre.

Certains utilisateurs préfèrent lire des livres en utilisant 'info' à cause de ses raccourcis pratiques, de ses paragraphes qui s'adaptent à la largeur de la fenêtre et de la police adaptée à la résolution de l'écran. Certains la trouvent moins irritante pour les yeux. Enfin, vous pouvez facilement copier le contenu du livre dans n'importe quel tampon Emacs, et vous pouvez même exécuter des extraits de code Lisp directement à partir des exemples.

Vous pouvez lire le livre Info pour en savoir plus : C-h i m info <RET>. Appuyez sur ? en mode info pour obtenir une liste rapide de raccourcis.

Personnalisation

L'une des principales caractéristiques d'Emacs est son extensibilité et sa facilité de configuration. Emacs a un moteur de personnalisation intégré. Vous pouvez faire M-x customize qui affiche une liste d'options de personnalisation. Pour savoir comment utiliser cette interface, consultez le noeud d'information sur la personnalisation facile : (info "(emacs) Easy Customization"). Vous pouvez définir les options de personnalisation ouvertes pour une seule session Emacs ou les enregistrer dans un #Fichier de configuration afin qu'elles soient sauvegardées dans toutes les sessions Emacs. Notez que c'est ce que fait l'interface de personnalisation si vous sélectionnez "Appliquer et sauvegarder".

Fichier de configuration

Quand Emacs est lancé, il essaie normalement de charger un programme Lisp à partir d'un "fichier d'initialisation", ou "fichier init" pour faire court. Ce fichier, s'il existe, spécifie comment initialiser Emacs pour vous. Emacs recherche votre fichier d'initialisation en utilisant les noms de fichiers '~/.emacs', '~/.emacs.el', '~/.emacs.d/init.el', ou '~/.config/emacs/init.el'. Consultez le nœud d'information "Fichier d'initialisation" pour en savoir plus : (info "(emacs) Init File")

Trucs et astuces

TRAMP

TRAMP (Transparent Remote Access, Multiple Protocols) est une extension qui, comme son nom l'indique, fournit un accès transparent aux fichiers distants à travers un certain nombre de protocoles. Lorsqu'on vous demande un nom de fichier, la saisie d'un formulaire spécifique invoquera TRAMP. Quelques exemples :

Pour demander le mot de passe root avant d'ouvrir /etc/hosts avec les droits root :

C-x C-f /sudo::/etc/hosts

Pour se connecter à 'remotehost' en tant que 'vous' via SSH et ouvrir le fichier ~/exemple.txt :

C-x C-f /ssh:you@remotehost:~/exemple.txt

Le chemin d'accès de TRAMP est généralement de la forme '/[protocole] :[[user@]host]:<file>'.

Pour se connecter à 'myhost' en tant que 'you' et éditer /etc/hosts avec sudo :

/ssh:you@remotehost|sudo:remotehost:/etc/hosts

TRAMP prend en charge bien plus que ce que les exemples ci-dessus pourraient indiquer. Pour plus d'informations, reportez-vous au manuel TRAMP info, qui est distribué avec Emacs.

Utilisation d'Emacs comme git mergetool

Par défaut, Git prend en charge l'utilisation du mode Emerge d'Emacs comme outil de fusion. Cependant, vous pouvez préférer le mode Ediff. Malheureusement, ce mode n'est pas pris en charge par git pour des raisons techniques. Il existe néanmoins un moyen de l'utiliser en évaluant du code elisp lors de l'appel à Emacs.

.gitconfig
[mergetool.ediff]
    cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\" 

[merge]
	tool = ediff

Notez que la commande doit être sur une seule ligne. Dans l'exemple ci-dessus, nous lançons une nouvelle instance d'Emacs. Vous pourriez vouloir utiliser emacsclient pour un démarrage plus rapide ; ce n'est cependant pas recommandé car l'appel à Ediff n'est pas vraiment propre : il pourrait perturber votre session Emacs actuelle.

Si vous voulez un démarrage instantané, vous pouvez utiliser le paramètre -q. Si vous voulez lancer Emacs rapidement tout en préservant au moins une partie de votre configuration, vous pouvez appeler Emacs avec

 emacs -q -l ~/.emacs-light

où le fichier de configuration light ne charge que ce dont vous avez besoin pour Ediff.

Consultez kerneltrap.org et stackoverflow pour plus de détails sur cette astuce et le problème Ediff.

Utilisation du verrouillage des majuscules comme touche de contrôle

Certains utilisateurs apprécient ce comportement pour éviter le fameux "pinky" d'emacs. Si vous voulez l'essayer sous X, exécutez simplement

$ setxkbmap -option ctrl:nocaps.

Alternativement, pour intervertir ces touches, lancez

$ setxkbmap -option 'ctrl:swapcaps'.

Pour définir cette option de manière permanente, pensez à l'ajouter à votre fichier .xinitrc.

Maintenant, si vous avez besoin de mettre en valeur une région, utilisez simplement le raccourci clavier par défaut C-x C-u, qui appelle la fonction upcase-region.

Consultez [1] pour une approche alternative.

Si la fonction de verrouillage des majuscules vous manque, mappez-la en tant que "Shift" en même temps.

$ setxkbmap -option "shift:both_capslock" (en anglais)

Certains environnements de bureau incluent des outils graphiques pour simplifier les réaffectations de clavier. Par exemple, dans Plasma 5, ouvrez les Paramètres système et cliquez sur Périphériques d'entrée. Sélectionnez Clavier et dans l'onglet Avancé, vous trouverez le paramètre Comportement du verrouillage des majuscules sous lequel vous pouvez sélectionner Caps Lock is also a Ctrl.

Multiplexage d'emacs et d'emacsclient

L'ouverture d'un nouveau fichier dans la même emacs-session nécessite l'utilisation de emacsclient. La commande emacs peut être elle-même enveloppée pour faire le travail plus intelligent d'ouvrir le fichier si la session existe.

Pour démarrer la session, vous devez utiliser start-server. Cet extrait va créer un serveur dans la première session d'emacs. Ajoutez ceci à votre fichier de configuration emacs.

.emacs or .emacs.d/init.el
(require 'server)
(unless (server-running-p)
  (server-start))

La méthode de l'alias du shell n'est pas adéquate pour cela puisque vous devez également passer des variables ou démarrer une session indépendante de votre propre chef. Ajoutez ceci au .bashrc ou à tout fichier rc de votre shell. Cela fera en sorte que votre commande $ emacs se comporte comme emacsclient si l'argument est passé.

function emacs {
    if [[ $# -eq 0 ]]; then
        /usr/bin/emacs # "emacs" is function, will cause recursion
        return
    fi
    args=($*)
    for ((i=0; i <= ${#args}; i++)); do
        local a=${args[i]}
        # NOTE: -c for creating new frame
        if [[ ${a:0:1} == '-' && ${a} != '-c' && ${a} != '--' ]]; then
            /usr/bin/emacs ${args[*]}
            return
        fi
    done
    setsid emacsclient -n -a /usr/bin/emacs ${args[*]}
} 

Si vous voulez l'exécuter dans une nouvelle session, faites simplement emacs <file> -.

Configurations multiples

Vous pouvez utiliser plusieurs configurations et dire à Emacs de charger l'une ou l'autre.

Par exemple, définissons deux fichiers de configuration.

.emacs
(load "~/.emacs.d/main" nil t)
(load "~/.emacs.d/functions" nil t)
(load "~/.emacs.d/modes" nil t)
(load "~/.emacs.d/plugins" nil t)
(load "~/.emacs.d/theme" nil t)

C'est la configuration complète que nous chargeons pour le daemon. Mais le fichier plugins est énorme et lent à charger. Si nous voulons créer une nouvelle instance d'Emacs qui n'a pas besoin des fonctionnalités des plugins, il peut être fastidieux de le charger à chaque fois à la longue.

.emacs-light
].
(load "~/.emacs.d/main" nil t)
(load "~/.emacs.d/functions" nil t)
(load "~/.emacs.d/modes" nil t)
(load "~/.emacs.d/theme" nil t)

Et maintenant nous lançons Emacs avec

emacs -q -l ~/.emacs-light

Vous pouvez créer un alias pour faciliter l'appel.

Variables locales et personnalisées

Vous pouvez définir des variables dans votre fichier de configuration qui pourront être modifiées ultérieurement en local pour un fichier.

(defcustom my-compiler "gcc" "Some documentation")

Maintenant, dans n'importe quel fichier, vous pouvez définir des variables locales de deux manières, consultez le manuel pour plus de détails.

  • En utilisant M-x add-file-local-variable-prop-line, qui ajoute une ligne commentée au début similaire à :
// -*- my-compiler:g++; mode:c++ -*-
  • Ou vous pouvez utiliser M-x add-file-local-variable pour ajouter des lignes vers la fin du fichier :
// Local Variables:
// my-compiler: g++
// mode: c++
// End:

Notez que pour que les valeurs prennent effet, vous devrez appeler M-x revert-buffer.

Les variables personnalisées sont considérées comme non sûres par défaut. Si vous essayez d'ouvrir un fichier qui contient des variables locales redéfinissant des variables personnalisées, Emacs vous demandera une confirmation.

Vous pouvez déclarer la variable comme sûre, supprimant ainsi la demande de confirmation d'Emacs. Vous devez spécifier un prédicat que toute nouvelle valeur doit vérifier pour qu'elle puisse être considérée comme sûre.

(defcustom my-compiler "gcc" "Some documentation" :safe 'stringp)

Dans l'exemple précédent, si vous tentez de définir autre chose qu'une chaîne de caractères, Emacs le considérera comme non sécurisé.

Couleurs et thème personnalisés

Les couleurs peuvent être facilement personnalisées en utilisant la fonction face.

(set-face-background 'region "color-17")
(set-face-foreground 'region "white")
(set-face-bold-p 'font-lock-builtin-face t ) 

Vous pouvez laisser Emacs vous indiquer le nom de la face où se trouve le point. Utilisez la fonction customize-face pour cela. Cette fonction vous montrera comment définir les couleurs, le gras, le soulignement, etc.

Emacs en console peut gérer 256 couleurs, mais vous devrez utiliser un terminal approprié pour cela. Par exemple, URxvt prend en charge 256 couleurs. Vous pouvez utiliser la fonction list-colors-display pour obtenir une liste complète des couleurs prises en charge. Ceci est fortement dépendant du terminal.

Consultez également

Prise en charge de SyncTeX

Emacs est un puissant éditeur LaTeX. Ceci est principalement dû au fait que vous pouvez adapter ou créer un mode LaTeX pour répondre au mieux à vos besoins.

Néanmoins, il peut y avoir quelques défis, comme la prise en charge de SyncTeX. Vous devez d'abord vous assurer que votre distribution TeX en dispose. Si vous avez installé TeX Live manuellement, vous devrez peut-être installer le paquet synctex.

# umask 022 && tlmgr install synctex

La prise en charge de SyncTeX dépend de la visionneuse. Ici nous utiliserons Zathura comme exemple, donc le code doit être adapté si vous voulez utiliser un autre visualisateur de PDF.

(defcustom tex-my-viewer "zathura --fork -s -x \"emacsclient --eval '(progn (switch-to-buffer  (file-name-nondirectory \"'\"'\"%{input}\"'\"'\")) (goto-line %{line}))'\"" 
  "PDF Viewer for TeX documents. You may want to fork the viewer
so that it detects when the same document is launched twice, and
persists when Emacs gets closed.

Simple command:

  zathura --fork

We can use

  emacsclient --eval '(progn (switch-to-buffer  (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'

to reverse-search a pdf using SyncTeX. Note that the quotes and double-quotes matter and must be escaped appropriately."
:safe 'stringp)

Nous définissons ici notre variable personnalisée. Si vous utilisez AucTeX ou le mode LaTeX par défaut d'Emacs, vous devrez définir le visualisateur en conséquence.

Maintenant, ouvrez un fichier source LaTeX avec Emacs, compilez le document, et lancez le visualisateur. Zathura apparaîtra. Si vous appuyez sur Ctrl+Clic gauche. Emacs devrait placer le point à la position correspondante.

Coloration syntaxique pour les fichiers systemd

Vous pouvez utiliser systemd-mode.

Alternativement, vous pouvez simplement indiquer à emacs de colorer les fichiers systemd (services, timer, etc.), en ajoutant ceci à votre fichier init :

 (add-to-list 'auto-mode-alist '("\\.service\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.timer\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))

Prise en charge du presse-papiers pour emacs-nox

Pour utiliser le presse-papiers de Xorg dans emacs-nox, installez xclip et ajoutez la fonction suivante à ~/.emacs [2]

;; use xclip to copy/paste in emacs-nox
(unless window-system
  (when (getenv "DISPLAY")
    (defun xclip-cut-function (text &optional push)
      (with-temp-buffer
	(insert text)
	(call-process-region (point-min) (point-max) "xclip" nil 0 nil "-i" "-selection" "clipboard")))
    (defun xclip-paste-function()
      (let ((xclip-output (shell-command-to-string "xclip -o -selection clipboard")))
	(unless (string= (car kill-ring) xclip-output)
	  xclip-output )))
    (setq interprogram-cut-function 'xclip-cut-function)
    (setq interprogram-paste-function 'xclip-paste-function)
    ))
Astuce: Vous pouvez également activer la prise en charge de la souris du terminal en ajoutant :
;; xterm mouse support
(require 'mouse)
(xterm-mouse-mode t)
Consultez également mwheel.el.

Paquets

Les fonctionnalités d'Emacs peuvent être étendues avec des paquets tiers. Le gestionnaire de paquets intégré package.el est le moyen officiellement pris en charge pour ce faire, bien qu'il existe plusieurs autres gestionnaires de paquets écrits par des membres de la communauté Emacs. package.el s'appuie sur la variable package-archives pour trouver des paquets. Par défaut, il s'agit de Emacs Lisp Package Archive (ELPA). M-x list-packages créera un tampon listant tous les paquets connus de votre Emacs. Le manuel ((info "(emacs) Packages")) contient beaucoup plus d'informations.

Des archives de paquets tiers peuvent être ajoutées. La plus utilisée d'entre elles est MELPA.

Un certain nombre d'extensions populaires sont disponibles sous forme de paquets dans les dépôts officiels, et plus encore, via l'AUR. Le nom de ces paquets a généralement un préfixe 'emacs-' (par exemple, emacs-lua-mode), mais pas toujours (par exemple, auctexAUR).

Certains paquets peuvent nécessiter des modifications de votre fichier de configuration afin de les activer pour que leurs fonctionnalités soient disponibles pendant une session Emacs. Par exemple, si vous installez auctexAUR, vous devrez ajouter

(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)

à votre fichier de configuration. Les autres paquets devraient vous indiquer comment les activer dans la section commentaire de leur code source ou dans leur README.

Dépannage

Emacs ne démarre pas avec le message d'erreur 'Undefined color : "WINDOW_FOREGROUND"'

Vous devez installer soit le paquet mcpp, soit le paquet gcc. Le préprocesseur C cpp est utilisé pour prétraiter les X resources par xrdb. Si un préprocesseur C n'est pas installé sur le système, xrdb ignore silencieusement l'exécution du préprocesseur C et le symbole WINDOW_FOREGROUND n'est pas développé en un code couleur hexadécimal.

Le service Emacs systemd ne démarre pas lors de l'utilisation de Gccemacs

Lorsque vous utilisez Gccemacs (soit la branche emacs-native-comp ou pgtk-nativecomp) et que vous essayez de démarrer un service systemd pour celui-ci, un message d'erreur indiquant qu'un fichier .eln n'a pas été trouvé peut être enregistré :

$ journalctl --user -xb -g eln
emacs[7507]: emacs: ../native-lisp/28.0.50-x86_64-pc-linux-gnu-fc9c33938bf279333039c28064d363e8/lisp-mode-410874a46ab8852855281f021ca61fe7-1738806322de892570d69dfc55b437c2.eln: cannot open shared object file: No such file or directory

Comme palliatif, éditez la ligne WorkingDirectory de emacs.service dans la section [Service].

emacs.service
[Service]
...
WorkingDirectory=/usr/lib/emacs/28.0.50/x86_64-pc-linux-gnu/
...
Note: Le paramètre WorkingDirectory doit être défini avant un éventuel paramètre Restart existant.

Problèmes de sortie colorée

Par défaut, le shell Emacs affiche les séquences d'échappement brutes utilisées pour imprimer des couleurs. En d'autres termes, il affichera des symboles étranges à la place de la sortie colorée souhaitée.

L'inclusion de ce qui suit dans ~/.emacs résout le problème :

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

Problèmes d'affichage des caractères dans X Windows

Si lorsque vous démarrez emacs dans X windows, tous les caractères de la fenêtre principale sont des boîtes blanches avec des bordures noires (celles que vous consultez si vous essayez d'afficher des caractères pour lesquels vous n'avez pas installé la bonne police), vous devez installer xorg-fonts-75dpi et/ou xorg-fonts-100dpi et redémarrer X windows.

Démarrage lent

Astuce: Pour éliminer le temps de démarrage, les utilisateurs peuvent envisager d'exécuter Emacs #En tant qu'unité de systemd.

Les temps de démarrage lents sont souvent causés par l'une des deux choses suivantes.

Pour déterminer laquelle, exécutez Emacs avec :

$ emacs -q
  • Des erreurs, particulièrement dans /etc/hosts, résulteront souvent en un délai de 5+ secondes au démarrage d'Emacs. Reportez-vous à Network configuration#Set the hostname pour plus d'informations.
  • Vous devrez peut-être surveiller les paquets réseau envoyés depuis votre ordinateur (à l'aide d'un programme comme Wireshark) pour consulter tout comportement étrange.
  • Une manière simple de rechercher la cause est de commenter (c'est-à-dire de préfixer les lignes par " ;") les sections suspectes de votre ~/.emacs. (ou ~/.emacs.d/init.el) puis de relancer Emacs pour consulter les changements éventuels. Gardez à l'esprit que l'utilisation de "require" et "load" peut ralentir le démarrage, surtout lorsqu'ils sont utilisés avec des extensions plus importantes. Ils ne devraient, en règle générale, être utilisés que lorsque leur cible est soit : nécessaire une fois qu'Emacs démarre ou fournit un peu plus que des "autoloads" pour une extension. Sinon, utilisez directement la fonction 'autoload. Par exemple, au lieu de :
(require 'anything)

vous pouvez utiliser :

(autoload 'anything "anything" "Select anything" t)

Impossible d'ouvrir le fichier de chargement : ...

La cause la plus fréquente de cette erreur est que la variable 'load-path' n'inclut pas le chemin du répertoire dans lequel se trouve l'extension. Pour résoudre ce problème, ajoutez le chemin approprié à la liste à rechercher avant de tenter de charger l'extension :

 (add-to-list 'load-path "/path/to/directory/")

Si vous tentez d'utiliser des paquets pour des extensions et qu'Emacs a été configuré avec un préfixe autre que '/usr', le chemin de chargement devra être mis à jour. Placez ce qui suit dans ~/.emacs avant les instructions fournies par le paquet :

 (add-to-list 'load-path "/usr/share/emacs/site-lisp")

Si vous compilez Emacs à la main, gardez à l'esprit que le préfixe par défaut est '/usr/local'.

Problème des touches d'accentuation morte : '<dead-acute> is undefined'

En cherchant ce bug sur Google, on trouve ce lien : https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00167.html

Explication du problème : dans les versions récentes de b72

Emacs, the normal way to use accent keys does not work as expected. Trying to accent a word like 'fiancé' will produce the message above.

Une façon de résoudre ce problème est de mettre la ligne ci-dessus dans votre fichier de démarrage, ~/.emacs :

  (require 'iso-transl)

Et non, ce n'est pas un bug, mais une fonctionnalité des nouvelles versions d'Emacs. En lisant les messages ultérieurs à ce sujet sur la liste de diffusion, on trouve ceci (https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00179.html) :

Il semble que rien ne soit chargé automatiquement car il y a un choix entre iso-transl et iso-acc. Les deux semblent fournir une méthode d'entrée avec le préfixe C-x 8 ou Alt-<accent>, mais ce que vous et moi faisons, c'est juste appuyer sur une touche morte (^, ', `, ~, ¨) pour l'accent et ensuite une autre touche pour "composer" le caractère accentué. Et il n'y a pas de touche Alt utilisée dans ce cas ! Et selon la documentation, ça semble être approprié pour les encodages 8 bits, donc ça devrait être assez inutile en UTF-8. J'ai signalé ce bogue lorsqu'il a été introduit, mais il semble que le bogue soit classé comme une fonctionnalité ... Peut-être que c'est juste parce que le fichier est auto-chargé bien qu'assez inutile.

C-M-% et certaines autres raccourcis ne fonctionnent pas dans emacs nox

C'est parce que les terminaux sont plus limités que Xorg. Certains terminaux peuvent cependant gérer plus de raccourcis que d'autres. Deux solutions :

  • soit utiliser la version graphique,
  • soit changer le raccourcis pour un raccourcis prise en charge.

Exemple :

.emacs
(global-set-key (kbd "C-M-y") 'query-replace-regexp)

Emacs s'arrête

En raison de sa nature «single-thread», de nombreuses opérations bloquent Emacs. Cela peut se produire de plusieurs façons. Par exemple, Emacs peut être en attente d'une entrée de votre part (par exemple, vous avez ouvert le minibuffer dans une image mais vous essayez de travailler dans une autre). Il se peut aussi qu'Emacs soit en train d'exécuter un code qui prend simplement du temps à se terminer. Ou peut-être avez-vous rencontré un bogue. Il existe plusieurs façons d'essayer de débloquer Emacs sans tuer le processus Emacs.

  • Essayez d'appuyer sur C-g. Selon ce que fait Emacs, vous devrez peut-être appuyer plusieurs fois sur cette touche.
  • Essayez d'appuyer sur ESC ESC ESC.
  • Depuis un autre terminal, exécutez killall -SIGUSR2 emacs.

La sortie d'Emacs-nox devient désordonnée

Lorsque vous travaillez dans un terminal, la couleur, l'indentation, ou tout ce qui est lié à la sortie peut devenir fou. C'est (probablement ?) parce qu'Emacs a reçu un caractère spécial à un moment donné qui peut entrer en conflit avec le terminal actuel. Si cela arrive, vous pouvez faire M-x redraw-display, qui redessinera l'affichage du terminal. Si ce problème se produit fréquemment, vous pouvez lier la commande à une touche, par exemple en mettant quelque chose comme

(global-set-key (kbd "<f7>") 'redraw-display)

dans votre fichier .emacs.

Emacs graphique ne souffre pas de ce problème.

Affichage des nombres échappés étranges (utf-8) dans le terminal emacs

Exportez ces valeurs dans votre .bashrc ou .zshrc :

$ ~/.bashrc ou ~/.zshrc
export LANG\='en_US.UTF-8'
export LC_ALL\="en_US.UTF-8"
export TERM\=xterm-256color

Cela peut être une source d'erreurs car dans les distributions Linux, les valeurs correctes utilisent utf en minuscule (par exemple, en_US.utf-8).

Pour afficher toutes les locales disponibles, utilisez locale -a.

Les touches Shift + Flèche ne fonctionnent pas dans emacs avec tmux

Activez les touches xterm dans votre configuration tmux :

~/.tmux.conf
setw -g xterm-keys on

Comme cela va casser d'autres combinaisons de touches, mettez ce qui suit dans votre configuration emacs.

~/.emacs
(defadvice terminal-init-screen
  ;; The advice is named `tmux', and is run before `terminal-init-screen' runs.
  (before tmux activate)
  ;; Docstring.  This describes the advice and is made available inside emacs;
  ;; for example when doing C-h f terminal-init-screen RET
  "Apply xterm keymap, allowing use of keys passed through tmux."
  ;; This is the elisp code that is run before `terminal-init-screen'.
  (if (getenv "TMUX")
    (let ((map (copy-keymap xterm-function-map)))
    (set-keymap-parent map (keymap-parent input-decode-map))
(set-keymap-parent input-decode-map map))))

Consultez la FAQ de tmux pour plus de détails.

Redimensionnement incorrect des fenêtres dans KDE

Les utilisateurs de KDE peuvent observer que la fenêtre Emacs ne se redimensionne pas correctement, mais plutôt que la partie redimensionnée est transparente et les clics de souris sont envoyés à la fenêtre sous-jacente. Pour corriger ce comportement, modifiez le thème GTK3 de KDE à quelque chose d'autre que oxygen-gtk. Par exemple, utilisez le thème Emacs qui est inclus dans gtk3.

Pour forcer Emacs à s'agrandir complètement dans KDE, cliquez sur l'icône Emacs dans la barre de titre, et sélectionnez More Actions > Special Window Settings. Ensuite, dans l'onglet "Size & Position", sélectionnez "Obey geometry restrictions", choisissez "Force" dans le menu déroulant et sélectionnez "No" dans les boutons radio à droite.

Alternatives

Il existe de nombreuses "petites" implémentations d'Emacs. GNU/Emacs est probablement la plus populaire. Quelques alternatives légères compatibles avec Emacs sont listées ici :

  • mg — implémentation légère d'Emacs écrite en C. Notez qu'elle ne prend pas en charge UTF-8.
https://github.com/hboetes/mg || mg
  • Zile — "Zile Is Lossy Emacs", un clone léger écrit pour être aussi similaire que possible à Emacs. Zile ne prend pas en charge UTF-8.
https://www.gnu.org/software/zile/ || zileAUR
  • uemacs — Une version de "Micro-emacs" personnalisée par Linus Torvalds.
https://git.kernel.org/pub/scm/editors/uemacs/uemacs.git || uemacs-gitAUR
  • emacs-ng — Une nouvelle approche d'Emacs - incluant TypeScript, Threading, Async I/O, et WebRender.
https://github.com/emacs-ng/emacs-ng || emacs-ng-gitAUR

Voir aussi