Journal Un noob et son Emacs: charger différentes configs au démarrage

Posté par  (site Web personnel) . Licence CC By‑SA.
Étiquettes :
16
21
mai
2021

Je t'en ai parlé y a pas longtemps, cher journal : aussi noob qu'il est possible de l'être sous Linux, je me suis dit que j'allais en même temps apprendre à utiliser Emacs.

Pourquoi une telle folie ? Parce que yolo. Et parce que j'aime bien l'idée de pouvoir me la péter au prochain repas de famille, quand jexpliquerai à ma mémé, devant toute la famille ébahie, comment utiliser magit pour gérer facilement ses recettes de cuisine — t'es la meilleure popoteuse de la galaxie, mémé — mais aussi comment elle pourra tchater sur mastodon avec ses copines du club échangistes — elles s’échangent des recettes de cuisine — et aussi comment elle pourra encore plus facilement suivre en temps réel les fluctuations du Bitcoincoin — personne ne prépare le canard mieux qu’elle. Tout cela, et le reste, sans avoir jamais besoin de quitter Emacs. Si cette fois elle me refuse encore une second part de tarte aux pommes…

J'ai donc de très bonnes raisons d'apprendre Emacs. Ceci étant posé, pourquoi diable quelqu'un qui n'aurait pas déjà au minimum 100 ans d'expérience dans Emacs et un doctorat en physique nucléaire voudrait-il pouvoir le démarrer avec différentes configurations ?

Des configs, mais pour faire quoi ?

  • Parce que est une raison valide, mais elle ne risque pas d'intéresser grand-monde ni, en fait, de me motiver moi-mêeme des masses pour chercher une soluton dans l'océan sans fin de guides et de docs dédiés à Emacs. Heureusement, j'ai d'autres raisons:
  • Pouvoir tester de nouveaux réglages — noob inside, n'oubliez pas — sans risquer de casser ma 'vraie' configuration de Emacs. Un bac à sable, quoi. Alors, oui, je sais que je devrais utiliser Git. J'ai commencé, en fait ! Mais c'est un peu lourd pour ce qui reste une config jetable (et puis, j'arrête pas d'oublier de faire des commits). Et, surtout, Git ne me sert à rien pour la dernière raison:
  • Pouvoir charger différents réglages selon ce que je veux faire dans Emacs (différents projets = différents besoins). Exactement ce que je fais déjà quand j'écris dans LibreOffice : Pourquoi et comment utiliser plusieurs profils d'utilisateurs dans LibreOffice Writer.

Je ne doute pas qu'il existe des solutions plus élégantes, plus éblouissantes et franchement moins insultantes au génie des brillants esprits qui ont fait et qui font Emacs, mais 1) je fais avec ce que j'ai, surtout en termes d'esprit 2) je n'ai pas trop envie de passer six mois à étudier les subtilités de Emacs avant de m'estimer en droit de commencer à le bidouiller, 3) ça marche 4) et comme ça ne m'a pas pris six mois de recherches pour la développer, je n'hésiterai pas à me débarrasser de cette solution dès que j'aurai quelque chose de mieux.

Comment faire ?

Simple : on indique à Emacs quel fichier de configuration il doit charger au démarrage. Comme ça :

emacs -q --load "~/.MyEmacsRealConfig/init.el"

ou bien

emacs -q --load "~/.MyEmacsTestConfig/init.el"

Et ainsi de suite, pour chaque config.

Moins moche, tu aurais ?

Bah, déja, on parle de Emacs. C'est pas vraiment l'incarnation du jeune premier au regard de braise qui fait fondre les cœurs. Ensuite, c'est pas moche, c'est juste un peu rêche aux entournures.

Pour rendre ça plus sympa, j'utilise la même méthode que pour LibreOffice (voir le lien plus haut): des fichiers .desktop. Un fichier pour chaque config différente. Par exemple :

Version=1.1
Type=Application
Name=Emacs Noob
Comment=Teach me, sensei.
Icon=applications-other
Exec=emacs -q --load "~/.MyEmacsTestConfig/init.el"

Encore une fois, y a certainement mieux. Mais ça fait même exactement ce dont j'ai besoin. Non seulement pour apprendre Emacs, mais aussi pour bosser avec Emacs : j'ai à présent une config différente pour écrire et prendre des notes, mais aussi pour quand je, hum, développe — aka, quand je joue au docteur Frankenstein avec des bouts de Elisp pas toujours très frais, récupérés ici et là sur le Web, que je colle ensemble un soir d’orage, dans mon fichier de configuration.

