Journal Emacs dans tmux en 24 bits de profondeur

Posté par (page perso) . Licence CC by-sa.
Tags :
22
11
juin
2019

Pour ceux que cela intéresse, qui utilisent Emacs dans une console (comme moi), une petit info.

Comme vous le savez sans doute, Emacs 26 en mode console supporte 24 bits pour les couleur. On peut maintenant utiliser les thèmes sans avoir des couleurs affreuses. Mais concrètement, comment fait-on?

Voici le contenu des deux fichiers, à sauvegarder par exemple dans "screen-24bits.tic" et term-24bits.tic:

    # Use colon separators.
    screen-24bit|xterm with 24-bit direct color mode,
      use=screen-256color-bce,
      setb24=\E[48:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
      setf24=\E[38:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
    # Use semicolon separators.
    screen-24bits|xterm with 24-bit direct color mode,
      use=screen-256color-bce,
      setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
      setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
    # Use colon separators.
    xterm-24bit|xterm with 24-bit direct color mode,
      use=xterm-256color,
      setb24=\E[48:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
      setf24=\E[38:2:%p1%{65536}%/%d:%p1%{256}%/%{255}%&%d:%p1%{255}%&%dm,
    # Use semicolon separators.
    xterm-24bits|xterm with 24-bit direct color mode,
      use=xterm-256color,
      setb24=\E[48;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,
      setf24=\E[38;2;%p1%{65536}%/%d;%p1%{256}%/%{255}%&%d;%p1%{255}%&%dm,

Ensuite, les compiler avec les commandes suivante:

tic -o ~/.terminfo -x screen-24bits.tic
tic -o ~/.terminfo -x term-24bits.tic

Maintenant, vous pouvez avoir Emacs dans tmux, en 24 bits…

export TERM=screen-24bit
emacs -nw

Thème kaolin-dark
Thème kaolin-light

L'avantage d'utiliser Emacs dans tmux est le multi-tâche, lorsque vous travaillez sur plusieurs projets en même temps. J'utilise le premier panel pour l'environnement local, et un autre pour chaque serveur distant.

Ensuite, basculer d'un projet à l'autre se fait très simplement en utilisant la notion de "session" de tmux, et en utilisant les touches Ctrl+B W:

Basculer entre les sessions

Jusqu'il y a quelque temps, j'utilisais screen dans tmux, mais là, je suis "limité" à 256 couleurs ;-)

Pour ceux que cela intéresse, mon tmux.conf est ici: https://gogs.rodier.me/andre/dotfiles/src/master/tmux.conf
Et mon ~/.emacs ici: https://gogs.rodier.me/andre/dotfiles/src/master/emacs-init.el

  • # C'est déjà 'dredi ?

    Posté par (page perso) . Évalué à 6.

    Cool ! Maintenant t'as des couleurs jolies dans un éditeur affreux !

  • # Screen dans tmux

    Posté par (page perso) . Évalué à 3.

    Jusqu'il y a quelque temps, j'utilisais screen dans tmux, mais là, je suis "limité" à 256 couleurs ;-)

    C'est quoi l'intérêt d'utiliser screen dans tmux?

    • [^] # Re: Screen dans tmux

      Posté par (page perso) . Évalué à 3. Dernière modification le 11/06/19 à 15:50.

      C'est quoi l'intérêt d'utiliser screen dans tmux?

      Bonne question.

      TLDR; tmux: une fenêtre par système distant. screen: une fenêtre par activité.

      Lorsque je fais de l'administration d'un système complexe, particulièrement lors de ma dernière position, chaque système était composé d'environ une dizaine de serveurs.

      J'avais donc une session tmux par système (AWS, google cloud, preprod, live, etc), et une fenêtre par serveur. Sur ces serveurs, tournent des programmes que je ne devais pas fermer, du style backup / restoration, journalctl -f, rsync, midnight commander, etc…L'utilité énorme de screen pour l'administration d'un serveur distant, ça se voit lors d'une coupure internet, ou lorsqu'on éteint sa machine le soir. On peut retrouver la session que l'on avait ouverte il y a plusieurs jours, avec les même programmes en train de tourner. Du coup, si vous avez suivi, il y avait bien screen dans tmux.

      Cela dit, j'ai utilisé screen dans tmux localement aussi. Lorsque l'on fait du multitâche, c'est assez pratique. Les onglets de gnome-terminal ne me plaisent pas. Les "panneaux" de screen ne prennent pas de place, on peut les renommer et les réorganiser directement. screen (tmux aussi, d'ailleurs) clignote lorsque il y a une activité dans une des fenêtres…

      J'ai souvent utilisé screen, avec Emacs dans la première fenêtre, une ligne de commande dans la seconde, et d'autres commandes locales ensuite, type midnight commander, journalctl -f, top, mutt, irssi, etc. sur les suivantes.

      Cela me permettait de travailler sans quitter le terminal ou quasiment sans avoir besoin de la souris. Je ne sais pas si c'est clair ou si ça peut s'imaginer.

      Maintenant, j'ai conscience que c'est un peu capilo-tracté, du coup, j'essaye de me limiter à tmux, en tout cas en local. J'ai remplacé screen par eshell dans emacs, pour l'instant, ça me parait faisable.

      • [^] # Re: Screen dans tmux

        Posté par . Évalué à 4. Dernière modification le 11/06/19 à 16:09.

        Mais pourquoi ne pas utiliser tmux dans tmux avec un préfixe différent tout simplement ?

        Mais bon perdo j'utilise plutôt tmux pour ce qui est distant et l'emulatrur de terminal kitty en local pour le tiling.

      • [^] # Re: Screen dans tmux

        Posté par . Évalué à 2.

        Je ne comprends toujours pas l’intérêt de tmux/screen dans tmux/screen… juste tmux/screen… ça suffit, non ?

        • [^] # Re: Screen dans tmux

          Posté par (page perso) . Évalué à 1.

          Je ne comprends toujours pas l’intérêt de tmux/screen dans tmux/screen… juste tmux/screen… ça suffit, non ?

          Toi pas comprendre. C'est screen dans tmux, c'est tout.

          Par exemple:

          - tmux
            - local pane: screen
              - w1: emacs
              - w2: bash
              - w3: mc
              - w4: journalctl -f
            - serveur 1: screen
              - w1: vi /etc/...
              - w2: bash (systemctl restart xxx)
              - w3: journalctl -f
            - serveur 2: screen
              - ...
            - serveur 3: screen
              - ...
          • [^] # Re: Screen dans tmux

            Posté par . Évalué à 0.

            Je trouve ça étrange en fait, quand je bosse sur des serveurs distants je démarre des tmux/screen/whatever sur le serveur et j’ai un "terminal physique" sur ma machine. Après j’utilise i3 pour me passer de la souris, c’est peut-être pour cela que tu colles tout dans un terminal virtuel.

            En fait je trouve ça étrange car ça ajoute une couche de raccourcis qui peut vite devenir encombrante.

          • [^] # Re: Screen dans tmux

            Posté par (page perso) . Évalué à 4.

            Toi pas comprendre. C'est screen dans tmux, c'est tout.

            ce que ruminant a voulu dire probablement c'est quel est l'interêt d'utiliser un multiplexeur de terminal (ex tmux, screen, ..) dans un multiplexeur de terminal (tmux, screen).

            Il y a un cas d'usage effectivement c'est pour combiner des terminaux de différentes sources, mais dans ce cas comme ça à été suggéré il existe des alternatives bien plus efficaces (window-manager dédié type i3, émulateur de terminal plus inteligent que xterm type tilix).

            J'avoue que mixer screen et tmux est une idée surprenante pour moi, tu pourrais utiliser tmux dans tmux pour tes besoins de terminaux résistants aux déconnections sur tes serveurs, et les fonctions de window-ing de tmux pour le "local pane"

  • # Utiliser Emacs à fond

    Posté par . Évalué à 2.

    J'utilise le premier panel pour l'environnement local, et un autre pour chaque serveur distant.

    Et sinon, pourquoi ne pas utiliser eyebrowse pour avoir un agencement par serveur et Tramp pour pouvoir éditer en local tes fichiers distants ?

    Plus besoin de tmux, plus de souci :)

    • [^] # Re: Utiliser Emacs à fond

      Posté par (page perso) . Évalué à 2.

      Je connais tramp.

      Il ne s'agit pas que d'ouvrir des fichiers distants, mais de laisser des programmes tourner sur le serveur distants, comme tail -f, top, iotop, pgtop, etc…

      J'ai essayé screen dans emacs, mais bon…c'est capillo-tracté.

  • # Merci pour le partage

    Posté par . Évalué à 4.

    Merci pour le journal, en particulier pour le partage de tes conf tmux et emacs. J'utilise aussi les deux (mais pas emacs dans un terminal). J'étais un grand utilisateur de screen, mais suite à un journal vu il y a quelques années sur linuxfr, je suis passé à tmux, et j'ai complètement abandonné screen. Je suis d'ailleurs toujours étonné du faible nombre d'utilisateurs de tmux à mon travail. J'ai sur ma TODO list de faire une présentation vidéo de tmux pour promouvoir son usage auprès de mes collègues.

    En tout cas, tu as vraiment une utilisation avancée de l'outil, à en juger tes screenshots (panels tmux). Et même ton screenshot emacs en mode console est impressionnant!

    • [^] # Re: Merci pour le partage

      Posté par . Évalué à 3.

      pas emacs dans un terminal

      Tu utilises emacs dans quoi ?!

      • [^] # Re: Merci pour le partage

        Posté par (page perso) . Évalué à 1.

        emacs fonctionne en mode graphique direct hein

        • [^] # Re: Merci pour le partage

          Posté par . Évalué à 3.

          Oui ok, il fonctionne en émulant un terminal.

          Je trouve ta formulation bizarre parce que dans le contexte il n’y a pas de différence entre un « vrai » terminal en mode texte et une émulation de terminal sous X.

          Que tu sois dans un terminal ou dans une émulation de terminal sous X emacs fonctionne exactement de la même manière, non ?

          Enfin bref, je chippotte…

          • [^] # Re: Merci pour le partage

            Posté par (page perso) . Évalué à 2.

            Oui ok, il fonctionne en émulant un terminal.

            Emacs-X11 était même un projet dédié à un moment, de ce que j'en sais il ne fonctionne pas du tout en se basant sur un émulateur de terminal…

            • [^] # Re: Merci pour le partage

              Posté par . Évalué à 3.

              Ah oui OK je vois. emacs X c’est plus qu’un emacs dans un émulateur de terminal (même si c’est en soi une émulation de terminal…).

              Meilleure gestion des fonts, des couleurs, on peut même afficher des images, etc…

              https://www.reddit.com/r/emacs/comments/8pqgtw/x_vs_terminal/

              emacs a donc son propre émulateur de terminal en fait.

              • [^] # Re: Merci pour le partage

                Posté par (page perso) . Évalué à 1.

                emacs a donc son propre émulateur de terminal en fait.

                inclus dans son système de "buffers" oui, notamment pour "emacs-shell". Mais c'est tout, il n'utilise pas une surcouche d'émulateur de terminal pour afficher les buffers

  • # Session vs Window

    Posté par (page perso) . Évalué à 2.

    Ensuite, basculer d'un projet à l'autre se fait très simplement en utilisant la notion de "session" de tmux, et en utilisant les touches Ctrl+B W

    En fait, non. Il s'agit de la notion de « Fenêtre » du client, choose-window, comme pour C-p et C-n.
    Pour changer de session à partir d'un client, c'est choose-session, soit C-s.

Suivre le flux des commentaires

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