Journal Quelques gemmes en CLI

Posté par  .
Étiquettes :
26
2
juin
2024

Salut nal',

Je propose de partager quelques outils en ligne de commande que j'ai découverts récemment, que je trouve particulièrement sympas et qui me semblent peu connus.

wezterm

Commençons par le terminal. Je suis depuis longtemps un utilisateur d'urxvt, mais à la fin de l'année dernière, j'ai voulu changer d'émulateur de terminal. J'avais entendu parler de kitty et d'alacritty, mais je voulais voir comment ça se passe ailleurs et je suis tombé sur wezterm. C'est un terminal qui se configure en lua et qui a la plupart des fonctionnalités des émulateurs récents (accélération graphique, possibilité d'afficher des images dans le terminal,…). Je le trouve plutôt cool, même s'il demande de la configuration pour être utilisable. Je n'ai pas utilisé sa gestion de session SSH que certains trouvent géniale. Mais j'ai eu l'occasion d'interagir avec le développeur principal qui est très sympa.

Site https://wezfurlong.org/wezterm
Code https://github.com/wez/wezterm
Licence MIT
Démarrage 2017
Développement un seul développeur qui accepte pas mal de contributions
Langage rust

ugrep

J’ai peut être raté une étape, mais pour moi la guerre des greps a commencé avec silversearcher alias ag. Le game a de mon point de vu rapidement était plié avec ripgrep qui est extrêmement rapide et qui a des comportements originaux qui si on accepte qu’ils sont différent du grep standard sont assez pratiques. Je suis tombé sur ugrep, une alternative très très cool. Déjà c’est un drop-in replacement à grep, il a les performances qui le classe dans le même groupe que rg, mais il a aussi beaucoup beaucoup de fonctionnalités. Par exemple il peut faire des recherches par fuzzing ou faire des opérations booléennes (par exemple FOO OR BAR qui peut se coupler avec des types de recherche). Petite chose sympathique, il est possible de sauvegarder sa configuration dans un fichier .ugrep. Pour les contributeurs c’est fait en C++.

Site https://ugrep.com/
Code https://github.com/Genivia/ugrep
Licence BSD 3 clauses
Démarrage 2019
Développement un seul développeur qui accepte pas mal de contributions
Langage C++

viddy

J’utilise watch pour certaines tâche d’administration système. Par exemple quand je dois manipuler un cluster (kubernetes, cassandra ou autre) j’aime bien avoir un terminal qui tourne en me donnant le résultat de la commande du status du cluster. Quand on attend le changement d’état d’un nœud c’est assez pratique. viddy fait ça avec quelques raffinements en plus. Les 2 qui m’intéressent le plus c’est celui qui met en surbrillance les changements et celui qui permet de parcourir les précédents résultats.

Code https://github.com/sachaos/viddy
Licence MIT
Démarrage 2021
Développement le développement a l’air au ralenti, les issues (dont la plupart demandent plutôt des nouvelles fonctionnalités) ne trouvent pas de réponses
Langage Go

hyperfine

La commande time est très utile, mais des fois la vitesse d’une commande peut être assez variable. hyperfine résous ça en lançant plusieurs fois la commande et en donnant des statistiques. C’est assez pratique et ça permet d’avoir le résultat quand les caches sont déjà chaud.

Code https://github.com/sharkdp/hyperfine
Licence double Apache 2 & MIT
Démarrage 2018
Développement un seul développeur
Langage rust

lsd

Je n’utilise pas de gestionnaire de fichier. À la place j’utilise mon shell, mais ça ne veut pas dire que je suis un moine qui veut tout voir en vert sur noir ! J’aime bien avoir des couleurs et que tout soit bien présenté. Après la mort de exa et un court passage sur eza, j’ai découverts lsd. Il a plus de fonctionnalité (il me semble) et peut être configuré (et j’aime bien configurer mes outils).

Code https://github.com/lsd-rs/lsd
Licence Apache 2
Démarrage 2018
Développement un seul développeur
Langage rust

zsh-vi-mode

J’ai récemment voulu réessayer les mode vi de zsh. Juste changer le binding n’est pas très confortable ne cerais-ce parce qu’on ne sait pas dans quel mod vi on se trouve. En chrechant des idées de configuration sympa je suis tombé sur un projet qui le réimplémente en corrigeant au passage un certains nombre de “petites” choses qui peuvent être inconfortable aux plus habitués de vi. Je trouve que ça fonctionne vraiment bien.

