Du libre, du code, des idées, du mélange d’ArraKISS…

De l’épice pour la pensée

Alors que je bricole 2-3 trucs sur mes sessions, je râle à chaque fois qu'un script doit utiliser zenity. C'est censé être de petits outils rapides, mais la moindre petite fenêtre met 3 plombes à s'ouvrir le temps que toutes les libs GTK soient chargées.

J'ai donc eu envie de refaire un zenity à ma façon à partir de la librairie tkinter, et ça donne ZeniTK.

L'outil ne propose pas encore autant d'options que zenity, et je ne suis pas certain d'en rajouter sauf si j'en ai besoin ou si des contributions sont proposées.

On peut déjà profiter des éléments suivants :

  • Alertes habituelles :

  • Entrer et récupérer ce que l'utilisateur a écrit :
  • Sélection de fichier ou répertoire avec éventuellement filtre d'extensions :
  • Barre de progression :
  • Afficher et éditer du texte :

Ce dernier permet de faire un éditeur de texte tout bête pour prendre des notes par exemple :

#!/bin/sh

DIR=~/Documents/notes
mkdir -p $DIR

N=$(zeniTK --title="Nouvelle note" --text="Nom de la nouvelle note : " --entry)

if [ -n "$N" ]; then
        RES=$(cat "$DIR/$N" | zeniTK --text-info)
        if [ -n "$RES" ]; then
                echo $RES > "$DIR/$N"
        fi
fi
exit
  • Sélecteur de couleur

Ne vous fiez pas aux couleurs dans les captures d'écran, j'ai modifié des fichiers système par erreur mais ne parviens plus à les retrouver pour remettre à la normale. Oui, je suis un boulet :)

Petit coup de gueule sur github. Alors que je m'efforce avec mon tout petit niveau de participer au projet blogotext, je me retrouve perdu dans l'utilisation de git.
Parce que pour moi, cet outil, c'est pour gagner du temps et pouvoir travailler à plusieurs. En vérité, c'est le bordel, et le développeur passe plus de temps à réclamer des modifs et expliquer aux contributeurs comment se servir de github.
Car c'est bien github qui est en cause là.
Si on s'en tient à git, sur un seul dépôt, c'est facile de créer des branches, et le mainteneur du projet a la main pour faire les "merge" ensuite.

Mais avec github, il faut :

  • forker le dépôt d'origine (via l'interface web)
  • Cloner son dépôt
  • Ajouter le dépôt d'origine en upstream :
    git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
  • Faire ses modifs dans une branche :
    git checkout -b nouvelle_branche
  • Resynchroniser avec l'upstream avant d'envoyer sa nouvelle branche
    git pull upstream la_branche && git add gnagnagna && git push
  • Retourner sur la page github pour faire le pull request

Rhaaaa!

Au bout du compte, télécharger le code source, le modifier, générer un diff, ça va nettement plus vite!

Github, t'es vilain ! :(

Je vous présentais il y a peu un bout de code pour automatiquement remplacer certaines chaînes de caractères en smileys. Cependant, on m'a fait remarquer que ces substitutions avaient lieu aussi dans les balises code et pre. Pas chouette :/

J'ai donc repris le code pour corriger ce défaut. Si ça vous intéresse, copiez/collez le code ci-dessous dans vos pages html :


<script>
// regexp and replacement
var strtostr= [
    [/(\s|&nbsp;):\)/g,' 😊'],
    [/(\s|&nbsp;):\(/g,' 😞'],
    [/(\s|&nbsp;):D/g,' 😃'],
    [/(\s|&nbsp;):S/g,' 😖'],
    [/(\s|&nbsp;):s/g,' 😖'],
    [/(\s|&nbsp;):P/g,' 😋'],
    [/(\s|&nbsp;):p/g,' 😋'],
    [/(\s|&nbsp;);\)/g,' 😉'],
    [/(\s|&nbsp;);-\)/g,' 😉'],
    [/(\s|&nbsp;):\//g,' 😕'],
    [/(\s|&nbsp;):\|/g,' 😒'],
    [/(\s|&nbsp;):\'\(/g,' 😢'],
    [/(\s|&nbsp;)oO/g,' 😲'],
    [/(\s|&nbsp;)x\.x/g,' 😵'],
    [/(\s|&nbsp;)O:\)/g,' 😇'],
    [/(\s|&nbsp;)\^\^/g,' 😊']
];

// class div where regexp will be applied
var classes_to_replace = ["com-content", "art-content", "post-content"];

// regexp to find tags (no replacement in <pre> and <code>
var htmlTagRegex =/(<[^>]*>)/g

// loop in classes
classes_to_replace.forEach(function (class_) {
    var tochange = document.getElementsByClassName(class_);
    var codecnt = 0;

    var classcnt;
    for (classcnt = 0; classcnt < tochange.length; classcnt++) {
        div = tochange[classcnt]

        // check if in <code> or <pre>
        var tagArray = div.innerHTML.split(htmlTagRegex);
        var divtxt = "";
        var tagcnt;
        for (tagcnt = 0; tagcnt < tagArray.length; tagcnt++) {
            t = tagArray[tagcnt];
            console.log(t);
            if (t.toLowerCase() == "<pre>" || t == "<code>") {
                codecnt++;
            } else if (t.toLowerCase() == "</pre>" || t == "</code>") {
                codecnt--;
            }
        
            if (codecnt == 0) {
                var i;
                var newtxt = "";
                for (i = 0; i < strtostr.length; i++) {
                    t = t.replace(strtostr[i][0],strtostr[i][1]);
                }
            }
            divtxt += t;
        }
        div.innerHTML = divtxt;
    }
});
</script>

Pour ajouter d'autres smileys, modifiez le tableau strtostr.
Par défaut, le script est prêt pour le moteur de blog blogotext (parce qu'il est super), et ne réalise les substitutions que dans les conteneurs de ces classes : "com-content", "art-content", "post-content", "entry-content".

Voilà voilà, amusez-vous bien ;)

EDIT : j'ai modifié le code car blogotext génère des &nbsp; que les regexp ne reconnaissent pas comme espace :s