Ça marche si bien, que c’est comme si j'avais fait ça toute ma vie. D'ailleurs, je suis barbu, c'est la preuve que je sais de quoi je parle quand je cause Emacs.

  • # chemacs

    Posté par  . Évalué à 5 (+4/-0).

    chemacs te permet de choisir au démarrage un profil particulier pour ton lancement d'emacs :

    emacs --with-profile my-profile

    Cela enrobe un peu ta configuration, même si c'est fondamentalement la même chose que ce que tu as réalisé.

    • [^] # Re: chemacs

      Posté par  (site Web personnel) . Évalué à 3 (+2/-0).

      Merci, je vais sans doute tester ta méthode (rien que lire le readme, m'a appris des trucs sur la façon dont Emacs démarre).

  • # Avec Doom et Chemacs2

    Posté par  . Évalué à 5 (+3/-0). Dernière modification le 22/05/21 à 06:46.

    Merci, du coup je tente une installation de Doom aux côtés de ma config…

    https://github.com/hlissner/doom-emacs/blob/develop/docs/getting_started.org#install-doom-alongside-other-configs-with-chemacs2

    https://github.com/hlissner/doom-emacs

    … et c'est excellent O_o

    (edit: pris de vitesse à propos de chemacs)

    • [^] # Re: Avec Doom et Chemacs2

      Posté par  (site Web personnel) . Évalué à 4 (+3/-0).

      C'est clair que ces configurations ou versions pré-optimisées de Emacs ont de quoi séduire. Pourtant, j’ai choisi de me baser sur un Emacs de base, full configuré à la main… parce que j'ai peur de me retrouver à utiliser un truc super mais que je ne comprendrais pas/maîtriserais pas vraiment et ne m’aiderais pas à progresser comme je pourrais. Peut-être je me plante…

      Genre, afficher une arborescence sur le côté de la fenêtre c'est quelque chose que j'aimerais réussir à faire avec mon Emacs (ou encore changer la mode line) mais quand je tente de lire les fichiers de conf de Doom Emacs, ou autre, c’est juste… ok, je comprends que j’ai pas encore le niveau nécessaire. Faudra du temps ;)

      C’est sans doute le plus frustrant pour moi dans la décision d’apprendre Emacs : ma lenteur… J’ai commencé un channel Odyssee, en anglais, sur mon apprentissage d’Emacs et c’est pas par hasard que je l’ai intitulé Not the Brightest Bulb (pas l’ampoule la plus brillante) ;)

      • [^] # Re: Avec Doom et Chemacs2

        Posté par  (site Web personnel) . Évalué à 5 (+3/-0). Dernière modification le 22/05/21 à 14:19.

        Genre, afficher une arborescence sur le côté de la fenêtre c'est quelque chose que j'aimerais réussir à faire avec mon Emacs

        (use-package dired-sidebar
          :bind (([(f2)] . dired-sidebar-toggle-sidebar))
          :commands (dired-sidebar-toggle-sidebar)
          :init
          (add-hook 'dired-sidebar-mode-hook
                    (lambda ()
                      (unless (file-remote-p default-directory)
                        (auto-revert-mode))))
          :config
          (push 'toggle-window-split dired-sidebar-toggle-hidden-commands)
          (push 'rotate-windows dired-sidebar-toggle-hidden-commands)
        
          (setq dired-sidebar-subtree-line-prefix " >")
          (setq dired-sidebar-theme 'vscode)
          (setq dired-sidebar-use-term-integration t)
          (setq dired-sidebar-use-custom-font t))

        Je l'ai viré car

        • J'utilise pas ce genre de trucs, je trouve plus pratique de faire F4, ça m'affiche la liste des buffers ouverts suivie de la liste des fichiers récemments ouverts, et puis projectile… Bref ;
        • Ça crée un buffer par repertoire visité, c'est relou ;
        • Et maintenant il y a lsp-treemacs qui vient avec LSP, et qui fait la même chose mais en (beaucoup) mieux, déjà il est plus discret et laisse pas trainer des buffers partout, mais surtout il affiche les objets (fonctions, classes, variables, etc.) des fichiers :)
        (use-package lsp-treemacs
          :defer 2
          :bind
          ([(f2)] . treemacs))

        (ou encore changer la mode line)

        (use-package doom-modeline
          :init (doom-modeline-mode 1))

        PS avec ta bidouille d'aliases de conf à un moment tu vas probablement pourrir ton ~/.emacs.d ; si tu rencontres des trucs chelou efface-le avant de relancer Emacs.

      • [^] # Re: Avec Doom et Chemacs2

        Posté par  . Évalué à 2 (+0/-0).

        je tente de lire les fichiers de conf de Doom Emacs, ou autre, c’est juste… ok, je comprends que j’ai pas encore le niveau nécessaire. Faudra du temps ;)

        Encore heureux :p C'est tout l'intérêt du projet, c'est une conf qui a des années de travail à plusieurs et elle est faites pour s'adapter à pleins d'environnements etc. Il vaut mieux regarder leurs usages, chercher de ton côté comment le faire, éventuellement ensuite comparer.

  • # Paquets ELPA/MELPA et config perso

    Posté par  (site Web personnel) . Évalué à 5 (+4/-0).

    Un truc important à savoir si tu utilises une configuration personnelle (non basée sur Spacemacs, doom ou autre) et des paquets téléchargés depuis ELPA ou MELPA avec package.el (le système de paquets intégré à Emacs) : par défaut les téléchargements sont en clair (HTTP au lieu de HTTPS), et configurer explicitement la liste des dépôts avec des URLs en HTTPS n'est pas suffisant pour forcer la vérification des certificats SSL/TLS. C'est expliqué en détails dans cet article : Your text editor is malware.

    La solution que j'avais trouvée (depuis je suis passé à doom), c'était :

    1. télécharger un fichier de certificats racines à jour mis à disposition par le développeur de curl (en utilisant les certificats du système hôte pour ce premier téléchargement, c'est la ligne 8 dans ce script, donc à ajuster selon l'emplacement de ce fichier sur ton système) ; ce script ne télécharge pas le fichier si la version locale existe et n'est pas plus ancienne que la version sur le serveur
    2. dans la configuration d'Emacs, ajuster certaines variables de configuration, et surtout s'assurer que le script ci dessus est lancé à chaque démarrage d'Emacs (lignes 25-29 dans ce fichier de configuration ; ça ne ralentit presque pas le démarrage, puisque le téléchargement n'a lieu que si le fichier de certificats a été mis à jour), puis s'assurer qu'Emacs utilises bien ce fichier pour trouver les certificats TLS (lignes 31-32 ; d'ailleurs je m'aperçois que ce fichier n'est pas à jour sur GitHub, il faudrait bien sûr décommenter "~/.emacs.d/cacert.pem" dans cette liste)
    3. enfin, configurer package.el pour qu'il utilise les URLs en HTTPS pour les dépôts de paquets (lignes 9-23 dans ce fichier).

    Avec doom il n'y a pas besoin de faire tout ça car il n'utilise pas package.el : il clone les dépôts git des paquets directement. Et il me semble (mais à vérifier) que git opère bien la vérification des certificats SSL/TLS quand il clone ou fetch depuis une URL en HTTPS.

    • [^] # Re: Paquets ELPA/MELPA et config perso

      Posté par  (site Web personnel) . Évalué à 3 (+2/-0).

      Merci pour l'avertissement et les liens. Encore pas mal de lectures en perspective ;)

    • [^] # Re: Paquets ELPA/MELPA et config perso

      Posté par  (site Web personnel) . Évalué à 3 (+1/-0).

      Avec doom il n'y a pas besoin de faire tout ça car il n'utilise pas package.el : il clone les dépôts git des paquets directement.

      Oui, c'est ce que fait Straight.el également, que j'ai adopté immédiatement (avant j'utilisais package.el en http) so far so good, surtout associé à use-package.

    • [^] # Re: Paquets ELPA/MELPA et config perso

      Posté par  . Évalué à 3 (+1/-0).

      télécharger un fichier de certificats racines à jour mis à disposition par le développeur de curl (en utilisant les certificats du système hôte pour ce premier téléchargement, c'est la ligne 8 dans ce script, donc à ajuster selon l'emplacement de ce fichier sur ton système) ; ce script ne télécharge pas le fichier si la version locale existe et n'est pas plus ancienne que la version sur le serveur

      Je ne comprends pas très bien cette étape. Pourquoi celui de ta distribution ne suffit convient pas ? Dans le script tu demande à curl d'utiliser /private/etc/ssl/cert.pem, il sort d'où ce cacert ? curl.se est vérifié par let's encrypt qui est accepté par tous système que je connais.

      Je demande parce que les petits hack de ce genre ont plus tendance à me rendre méfiant que confiant. Ce qui n'est pas un mal en soit, mais disons que s'il y a un manque de confiance au trousseau fourni par la distribution ça apporte bien plus de question que de réponse (et il y a alors des solutions bien plus complètes).

      • [^] # Re: Paquets ELPA/MELPA et config perso

        Posté par  (site Web personnel) . Évalué à 3 (+2/-0). Dernière modification le 22/05/21 à 19:55.

        C'était parce que je suivais les recommandations de l'article que j'ai cité plus haut, mais que je voulais une solution plus simple que d'installer un paquet Python comme cet article le propose ("Step 3" dans l'article). Télécharger un unique fichier semblait bien plus facile, et le développeur de curl semblait être une source de confiance. Quand j'ai fait ça il y a quelques années, je n'y comprenais pas grand chose, donc je voulais faire au plus près de ce que l'article indiquait, et il ne mentionnait pas qu'il existe normalement un fichier central dans le système. Mais c'est sûr que c'est en fait bien plus simple (et le fichier de certificats que j'utilise pour télécharger dans ce script est celui du système). Je précise que je n'utilise plus cette configuration depuis un moment.

  • # Commentaire supprimé

    Posté par  . Évalué à 0 (+0/-0). Dernière modification le 22/05/21 à 12:08.

    Ce commentaire a été supprimé par l’équipe de modération.

  • # Avec des alias, c'est sympa

    Posté par  . Évalué à 5 (+3/-0).

    Perso j'utiliserais ta méthode avec le fichier de config en paramètre et je mettrais juste des alias pour me faciliter la vie.

    Sinon juste pour rebondir sur git qui ne te sert par car tu veux plusieurs configs en meme temps, détrompe toi, même si c'est un peu bourrin et que je ne ferais pas ça personnellement (quoique) tu peux très bien utiliser des branches différentes pour chaque config et du coup ton alias va faire un git checkout de la bonne branche avant de lancer emacs.
    Et si tu veux pouvoir en lancer 2 en même temps avec des profils différents, les git workspace te permettent d'avoir tes branches dans des dossiers différents même temps ;)

  • # Mise à jour importante

    Posté par  (site Web personnel) . Évalué à 2 (+1/-0).

    Pas si petite mise à jour que ça, en commentaire faute de pouvoir modifier le journal original.

    Poursuivant mes expérimentations, je réalise que si cette astuce marche pour un fichier de configuration simple, cela peut poser problème quand on installe des nouveaux packages (et probablement pour d'autres choses aussi): peu importe depuis ‘quel’ Emacs on les installe, ils seront téléchargés dans le dossier ~/.emacs.d par défaut.

    Il y a un souci similaire si vous utilisez le système des bookmarks de Emacs (C-x r b & Co.) pour accéder rapidement à certains fichiers. Par défaut, Emacs les sauvegardera tous au même endroit, quelle que soit la configuration avec laquelle on a démarré Emacs.

    En soi, c'est pas forcément un problème (autant éviter d’installer certains packages en deux exemplaires ou plus encore, et les bookmarks ben… ce sont que des bookmarks). Mais si on reste dans l'optique de se créer des configs vraiment indépendantes les unes des autres, on voudra peut-être éviter de rien mélanger.

    Solution ?

    Pour les packages

    Indiquer à Emacs qu'il doit utiliser un dossier spécifique pour chaque config (à ajouter et à adapter dans chaque fichier init.el, donc):

    (setq user-emacs-directory (file-truename "~/.emacsTestConfig/"))

    Pour ma config 'test', ou encore si j'utilise une Autre-Config :

    (setq user-emacs-directory (file-truename "~/.emacs-Autre-Config/"))

    J'imagine que ça concernera aussi d'autres choses que les packages, mais j'en sais trop rien.

    Pour les boomarks

    Dans chaque init, indiquer un nom de fichier + emplacement où l'enregistrer (merci, la doc Emacs):

    (setq bookmark-default-file "~/.emacsTestConfig/bookmarks"

    et

    (setq bookmark-default-file "~/.emacs-Autre-Config/bookmarks"

    • [^] # Re: Mise à jour importante

      Posté par  (site Web personnel) . Évalué à 4 (+2/-0). Dernière modification le 24/05/21 à 11:08.

      (setq bookmark-default-file "~/.emacs-Autre-Config/bookmarks"

      Beurk :)

      Avec des horreurs pareilles, si c'est pas dans ton .emacs.d, c'est dans ton cerveau que ça va vriller :)

      Sérieusement, pour faciliter ton apprentissage d'Emacs, tu as décidé de te faire plusieurs configs ; suggestion amicale : relis cette phrase calmement :D

      PS - plus personne n'utilise les bookmarks, ça date du temps des cartes perforées ; à la limite il y a les links d'org-mode, si tu insistes, mais je te conseille de laisser tomber les bookmarks.

      • [^] # Re: Mise à jour importante

        Posté par  (site Web personnel) . Évalué à 3 (+2/-0).

        Sérieusement, pour faciliter ton apprentissage d'Emacs, tu as décidé de te faire plusieurs configs ; suggestion amicale : relis cette phrase calmement :D

        Pas exactement, j'ai — très calmement — décidé de tester ce que j'apprends sur une config de test, une config que je peux foirer sans verser la moindre larme (d’où mon calme ;)

        PS - plus personne n'utilise les bookmarks,

        Je veux bien te croire. En fait, je n'ai aucun mal à te croire, mais c'est un des soucis avec Emacs: certaines docs sont aussi vieilles que les outils qu'elles documentent, et des outils/docs plus récents ne sont pas forcément mis en avant. Du moins pas d'une façon qui soit évidente à un noob tel que moi. Du coup, j'utilise les outils… que je trouve. Et ceux que je parviens à faire tourner:

        J'ai testé Dashboard, pour accéder rapidement à certains fichiers, avant de revenir sur les bookmarks… Pourquoi ? Parce que je n'ai jamais réussi à afficher sa page au démarrage de Emacs, en suivant la doc. Rien ne se passe, aucun message d'erreur.

        Comme souvent avec Emacs, je ne blâme pas l'outil mais plutôt mes propres limites. Je dois faire une connerie quelque part. Mais la trouver prend du temps (que je ne souhaite pas forcément y consacrer). Du coup, je mets l'outil de côté. Mais j'y reviendrai plus tard, j'espère. À lui, ou à un autre encore plus sympa. En attendant, j'ai un moyen immédiatement fonctionnel de créer/accéder à des favoris — et pour mes modestes projets d'écriture, ça ne semble pas me freiner que ce soit considéré comme obsolète ;)

        à la limite il y a les links d'org-mode, si tu insistes,

        Merci, je vais regarder ça. Y a tellement de choses à explorer et à apprendre… partout, dans tous les sens :p

        • [^] # Re: Mise à jour importante

          Posté par  (site Web personnel) . Évalué à 4 (+2/-0).

          certaines docs sont aussi vieilles que les outils qu'elles documentent

          C'est clair, une bonne façon d'éviter cet écueil est de privilègier les outils / modules / techniques récents ; Je viens de trouver cette collection de ressources pour écrire avec Emacs, il doit y avoir des pistes là-dedans.

          Quant aux bookmarks, s'il existent encore c'est qu'ils sont utilisés, la preuve ;)

          • [^] # Re: Mise à jour importante

            Posté par  (site Web personnel) . Évalué à 3 (+2/-0).

            Quant aux bookmarks, s'il existent encore c'est qu'ils sont utilisés, la preuve ;)

            ;P

            Et merci pour ce très chouette lien… Encore pas mal de lectures à prévoir ;)

            • [^] # Re: Mise à jour importante

              Posté par  (site Web personnel) . Évalué à 3 (+1/-0). Dernière modification le 24/05/21 à 23:46.

              Bienvenue parmi nous (parmi nous, parmi nous, chuchoté à l'unison dans la pénombre) trois trucs que j'aurai bien aimé savoir au début: C-g LE raccourci le plus important d'Emacs, pour stopper une interaction, et q pour go back / sortie des pages de doc / info, de magit, d'erreur C-h e (ah tiens, non) de (presque, donc) partout. C-x 1 pour fermer "les autres fenetres" et la vie est si simple, regarde.

              Ah, et remapper C-z sur undo-tree-undo.

              N'oublie pas bien sur de verser une once de sang à chaque équinoxe… Je crois qu'on a fait le tour ?

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n’en sommes pas responsables.