Code https://github.com/jeffreytse/zsh-vi-mode
Licence MIT
Démarrage 2020
Développement un seul développeur
Langage zsh
  • # LSD

    Posté par  (site web personnel) . Évalué à 5.

    ça a l'air génial, LSD ! Les icônes en fontes, j'adore.

    • [^] # Re: LSD

      Posté par  . Évalué à 2.

      J'ai testé lsd et c'est vraiment super pratique! Merci pour ce journal!

  • # vidir - Renommage/suppression rapide de fichiers au travers d’un éditeur de texte

    Posté par  . Évalué à 7.

    Je me permets de contribuer à ce bel inventaire avec vidir, dont je ne me lasse pas. En gros ça envoie la liste des fichiers du dossier courant ou une liste précise de fichiers dans votre éditeur de fichiers favori. De là, vous pouvez les supprimer (en virant la ligne correspondante) ou les renommer (en corrigeant la ligne correspondante)… et ce possiblement très vite et en masse, selon votre maîtrise de votre éditeur de texte. Sauvegardez le fichier (temporaire) et les modifications correspondantes seront appliquées.

  • # Bat

    Posté par  . Évalué à 5.

    Un autre outil sympathique dans la même veine: bat. C'est un cat avec de la coloration syntaxique, et qui par défaut montre le résultat dans un pager.

    • [^] # Re: Bat

      Posté par  (site web personnel) . Évalué à 3.

      Qui n'a pas de rapport avec l'autre logiciel B.A.T. (visuels)

      • [^] # Re: Bat

        Posté par  (site web personnel) . Évalué à 1.

        J'aime bien l'autocollant sur la couverture : en raison d'un problème de mémoire, cette version n'a ni bruitages ni simulateur de vol… Vive les jeux français !

    • [^] # Re: Bat

      Posté par  . Évalué à 2.

      Bat demande moins de configuration, mais je suis bien avec lesspipe pour ça.

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

  • # wezterm

    Posté par  (site web personnel) . Évalué à 3.

    Merci pour le lien, je ne connaissais pas.

    Il y a un paquet Debian ainsi qu'un dépôt, ça c'est cool. C'est pas si souvent que ce genre d'outils alternatifs se retrouvent packagés pour Debian.
    Pour ceux qui se posent la question : il est Wayland natif.

    J'ai fait une conf minimale rapidement ce matin (font, couleurs), il est plus rapide à se lancer que Kitty que j'utilisais jusqu'à présent.
    Ça se joue à pas grand chose et on pourrait penser que ça frise l'enculage de mouches, mais après être passé à Emacsclient, la petite seconde pour le lancement de Kitty était devenue plus visible.
    Là c'est instantané (~100ms), c'est plus confortable.

    Je suis pas rentré dans le détail pour le moment, mais dès que j'aurai un moment j'éplucherai la doc.

    There is no spoon...

    • [^] # Re: wezterm

      Posté par  . Évalué à 2.

      Merci pour le lien, je ne connaissais pas.

      Dans les terminaux actuels, il est difficile de se faire une place, mais j'ai l'impression qu'il monte doucement. Il est pas révolutionnaire, il n'a pas de killer feature, mais il fait bien tout ce qu'il fait j'ai l'impression.

      J'ai juste trouvé dommage qu'il ne semble pas avoir de gestion out of the box du clipboard et du coup j'ai un truc comme ça :

      function make_mouse_binding(dir, streak, button, mods, action)
        return {
          event = { [dir] = { streak = streak, button = button } },
          mods = mods,
          action = action,
        }
      end
      
      config.mouse_bindings = {
          make_mouse_binding('Up', 1, 'Left', 'NONE', wezterm.action.CompleteSelectionOrOpenLinkAtMouseCursor 'PrimarySelection'),
          make_mouse_binding('Up', 1, 'Left', 'SHIFT', wezterm.action.CompleteSelectionOrOpenLinkAtMouseCursor 'PrimarySelection'),
          make_mouse_binding('Up', 1, 'Left', 'ALT', wezterm.action.CompleteSelection 'PrimarySelection'),
          make_mouse_binding('Up', 1, 'Left', 'SHIFT|ALT', wezterm.action.CompleteSelectionOrOpenLinkAtMouseCursor 'PrimarySelection'),
          make_mouse_binding('Up', 2, 'Left', 'NONE', wezterm.action.CompleteSelection 'PrimarySelection'),
          make_mouse_binding('Up', 3, 'Left', 'NONE', wezterm.action.CompleteSelection 'PrimarySelection'),
      }

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

  • # D'autres, prinpalement en rust

    Posté par  . Évalué à 1. Dernière modification le 04 juin 2024 à 22:33.

    Voir les sources de cet articles: https://connect.ed-diamond.com/linux-pratique/lp-141/l-essor-de-nouveaux-outils-en-ligne-de-commandes-ecrits-en-rust

    Ou via ce repo Github: https://github.com/sts10/rust-command-line-utilities

    Note: Si vous en avez d'autres outils codés avec d'autres langages, il sont les biens venus.

    • [^] # Re: D'autres, prinpalement en rust

      Posté par  . Évalué à 2.

      Pour mieux expliquer ma démarche, ce qui m'a paru intéressant c'est de faire de la curation parler d'outils que j'utilise et qui me paraissent particulièrement intéressants. Une liste limitée d'outils que je trouve particulièrement intéressants et peu connus.

      Tu peut en trouver des profusions dans ton moteur de recherche, github ou gitlab : tu tape "awesome" + un mot clef que tu recherche (un langage ou un domaine) et tu tombe sur des tétrachiées d'outils.

      Ton premier lien est derrière un paywall.

      Les 2 approches sont pertinentes mais ne s’adressent pas tout à fais au même publique. Celle de la profusion permet à ceux qui veulent tester, découvrir et sont prêt à passer du temps alors que l'autre est plus pour les gens "pressés".

      https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll

      • [^] # Re: D'autres, prinpalement en rust

        Posté par  . Évalué à 2. Dernière modification le 07 juin 2024 à 00:01.

        Ton premier lien est derrière un paywall.

        C'est exacte mais j'ai bien prisée: dans les sources de l’article !

        Cependant je suis d'accord que l'on avait pas la même démarche et que cela peut être déroutant quand il y a quand il y a trop d'outils à tester ( ou trop de description à lire).

        Voici ceux que j'utilise.

        #puts a type indicator character at the end of special files’ names.
          alias ls='eza'
        # long list
          alias ll='eza -long --octal-permissions --time-style long-iso --git --icons=auto'
        #all files in list
          alias la='ll --almost-all'
        #all files in list sort by modified
          alias llm='la -s modified'
          alias llM='la -s modified --reverse'
        #all files in list sort by created
          alias llc='la -s created'
          alias llC='la -s created --reverse'
        #all files in list sort by size
          alias lls='la -s size'
          alias llS='la -s size --reverse'
        #as tree
          lstree() { eza -TL${1:-3} }
          alias lT='lstree'
        
        • alacritty - emulateur de terminal en combo avec zellij - multiplexeur de terminal.
          Alacritty "juste fonctionne", il ne sert que à ca, pas d'autre fonctionnalitées et c'est très biens comme ca.
          Zellij se raproche plus ou moins de tmux mais avec les racourcis clavier visible.

        • Bat sorte de cas mais avec coloration syntaxique. On en parle plus haut.
          Pour avoir, le même comportement que cat par defaut, on peut utiliser son fichier de configuration ou l'alias suivant cat='bat -pp'

        • delta - diff avec un affichage plus "moderne", peut aussi s’interfacer avec git (diff,merge,blam,…)

        • fd alternative à find, beaucoup plus rapide.

        • Et dans le cas où ces outils, qui sont tous écris en Rust, ne sont pas intégrés en tant que paquet pour votre distribution préférée, je vous invite à utiliser cargo-binstall et cargo-update. Ces outils vont vous permettre d'installer et de mettre à jours facilement les outils Rust qui vous intéresse.
          Par exemple après avoir installé cargo-binstall comme indiqué dans sa documentation, pour installer cargo-update: cargo binstall cargo-update et cargo install-update -a pour mettre à jours les outils. Les noms de ces outils sont à valider sur https://crates.io/.
          (Tiré du Linux Pratique cité dans mon premier message. )

        • ZK - A plain text note-taking assistant, ce coups ci, c'est du Go. Un outil en lignes de commandes pour gérer vos notes (votre second cerveau) sous forme de fichier markdown. Je l'utilise en parallèle d'Obsidian pour la version graphique.

        • [^] # Re: D'autres, prinpalement en rust

          Posté par  . Évalué à 2. Dernière modification le 07 juin 2024 à 00:19.

          J'ai oublié (toujours en Rust):

          • atuin une sorte de cd | history assez pratique. Après avoir installé l'outil, tout chemins des dossiers auquel vous accederez via z <chemon de votre dossier> seront stockées dans une base de données et classé selon leur fréquence d'accès. De cette manière, si vous accéder souvant à ~/dossier1/dossier11/dossier111, vous pourrez accéder depuis n'importe quel dossier courant à dossier111 avec z dossier111.
            Personnellement, j'ai créé l'alias suivant cd="z".
          • [^] # Re: D'autres, prinpalement en rust

            Posté par  . Évalué à 2.

            Ce que tu décris ressemble plutôt à zoxide : "A smarter cd command".

            Atuin c'est pour améliorer la gestion de l'historique shell : stockage, recherche, synchro. Pour cela moi j'utilise (une version modifiée de) hishtory.

Suivre le flux des commentaires

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