Gil Cot ✔ a écrit 5730 commentaires

  • [^] # Re: Elm

    Posté par  (site web personnel, Mastodon) . En réponse au lien Un langage de plus : Roc. Évalué à 2.

    Brouillon pour vendredi : c’est là que Lisp te désambigüe tout ça…

    si fct prends 3 paramètres,

    (fct a b c)

    si b est une fonction qui prend c en paramètre et fct prend 2 paramètres (a et le résultat de b),

    (fct a (b c))

    si b c est bien une fonction b qui prend en paramètre c, mais qui sera évalué paresseusement et fct prend en fait 2 paramètres a et une lambda,

    (fct a (lambda (b c)))

    etc

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: merci et venv

    Posté par  (site web personnel, Mastodon) . En réponse à la dépêche L’installation et la distribution de paquets Python (1/4). Évalué à 3.

    Autre dinosaure ici : je reste à make car présent partout et que la plupart des trucs alternatifs ont la compatibilité avec. Par contre, pour la compatibilité justement (merci pour la découverte) et pour ma tranquillité d’esprit surtout, je fais au plus simple.
    Quand j’ai besoin de trucs plus poussés je regarde cmake. J’ai probablement de la chance de ne pas avoir souvent de besoin un peu avancé, du coup je ne me suis pas trop intéressé aux alternatives qui existent.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Un contrat pour toute relation?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Macron s'oppose à l'Europe qui voudrait que le viol soit caractérisé par l’absence de consentement . Évalué à 2.

    Toute façon, quand tout le monde constate que la courtoisie s’est perdue c’est signe qu’il faut arrêter l’échange…

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Un contrat pour toute relation?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Macron s'oppose à l'Europe qui voudrait que le viol soit caractérisé par l’absence de consentement . Évalué à 4.

    Tu dis en gros que tu observes dans la nature que les mâles sont violents. Tu en conclus que forcément c'est un comportement transmis à l'être humain.

    L’observation est vraie « en gros » (et il y a des « exceptions » …comme chez les hyènes)
    Le raisonnement par contre est faux on est d’accord ; c’est un biais (ou peut-être une tentative malhonnête de justifier un avis par la fameuse « appel à la nature » ?) ou une erreur de raisonnement (courante celle-ci en partant de la conclusion et picorant des trucs pouvant justifier le résultat que l’on souhaite)

    tu n'as aucun élément pour conclure sérieusement que le comportement "hommes plus violents que les femmes" est due à un mécanisme biologique (je parle de l’asymétrie homme-femme, pas de l'existence de la violence en elle-même). Ça l'est peut-être, mais c'est peut-être dû à une construction sociale.

    Il se trouve que cela a été étudié et documenté par les scientifiques : d’une part la violence est biologique (pour faire court, on ne survit pas dans la nature sans cela) et sa propension est corrélée au sexe biologique… Plus précisément au taux de testostérone (attention, je ne fais pas le/la raccourci/simplification qu’il n’y a que ça et je parle bien de corrélation car c’est un facteur important mais pas la seule.) Mais effectivement cela ne se traduit pas automatiquement en attribution masculin-vs-féminin (toujours chez les hyènes, la femelle est bien plus violente que le mâle et ça vérifie la corrélation puisqu’elles ont plus de testostérone.)
    L’aspect biologique n’enlève rien à la part sociale : en fait les deux ne s’opposent pas (c’est orthogonal) et c’est le développement de cet aspect qui fait que nous faisons appel à la police ou finissons au tribunal au lieu de se taper dessus pour résoudre les conflits. L’influence sociale est présente chez tous les animaux qui vivent en groupe, et elle est prépondérante chez les humains.
    Ayant dit (pardon écrit) cela, faudra que je repasse pour vous mettre quelques références (de préférence sur la toile même si j’en ai en papier au fond des cartons.)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Un contrat pour toute relation?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Macron s'oppose à l'Europe qui voudrait que le viol soit caractérisé par l’absence de consentement . Évalué à 2.

    Les vrais scientifiques qui travaillent sur ces questions tiennent très très bien en compte l'origine biologique. Le problème ici c'est que tu ne sais pas de quoi tu parles, tu vois ces scientifiques dire "ok, je donne 45% à cette hypothèse et 55% à celle-là" et tu te met à crier "comment est-ce possible!

    En lisant, je n’ai pas eu l’impression que c’étaient les scientifiques qui étaient attaqué-e-s ; mais j’ai peut-être mal lu et mal compris ? Les propos de la marotte semblent faire écho à des discours ambiants : donc soit limité à ses cercles-et-fréquentations (et à moins de travailler dans le domaine, les collègues ne représentent pas les scientifiques) soit à sa perception d’un discours plus global (et même là le pire côtoie le meilleur, surtout que dans les médias et le bruit public ce ne sont pas les scientifiques que l’on entend …mais des gens avec des convictions et des gens avec des agendas idéologiques/politiques/religieux/etc.)
    Là dessus, le discours ambiant en France est que absolument tout est lié uniquement au social (en tout cas pour les mouvements féministes) alors que la science est plus nuancée.

    quand quelqu'un sort des clichés qui ne correspondent pas du tout à ce qui est observé, c'est légitime de dire que cette personne se plante

    J’ai bien l’impression que vous êtes dans le même camp ; sauf que vous n’observez pas la même chose que ce que l’on dit autour de vous.
    Et attention à cet argument de « ce qui est observé » …c’est pour cela que la science va parfois-souvent contre le bon sens ou les observations légitimes (pensez par exemple à la chute des corps par exemple.)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: blog

    Posté par  (site web personnel, Mastodon) . En réponse au journal Découvertes de logiciels libres - été 2023. Évalué à 2.

    Des supers ? :)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Motif d'une attaque aujourd'hui

    Posté par  (site web personnel, Mastodon) . En réponse au lien Après quatre jours de cyberattaque, le site de Blender passe derrière Cloudflare. Évalué à 2.

    Hé hé, comme lui répète souvent sa femme Colombo, à qui profite le crime ? ;)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # des listes et grep

    Posté par  (site web personnel, Mastodon) . En réponse au message Tous les fichiers texte dans un même buffer vim/neovim. Évalué à 10.

    Pour modifier ou chercher dans le document il faut donc que j'ouvre chaque fichier indépendamment

    Autant tu as besoin d’ouvrir les fichiers pour les modifier, autant ce n’est pas nécessaire pour y chercher : vi (dont vim est une évolution) est prévu pour travailler avec le shell…!

    :w !grep 'motif' *

    Ici, j’utilise * pour dire tous les fichiers du répertoire courant (le répertoire de travail, celui dans lequel tu as lancé l’éditeur …à ne pas confondre avec le répertoire effectif du fichier en cours d’édition ou autres emplacements.) On peut bien entendu spécifier tout autre chemin qui sera compris du shell (dans ton cas, je pense que ce serait à minima *.md si tes fichiers markdown utilisent cette extension.)

    Ceci va juste afficher le résultat de la recherche, avec le message « Press ENTER or type command to continue » (traduit dans la langue configurée…) Pour plusieurs opérations de suite, on peut temporairement revenir au shell en mettant l’éditeur en pause en arrière plan avec Ctrl+z ou (ça fait la même chose, sous Unix-like)

    :stop

    ou (c’est un synonyme plus évocateur)

    :suspend

    Traditionnellement, il est possible d’ouvrir un sous-shell (c’est le comportement de Ctrl+Z sur la plupart des plateformes non Unix-like) avec

    :shell

    (qui dit sous-shell dit que l’on revient à l’éditeur quand on termine ce shell, normalement/habituellement par exit ou équivalent.)

    Les éditeurs modernes permettent d’avoir un/une encart/zone (un/une cadre/vue au sens de Vim) de terminale. C’est aussi possible avec NeoVim et Vim ≥ 8.1

    :terminal

    (en fermant le terminal, par exit ou équivalent, on ferme le/la cadre/vue associée aussi.)
    Cette dernière possibilité est considéré comme une « super fonctionnalité » (i.e. killer feature dans la langue de Shakespeare) par les gens qui l’utilisent mais c’est un autre débat.

    Avec un sous-shell ou un terminal, ou en revenant temporairement dans son shell, on peut faire nos modification avec les outils classiques…

    $ grep -l -z 'motif' * | xargs -0 sed -i '.bkp' -e 's/\<truc\>/machin/g'
    $ # ou, si l'on préfère
    $ sed -i '.bkp' -e 's/\<truc\>/machin/g' $(grep -l 'motif' *)

    Mais je comprends que ce soit moins sexy que d’opérer directement depuis l’éditeur, quoique.


    Si au lieu de lister les fichiers tu veux plutôt les ouvrir, il fallait traditionnellement le faire depuis le shell (en passant la liste des fichiers à ouvrir à vi ainsi)

    $ # lister les fichiers contenant le motif...
    $ # ...et lancer l'éditeur avec cette liste
    $ vi $(grep -l 'motif' *)

    Même remarque pour * ici (qui devrait être *.md ou autre que je te laisse adapter)
    Ici, il est important de faire une petite mise au point : on crée (originellement) autant de tampons que de fichiers. Du coup un peu normal et inévitable

    et je me retrouve avec un tas d'onglets et de buffers séparés

    Beaucoup ne le savent pas, mais c’est géré de base (à vérifier mais il me semble que c’est dans POSIX, en tout cas c’est implémenté dans nvi) ; Pour naviguer dans la liste de fichiers c’est aussi simple que :

    • :next pour basculer sur le fichier suivant de la liste
    • :previous pour basculer sur le fichier précédent de la liste
    • :first (ou :rewind) pour se positionner sur le premier fichier de la liste
    • :last pour se positionner sur le dernier fichier de la liste

    Vim et ses dérivés rajoutent :

    • :Next pour basculer sur le fichier précédent de la liste (dans nvi, :Next et :Previous créent un/une cadre/vue en dessous et y ouvre le tampon ; dans vim, on a repris la similitude des commandes n et N…)
    • :args pour lister les fichiers avec le fichier courant entre crochets
    • :Nargedit ou :Nargument pour basculer sur le fichier en position N
    • :argeditF pour basculer sur le fichier nommé F
    • :NargaddF pour ajouter le fichier F en position N (optionnel, par défaut après fichier courant)
    • :Pargdelete pour retirer les fichiers en position P (en fait c’est une plage au sens ex… et c’est la position actuelle par défaut)
    • :argdeleteF pour retirer les fichiers correspondant au motif F
    • :wprevious ou :wNext, et :wnext, font un :w (et on peut indiquer un fichier alternatif) puis la commande (c’est dans le même esprit que :wq)
    • :PargdoX pour appliquer une commande X (au sens ex… sans les deux points) aux fichiers en position P (c’est en fait une plage au sens ex… et c’est tous par défaut)

    Ce dernier va t’intéresser car si tu veux faire le remplacement du mot « truc » par « machin » dans tous ces fichiers ouverts, ça revient donc à l’incantation suivante :

    :%argdo %s/\<truc\>/machin/ge | update

    Vim a une subtilité (que je n’ai pas listé plus haut et) que tu peux utiliser avant de lancer ton incantation : il est possible de modifier la liste d’arguments …en argument de args …ou en jouant avec argadd et argdelete si on préfère. Bien entendu, cela impacte toutes les autres commandes qui se basent sur cette liste. Ainsi, par exemple avant de faire le argdo précédent, on peut restreindre la liste (et se positionner sur le premier de la nouvelle liste) des fichiers par (cela accepte les globs du shell)

    :args chap0?.md

    Une autre précision s’impose. J’avais laissé entendre que tous les fichiers sont chargés en mémoire. Il s’agit là des implémentations naïves, mais en pratique on va travailler avec une liste chainée de tampons sur laquelle on va « cycler » et éviter ainsi de saturer la mémoire. Le tampon (ou buffer en anglais) représente le contenu en mémoire (comprendre en cours de manipulation et donc pas l’état réel du fichier tant que la mémoire n’est pas écrite dans le fichier.)
    Vim et d’autres vont plus loin que les codes historiques et distinguant la liste d’argument (dont je viens de parler) de la liste de tampons. Il y a donc d’autres commandes pour naviguer dans cette seconde liste et c’est tout aussi simple que

    • :bnext pour basculer sur le tampon suivant de la liste
    • :bprevious (ou :bNext) pour basculer sur le tampon précédent de la liste
    • :bfirst (ou :brewind) pour se positionner sur le premier tampon de la liste
    • :blast pour se positionner sur le dernier tampon de la liste
    • :buffers (ou :files ou :ls) pour lister les tampons dans quatre colonnes : rang, statuts, fichier, dernière position
    • :bufferN pour basculer sur le tampon numéro N
    • :bufferF pour basculer sur le tampon nommé F
    • :bmodified pour basculer sur le tampon suivant ayant été modifié

    Jusque là ça va… On peut manipuler aussi cette liste, sauf que là on agit effectivement sur les fichiers manipulés (contrairement à la liste d’arguments qui est décorrélée une fois l’éditeur lancé et les fichiers chargés —les deux listes sont donc égales au départ)

    • :baddF (ou :baltF ?) pour ajouter le fichier F à la liste
      (mais comme on fonctionne en mode un peu « lazy », il ne sera chargé en mémoire que lorsqu’on en aura vraiment besoin.)
    • :editF n’est pas propre à vim (c’est requis par POSIX) et sert à remplacer le tampon courant par celui du fichier F optionnel (quand aucun chemin n’est indiqué ça recharge le même tampon)
    • :Nbdelete (ou :bdeleteN) pour retirer le(s) tampon(s) en position N (la seconde forme permet d’indiquer plusieurs positions séparées par des blancs, la première forme peut être une plage début,fin inclus) de la liste.
    • :bdeleteF pour retirer le fichier F de la liste.
    • bdelete fonctionne en « lazy » : la mémoire utilisée n’est pas libérée immédiatement, et certaines données associées sont gardées actives (c’est bien utile la plupart du temps.) Il faut remplacer par bwipeout à la place pour effectivement tout virer, et bunload à la place pour au contraire retirer de la mémoire mais pas de la liste. Ce sont des subtilités d’usage avancé qu’on a rarement besoin de connaitre.
    • :PbufdoX pour appliquer une commande X (toujours au sens ex… sans les deux points) aux fichiers en position P (toujours une plage au sens ex… et c’est tous par défaut)
      C’est ici que le fait d’avoir deux listes fait sens : si on veut agir sur tous les fichiers en cours de travail, alors bufdo ; sinon on peut jouer avec une liste d’arguments aux oignons puis argdo ; et ce n’est pas tout… Ceci dit, il faut une certaine pratique et de la rigueur pour ne pas se mélanger les pinceaux entre ces deux listes.

    Les commandes de navigation dans les tampons ont des équivalents, préfixé par s pour en plus créer un/une cadre/vue avant de faire la bascule demandée : :sbuffer, :sbnext, :sbNext, :sbprevious, :sbrewind, :sbfirst, :sblast, :sbmodified.
    À cela s’ajoute deux commandes qui vont réorganiser l’écran pour afficher chaque tampon dans un/une cadre/vue …avec un maximum de N cadres/vues si mentionné (cet argument reste optionnel donc) :

    • :unhideN (ou :sunhideN qui est synonyme) pour les tampons chargés en mémoire
    • :ballN (ou :sballN qui est synonyme) pour tous les tampons de la liste

    Précision de vocabulaire : j’écris tout le temps « un/une cadre/vue » parce-que dans l’univers vi quand on parle de fenêtre (ou window en anglais), il ne s’agit pas des feuilles des interfaces graphiques mais bien de la portion d’écran —que je préfère appeler vue/cadre (ou frame/view en anglais)— qui affiche une portion du tampon… On peut partager (soit split en anglais) l’écran —ou le cadre courant— horizontalement ou verticalement, et chaque zone/cadre peut afficher un tampon différent …ou pas (on peut très bien avoir plusieurs vues différentes sur un même tampon, c’est le cas quand on fait un diff graphiquement…)

    $ # ...chaque fichier de la liste dans un/une cadre/vue...
    $ # soit -o (minuscule) horizontalement
    $ # soit -O (majuscule) verticalement
    $ # et on peut accoler la limite maximale de division
    $ vim -o $(grep -l 'motif' *)

    Pour naviguer dans les cadres/vues, il faut utiliser une séquence de touches commençant par Ctrl+w (à l’usage, c’est plutôt plus efficace que ça n’y parait) :

    • Nw (comme window mais on est dans le contexte vi) : pour se rendre le/la cadre/vue qui suit de N rangs (optionnel et vaut un par défaut) dans la liste
    • Shift+w (idem, mais on a repris la similitude des commandes n et N) : pour se rendre sur le/la cadre/vue qui précède de N rangs (optionnel et vaut un par défaut) dans la liste
    • t (comme top) : pour se rendre sur le/la cadre/vue qui se trouve au sommet de la liste (c’est le plus en haut et le plus à gauche)
    • b (comme bottom) : pour se rendre sur le/la cadre/vue qui se trouve en bas de la liste (c’est le plus en bas et le plus à droite)
    • p (comme previous) : pour se rendre sur le/la cadre/vue d’où l’on provient

    Les cadres/vues sont numérotés de haut en bas et de gauche à droite, du plus bas niveau au plus haut niveau… En général on s’en sort facilement si on ne fait pas quelque chose de trop compliqué…
    Pour la création, on a trois cas prévus :

    • Soit Ctrl+w puis s (ou Ctrl+s), soit :split, pour partager horizontalement le/la cadre/vue en cours en deux partie égales et charger le même tampon dans la nouvelle zone (au dessus) et s’y positionner.
    • Soit Ctrl+w puis n (ou Ctrl+n), soit :new, pour partager horizontalement le/la cadre/vue en cours en deux partie égales et se positionner dans la nouvelle zone (au dessus) vide.
    • Soit Ctrl+w puis v (ou Ctrl+v), soit :vsplit, pour partager verticalement le/la cadre/vue en cours en deux partie égales et charger le même tampon dans la nouvelle zone (à gauche) et s’y positionner.
    • Soit :vnew, pour partager verticalement le/la cadre/vue en cours en deux partie égales et se positionner dans la nouvelle zone (à gauche) vide.

    La forme ex permet d’indiquer en suffixe un chemin de fichier à associer au nouveau cadre, et en préfixe la dimension (nombre de lignes horizontalement ou nombre de colonnes verticalement) au lieu de faire fifty-fifty.
    Pour la fermeture, il y a trois cas aussi :

    • Soit soit :quit, pour fermer le/la cadre/vue en cours, et le programme (ou l’onglet) si on ferme le/la seul/seule qu’il reste.
    • Soit Ctrl+w puis c, soit :close, pour fermer le/la cadre/vue en vue en cours, sauf si c’est le/la seul/seule de la liste.
    • Soit Ctrl+w puis o, soit :only, pour fermer tous/toutes cadres/vues sauf celui/celle en cours.

    Il est prévu aussi de pouvoir les redimensionner ou les réorganiser. Mais venons au plus important ici : :PwindoX permet d’envoyer la commande X (toujours au sens ex et sans les deux-points) à tous les cadres. Elle est pas belle la vie ?

    et je me retrouve avec un tas d'onglets et de buffers séparés

    Tu utilises probablement gvim avec une configuration pour faire comme les autres éditeurs en associant un fichier à un onglet. En fait, Vim et ses dérivés sont plus puissants/subtiles : un onglet (ou tab en anglais) est en fait un groupe de cadres/vues… Là où les autres éditeurs utilisent les onglets (ou une liste de fenêtres) pour donner accès aux tampons, il s’agit dans Vim d’espaces de travail que je comparerais à des branches Git.
    Bien qu’on ne sache pas afficher plusieurs onglet en console (plus précisément dans le l’interface austère héritée de vi sinon on sait faire des interfaces graphiques en console, comme celui de MC ou MinEd ou LE etc.) Vim et ses dérivés savent gérer ces groupes en CLI (c’est un poil ardu sans repère visuel, mais :set showtabline est ton amie.)

    $ # ...chaque fichier de la liste dans un groupe/page-tab...
    $ vim -p $(grep -l 'motif' *)

    La navigation dans les groupes (ou page-tabs dans la documentation de Vim) se fait de manière commune aux tampons.

    • :tabnext pour basculer sur l’onglet suivant de la liste
    • :tabprevious (ou :tabNext) pour basculer sur l’onglet précédent de la liste
    • :tabfirst (ou :tabrewind) pour se positionner sur le premier onglet de la liste
    • :tablast pour se positionner sur le dernier onglet de la liste
    • :tabs pour lister les onglets

    Pour la gestion des onglets, les commandes sont simples aussi et se rapprochent plus de celles des cadres.

    • :Ptabclose ou :tabcloseP ferme l’onglet en position P optionnelle (par défaut l’onglet courant)
    • :Ptabonly ou :tabonlyP ferme tous les onglets sauf celui en position P optionnelle (par défaut l’onglet courant)
    • :Ntabmove ou :tabmoveN déplace l’onglet courant après celui du rang N optionnel (par défaut le dernier)
    • :tabmove±N déplace l’onglet courant de ±N rang par rapport à sa position actuelle
    • :NtabeditF ou :NtabnewF ouvre un nouvel onglet après celui de rang N optionnel (par défaut l’onglet courant) et y charge le fichier F optionnel (quand on n’indique pas de fichier on a un onglet vide.)
    • :PtabdoX enfin, permet d’appliquer la commande X (toujours au sens ex et toujours sans les deux-points) à l’onglet de rang P (en fait une plage ex) optionnel (par défaut tous les onglets)

    Bref, plusieurs pistes selon ton choix d’organisation.


    Vim et NeoVim ont une notion intéressante que l’on peut mettre à profit : les « quick fix » ! C’est une fonctionnalité que l’on trouve dans beaucoup d’EDI, mais ici c’est ouvert (donc adaptable à d’autres langages de programmation et pouvant être détourné pour d’autres usages comme ici.) L’idée, empruntée au compilateur Aztec C, est de capturer les messages d’erreur (de compilation) et de sauter aux emplacements pointés. Il faut bien entendu indiquer comment décortiquer ces messages (de compilation), et ça se fait en déclarant errorfile ; mais nous n’avons pas besoin de le faire car la forme « fichier:ligne:message » fait partir des formats reconnus par défaut.

    $ # enregistrer les occurrences du motif...
    $ grep -n 'motif' * >/tmp/resultats.list
    $ # utiliser cette liste comme option de quickfix
    $ vim -q /tmp/resultats.list

    Au lancement, l’éditeur ouvre le premier fichier et se positionne sur la première ligne incriminée pour permettre de faire les corrections. Il faudra ensuite sauter aux autres lignes incriminées pour faire les corrections qui vont bien.

    • :Ncnext pour sauter de N optionnelles (par défaut 1) rang en avant
    • :Ncprevious ou :NcNext pour sauter de N optionnelles (par défaut 1) rang en arrière
    • :crewindN pour sauter au rang N optionnel (par défaut 1) exactement
    • :cfirst pour sauter au premier rang
    • :clast pour sauter au dernier rang
    • :clist pour afficher la liste utilisée (ici, ce sera notre fichier préfixé des rangs utilisés un peu comme cat -n /tmp/resultats.list ou nl /tmp/resultats.list)

    On remarque que la dernière ligne affiche (je suis en anglais) « (rang-courant of lignes-total): message » (dans notre cas le message est juste la ligne grepée et ça reste utile pour comparer visuellement avec la ligne modifiée dans le tampon.)
    On remarque aussi que lorsqu’on avance ou recule dans la liste (d’erreurs), les fichiers sont chargés automatiquement (avec ajout dans la liste des tampons évoqué plus tôt.) Si l’on veut se restreindre au tampon en cours, pas besoin de compter et surveiller ; il suffit, sous réserve que la liste soit triée (par tampon et par ligne et colonne), de :

    • remplacer :Ncnext par :Ncafter (après/suivant) ou par :Ncbellow (dessous)
    • remplacer :Ncprevious/cNext par :Ncbefore (avant) ou par :Ncabove (dessus)

    Quand on a réalisé toutes les modifications dans le tampon courant, pas besoin de compter et surveiller pour passer à un tampon voisin ; il suffit, sous réserve que la liste soit triée (par tampon et par ligne et colonne), d’utiliser

    • :Ncnfile pour sauter à la première ligne fautive dans le Nième tampon après celui courant (optionnel, par défaut le suivant), et si on est déjà sur le dernier alors la Nième ligne fautive (par défaut la suivante)
    • :Ncpfile ou :NcNfile pour sauter à la première ligne fautive dans le Nième tampon avant celui courant (optionnel, par défaut le précédent), et si on est déjà sur le premier alors la Nième ligne fautive (par défaut la précédente)

    Quand la correction est une action simple, on peut la répéter à un autre endroit fautif en utilisant . Pour des actions plus complexes, ne pas oublier qu’il y a la possibilité d’enregistrer et utiliser des macros.
    Quand la correction est la même partout, pas besoin de travailler interactivement ; on a encore la possibilité de passer une commande X (toujours au sens ex) à une plage P (toujours au sens ex) de la liste :

    • :PcdoX pour agir sur les lignes incriminées
      (on fait un :cfirst, puis on boucle avec la paire :X et :cnext)
    • :PcfdoX pour agir sur les fichiers incriminés
      (on fait un :cfirst, puis on boucle avec la paire :X et :cnfile)

    Cela se traduit, avec notre même exemple, par :

    :cdo s/\<truc\>/machin/ge | update

    (on fait un update à chaque modification de ligne et non en changeant de tampon, mais je ne sais pas comment faire mieux) ou par :

    :cfdo %s/\<truc\>/machin/ge | update

    Comme les autres listes déjà rencontrées, il y a d’autres commandes pour la manipuler.
    Pour commencer, on peut réduire la liste en utilisant un plugin natif (mais inactif par défaut) et un motif à la Vim…

    • :Cfilter /à-garder/
    • :Cfilter! /à-virer/

    Ainsi par exemple, si on ne veut pas que notre remplacement s’applique aux lignes de la liste (cela s’applique donc indifféremment aux chemins de fichiers et aux messages) qui ne contiennent pas le mot “bidule”, il faut au préalable réduire la liste avec :

    :packadd cfilter
    :Cfilter! /\<bidule\>/

    Pour poursuivre, il n’est pas nécessaire de lancer l’éditeur avec la quick list (option -q) ; on peut charger le fichier dynamiquement.

    • :cfileF pour construire la liste avec le contenu de F puis se positionner sur la première ligne pointée
    • :cgetfileF pour construire la liste avec le contenu de F mais ne saute pas à la première ligne incriminée
    • :caddfileF pour augmenter la liste avec le contenu de F

    Du coup, ce qui a été fait depuis le shell peut se traduire directement dans l’éditeur par

    :w !grep -n 'motif' * >/tmp/results.list
    :cfile /tmp/results.list

    Il n’est pas nécessaire de passer par un fichier F si la liste d’erreurs est déjà chargé dans un tampon N (optionnel, par défaut le tampon courant) :

    • remplacer :cfileF par :cbufferN
    • remplacer :cgetfileF par :cgetbufferN
    • remplacer :caddfileF par :caddbufferN

    Du coup, l’exemple précédent peut se traduire aussi par (en commençant par créer un nouveau tampon non nommé)

    :edit
    :read !grep -n 'motif' *
    :cbuffer

    Pour les usagers avancés, il est possible de faire la même chose en utilisant des expressions (résultats de commandes ex.) Mais passons rapidement au meilleur réservé pour (presque) la fin :

    • :grepA pour construire la liste en capturant la sortie de la commande grep avec les arguments A (motif fichiers)
    • :grepaddA pour compléter la liste avec la capture de la sortie de la commande grep avec les arguments A (motif fichiers)

    Vim a donc prévu ce cas particulier… qui est un besoin assez courant…
    Notre exemple précédent devient simplement…

    :grep 'motif' *

    Par défaut, la commande appelée est bien le vénérable grep -n $* /dev/null. Si l’on veut utiliser une autre commande (par exemple ag —The Silver Searcher—, pt —The Platinium Searcher—, Nirw Search, ripgrep, etc.) ou passer des options, il faut positionner grepprg. Si le format de sorti est différent (par défaut c’est actuellement la liste %f:%l:%m,%f:%l%m,%f %l%m) il faut positionner grepformat (c’est utilisé uniquement pour ce cas et c’est pratique pour utiliser la fonctionnalité sans impacter errorformat et combiner avec d’autres fonctionnalités)
    Par exemple, pour rendre mon motif insensible à la casse, notre même exemple devient

    :set grepprg=grep -in $* /dev/null
    :grep 'motif' *

    Deux derniers trucs pour la route.
    Quand on charge une nouvelle liste ou filtre une existante, les anciennes ne sont pas perdues… Vim utilise une liste d’historique circulaire de dix entrées à laquelle on a accès.

    • :Nchistory affiche la liste d’historique, et si on indique un rang N optionnel alors celui-ci devient la liste courante…
    • :cnewerN fait de la liste de N rang après (optionnel, par défaut la suivante) la liste courante.
    • :colderN fait de la liste de N rang avant (optionnel, par défaut la précédente) la liste courante.

    C’est une facilité utile quand on commence à utiliser intensivement la fonctionnalité.
    L’autre truc qui peut être sympa est que l’on peut ouvrir la liste dans un/une cadre/vue, mais contrairement à :clist, il n’y a plus les rangs (juste le contenu.)

    • :copenN crée un/une cadre/vue (horizontale en bas ou verticale à gauche) de hauteur ou largeur N optionnelle (par défaut dix lignes.)
      Il ne peut y avoir qu’une seule zone, donc la commande bascule vers celle existante (et la redimensionne si un taille est spécifiée) si on la lance plusieurs fois.
      Il demeure possible d’utiliser les commandes habituelles pour redimensionner ou déplacer cette zone spéciale.
    • :cclose ferme le/la cadre/vue.
      C’est une zone spéciale donc la commande ne s’applique jamais aux autres. Par contre, :close ou :quit s’applique sans souci.
    • :cwindowN est presque pareil à :copenN excepté que lorsque la liste est vide ça fait un :cclose
    • :cbottom bascule dans le/la cadre/vue spéciale et se positionne à la fin, ce qui est utile quand la liste est modifiée programmatiquement de manière asynchrone.

    Il n’y a certes pas les rangs affichés, mais la ligne courante est mise en évidence, et en appuyant sur la touche Enter (ou en cliquant) sur n’importe quelle ligne permet de charger le tampon (si ça ne l’était pas) et de se positionner sur la ligne. Si besoin, on peut utiliser plutôt Ctrl+Enter pour créer un/une autre cadre/vue.
    Par exemple, dans le cadre Markdown, on peut s’en servir pour la table des matières :

    :grep '^##* '
    :copen

    (Je n’ai pris en compte qu’une des deux formes de titraille et les lignes commençant par le croisillon dans les blocs de code ou les lignes commentées ne sont pas exclues.)
    Il y a d’autres listes, dont celle dite location que je ne trouve pas pertinent ici.


    Comme promis, c’est la fin du voyage. Et je me rends compte que cette réponse aurait pu être un journal…

    Il y a certainement d’autres approches, seule l’imagination est la limite avec Vim :D
    Il est possible aussi que quelqu’un quelque part a pondu un plugin qui répond avec une certaine simplicité et élégance à ta problématique. Me satisfaisant des fonctionnalités natives, je n’ai jamais fouillé.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Un contrat pour toute relation?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Macron s'oppose à l'Europe qui voudrait que le viol soit caractérisé par l’absence de consentement . Évalué à 2.

    Demander l’heure, une clope, un baiser, …tu sembles ne pas vouloir accepter la notion de demande qui d’exprimer un souhait et non donner un ordre ou prendre de force.

    accepter que la personne en face puisse refuser ou même ne pas avoir la politesse de nous répondre,

    En plus de vouloir faire admettre comme des demandes ce qui n’en est pas. tu tentes à tout prix de banaliser les agressions en refusant de les nommer.
    Tu veux pas aussi offrir une médaille aux agresseurs ?

    Je ne suis pas d'accord. Cela peut-être vu comme une agression, mais pas dénoncé. L'objet d'une remarque tout au plus.

    Dénoncer, pour moi, c'est oser dire ce qui ne va pas au lieu de le cacher sous le tapis ; un dénoncement ne passe pas toujours par les instances judiciaires.

    Synonymes : signaler, indiquer, révéler.

    La il s'agit de rajouter un loi qui dirait qu'il y a eu agression même si tu lui avait donné la clope sans rien dire.

    Arrête de tordre le cou aux mots pour leur faire dire autre chose.
    Y a t il eu accord ou contrainte ? C’est pourtant clair non ?

    Or la loi ne doit pas être ambiguë ce n'est pas son rôle car elle met en jeu des vies
    Avec une tel loi beaucoup d'innocent seront condamner et cela n'empêchera pas des violeur de s'en sortir indemne.

    Je répète : accord ou contrainte ?
    Pour toi on va être condamné pour avoir eu l’accord de l’autre et s’en sortir indemne en exerçant de la contrainte ?
    En fait tu es en train de nous partager ton fantasme ? Ou tu plaides ta cause d’oppresseur ? (je cherche juste à comprendre.)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Un contrat pour toute relation?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Macron s'oppose à l'Europe qui voudrait que le viol soit caractérisé par l’absence de consentement . Évalué à 2.

    En effet… « Le qualificatif de “blanc” souligne l'absence de relation sexuelle, le blanc étant la couleur de la pureté, de la virginité. » La confusion vient probablement du fait que l’expression est utilisée comme synonyme de « mariage de complaisance » qui est « contracté dans d’autres buts que la vie commune, généralement pour en tirer un avantage » (sans la connotation religieuse et sexuelle …qui est devenue anecdotique de nos jour ?)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Global Privacy Control : Demander aux sites web de ne pas vendre ni partager mes données

    Posté par  (site web personnel, Mastodon) . En réponse au lien Firefox 120 : Copier le lien sans le pistage du site, Global Privacy Control… Encore + de vie privée. Évalué à 4.

    Ça me rassure de voir qu’il y en a qui ont compris.
    Non seulement il ne faut pas prendre une promesse pour argent comptant (sans que l’avertissement signifie qu’on vous met une faute dessus), mais il se trouve en plus qu’il y a des précédents !

    Car là dès que quelqu'un fait une promesse t'as toujours un commentaire débile ressortant la phrase, et ce quel que soit la qualité passé de la personne faisant sa promesse.

    Ici les faiseurs de promesses ont fait leurs preuves, mais tu choisis de jouer l’autruche. La qualité passée est bien prise en compte ne te déplaise.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Global Privacy Control : Demander aux sites web de ne pas vendre ni partager mes données

    Posté par  (site web personnel, Mastodon) . En réponse au lien Firefox 120 : Copier le lien sans le pistage du site, Global Privacy Control… Encore + de vie privée. Évalué à 5. Dernière modification le 23 novembre 2023 à 03:30.

    Factuel : ne pas tenir une promesse n'a aucun impact automatique,

    Sinon il engagerait la crédibilité de celui qui fais la promesse.

    L’un des problèmes (si on veut le voir ainsi) est que la réputation n’a plus la même valeur de nos jours. Du coup, de plus en plus de personnes se permettent de ne plus « avoir de parole » (après tout, on peut être un escroc notoire et se faire confier des responsabilité qui exigeraient de la probité, on peut rouler son électorat dans la farine et pourtant se faire réélire, etc.)

    Après, l’absence d’impact n’est pas lié au fait de la promesse en elle-même ; c’est un choix de société… (j’ai connu une époque et des sociétés —non occidentales— où la promesse est une dette …et où l’honneur et la crédibilité des gens avait plus de valeur que leur compte en banque)

    C'est du pur factuel, pas pour faire porter la faute (?) sur la victime mais pour la prévenir du risque, du moins tant qu'il n'a rien de factuel qui change.

    C’était mon point : le « business » jusqu’à présent a toujours promis d’être vertueux avec nos données et pourtant s’est constamment fait taper sur les doigts. Du coup, en tant qu’usager averti, je ne me risquerai pas à leur faire un chèque en blanc.
    Mais il y en a pour faire diversion en disant que l’on reporte la faute sur la victime. (cela ressemble à parler du doigt qui désigne pour éviter de parler de la chose désignée.)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Bien bel article

    Posté par  (site web personnel, Mastodon) . En réponse au lien Rust without crates.io. Évalué à 2.

    Je ne manque pas de susciter l’envie de m’étriper quand je dis qu’on régresse vers l’époque où les gens piochaient n’importe quoi sur télécharger/softpedia/zone téléchargement/clubic et les sites de warez…

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Pas que Debian

    Posté par  (site web personnel, Mastodon) . En réponse au lien Rust without crates.io. Évalué à 2.

    selon les distros on ne pourra pas faire les mêmes choses

    C’est l’une des nombreuses raisons qui poussent à la création de systèmes séparés (mais en vrai ça revient toujours à vouloir s’affranchir des mainteneurs et mainteneuses de distributions…)

    Debian […] on a déjà un grand pan des distribs […]
    mais il y a pas mal de devs qui sont aussi chez Fedora ou Arch et dérivées…

    Ç’est l’autre raison souvent évoquée sous le terme de portabilité indépendamment des plateformes (avec DEB et RPM tu couvres bien plus de 96% des Linux mais il reste du Windows et qu sais-je.)
    Si l’on couple au motif précédent (qui veut que le pouvoir soit dans les mains des devs qui ne connaissent pas les distributions) est-ce que flatpacke/snap/etc. pourrait être une réponse ?

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Piano préparé

    Posté par  (site web personnel, Mastodon) . En réponse au journal Grandbrothers. Évalué à 3.

    un genre musical démarré par Pierre Schaeffer en 1948 (et qui existe toujours)

    Il a fondé le Groupe de Recherche de Musique Concrète (GRMC)

    un courant musical qui est dans une démarche d'expérimentation

    P.S. est reconnu comme faisant partir des pionniers/fondateurs de la musique expérimentale (en fait la concrète est une branche de l’expérimentale)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Global Privacy Control : Demander aux sites web de ne pas vendre ni partager mes données

    Posté par  (site web personnel, Mastodon) . En réponse au lien Firefox 120 : Copier le lien sans le pistage du site, Global Privacy Control… Encore + de vie privée. Évalué à 4.

    Ça fait un peu genre : je refuse …mais si tu parviens à me voler des infos, je te défends d’en faire usage.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Prochaine fourchette

    Posté par  (site web personnel, Mastodon) . En réponse au lien MariaDB reçoit une offre d'achat de Runa Capital II GP. Évalué à 2.

    Non, plutôt petit fils ? En tout cas, ça c’est le fruit de la noce avec SAPAGe…

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Play again

    Posté par  (site web personnel, Mastodon) . En réponse au lien MariaDB reçoit une offre d'achat de Runa Capital II GP. Évalué à 3.

    On a eu exactement la même réaction : me suis vu en train de posséder sauver Maria, puis ma condition de pauvre s’est rappelée à moi. ;D

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Global Privacy Control : Demander aux sites web de ne pas vendre ni partager mes données

    Posté par  (site web personnel, Mastodon) . En réponse au lien Firefox 120 : Copier le lien sans le pistage du site, Global Privacy Control… Encore + de vie privée. Évalué à 4.

    Je m’en vais lire cela, mais sans grande conviction : on peut toujours demander, et les promesses n’engageront que les crédules… (je préfère encore que ces gens n’aient pas accès à mes données que de leur demander de bien vouloir ne pas les vendre ni les partager.)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: DDoS

    Posté par  (site web personnel, Mastodon) . En réponse au lien Blender 4.0 vient de sortir. Évalué à 2.

    Je n’arrive pas à imaginer ce que cette attaque apporte. On vit dans une bien triste époque.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • # hg2git final words?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Firefox Development Is Moving from Mercurial to Git. Évalué à 2. Dernière modification le 21 novembre 2023 à 22:53.

    (j’aurais pu mettre un autre lien, mais j’ai opté pour la non dispersion)
    https://glandium.org/blog/?p=4346

    édit : grillée sans stress

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: GUI alternative simple ?

    Posté par  (site web personnel, Mastodon) . En réponse au lien Is this radical redesign of GIMP possible now?. Évalué à 3.

    Après, pas forcément besoin de nouvelles applis ; juste que celles existantes soient corrigées (en parlant des détails qui peuvent gâcher l’appréciation globale) et maintenues (avec l’évolution des bureaux et des bibliothèques.) Cette motivation semble s’éroder aussi hélas.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: outlook ?

    Posté par  (site web personnel, Mastodon) . En réponse au lien New Outlook sends passwords, mails and other data to Microsoft. Évalué à 4.

    (on en avait d'ailleurs très tôt sur les systèmes Unix).

    On a démasqué le chantre krosoft infiltré :)

    Je lis : « 1979 […] The first ever email client was running on the Xerox Alto computer and was called Laurel email client. » Bon, je suis de mauvaise fois : la même page dit plus tôt « 1972. The Unix mail program allowed users to write emails and send them to other users. » sauf qu’il s’agissait de rester sur le même serveur… un « host-based mail system » parmi d’autres. Il a fallu attendre 1980 pour que le mail inter-réseaux (utilisant aussi bien UUCP que BerkNet) pointe son nez par les BSD, et SMTP n’arrivera qu’en 1983.
    Très vite (dès 1980 mais j’ai la flemme de rechercher les références) sont apparus diverses variables d’environnement : MAILRC, sendmail, etc. C’est allé un peu plus loin avec X ; mais Microsoft Mail —arrivé en 1988— n’a jamais voulu s’en inspirer (pourquoi vouloir ouvrir ?)

    Nexus est arrivé fin 1990, et Lynx n’apparait qu’en 1992, DOSLynx en 1994 (la même année que Mosaic et Opera.) Ici aussi, on a eu de suite la variable d’environnement BROWSER ainsi que la prise en compte sous X.
    Pendant ce temps, un autre sort IE en août 1995, bien après Mosaic et Opera (décembre 1994 et avril 1995 respectivement pour leur première version) qui tournaient sur le système de filou, mais on fait croire que c’est “soudé” au système et qu’il faut que ce soit la galère pour utiliser les autres.

    À l’heure actuelle, j’ai installé de nombreux serveurs Linux sans ces deux programmes (donc non, ça ne fait pas partie du système) ; et quand il y a le besoin j’ai du choix et non un truc imposé comme faisant partie du système. Donc non, ce n’est assurément pas comparable (en tout cas ça ne “doit” pas faire partie du système).

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: Et donc…

    Posté par  (site web personnel, Mastodon) . En réponse au lien Git Koans. Évalué à 2.

    Je passe le mot à mes adminsys : installez la GUI sur les serveurs :)

    …même si cacher la misère sous une fenêtre ne résout pas le problème fondamental de la complexité du bousin (la plupart des collègues que je dépanne utilisent une GUI et n’ont jamais été confronté à SVN ou autres)

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume

  • [^] # Re: micro-informatique

    Posté par  (site web personnel, Mastodon) . En réponse au lien Mon premier kit de télétravail (via TechTrash). Évalué à 4.

    Plutôt que d’occuper le temps de cerveau disponible avec les logos PEW et autres junk food, il vaut mieux habituer le palais avec du savoureux et bio LibreOffice.

    “It is seldom that liberty of any kind is lost all at once.” ― David Hume