clemtre
11 months ago
1 changed files with 122 additions and 0 deletions
@ -0,0 +1,122 @@ |
|||||
|
# Presentation |
||||
|
Signet.sh est un script shell qui transforme une base de donnée de liens |
||||
|
en une page html. La conversion est faite par une commande awk au sein |
||||
|
d'une déclaration here-doc qui est redirigé dans une page html. |
||||
|
|
||||
|
J'ai créé ce script car je trouve le gestionnaire de marque-page de |
||||
|
firefox instatsifant, autant dans sa forme que dans le format utilisé |
||||
|
(sqlite). Ce script et les utilitaires autours proposent une une |
||||
|
alternative pour archiver ses navigations internet. |
||||
|
|
||||
|
## Format de la base de donné |
||||
|
Seule une Url est requise, le reste des champs sont |
||||
|
facultatifs, on compte les champs suivants : |
||||
|
URL : |
||||
|
Name : Par défaut la balise </title> de la page |
||||
|
Description |
||||
|
Tags : mots-clés séparés d'une virgule |
||||
|
Date : heure posix de l'ajout du lien |
||||
|
Color : couleur css (nom, hex, rgb etc...) |
||||
|
|
||||
|
Par exemple, dans un fichier qui s'appelle par défaut BOOKMARKS : |
||||
|
... |
||||
|
URL: https://rosettacode.org/wiki/Rosetta_Code |
||||
|
Name: Rosetta Code |
||||
|
Description: |
||||
|
Tags: literacy, read |
||||
|
Date: 1704675057 |
||||
|
|
||||
|
URL: https://www.emigre.com/TypeSpecimens |
||||
|
Name: Emigre: Type Specimens |
||||
|
Description: |
||||
|
Tags: emigre, type |
||||
|
Date: 1704680644 |
||||
|
Color: Purple |
||||
|
|
||||
|
URL: https://web.archive.org/web/20211025182257/http://len.falken.ink/ |
||||
|
Name: Wayback Machine |
||||
|
Description: |
||||
|
Tags: read |
||||
|
Date: 1704712747 |
||||
|
... |
||||
|
|
||||
|
|
||||
|
# Autres gestionnaires de signets de favoris : |
||||
|
- nb https://xwmx.github.io/nb/ (AGPL-3.0) |
||||
|
- ?? |
||||
|
|
||||
|
|
||||
|
# Dependances : |
||||
|
Pour ajouter un lien via l'interface proposée, on aura besoin |
||||
|
d'installer dmenu ~~et htmlq~~. |
||||
|
|
||||
|
- dmenu https://tools.suckless.org/dmenu/ (MIT/X) |
||||
|
|
||||
|
- ~~htmlq https://github.com/mgdm/htmlq (MIT)~~ remplacé par une |
||||
|
commande awk |
||||
|
## dmenu |
||||
|
Dmenu est un menu interactif qui permet de sélectionner et d'écrire des |
||||
|
valeurs dans un menu. Ces valeurs peuvent provenir d'un programme |
||||
|
fournit en entrée un *pipe* "|", par exemple : |
||||
|
ls | dmenu |
||||
|
affiche un menu déroulant avec les fichiers de mon répertoire. Dans |
||||
|
notre script, pour stocker le choix dans une variable, on peut faire : |
||||
|
tags=$(echo "" | dmenu -p "Enter comma-separated tags:") |
||||
|
## ~~htmlq~~ |
||||
|
Htmlq est un parseur d'html écrit en go. Peu importe quel parseur on |
||||
|
utilise, on dirait que chaque langage a le sien. |
||||
|
Il s'agit ici de fournir au programme une chaîne de caractère en entrée |
||||
|
et d'en filtrer des éléments html |
||||
|
Si en javascript pour récupérer tous les <h1> enfants d'une <section> on |
||||
|
peut faire |
||||
|
document.querySelectorAll('section h1') |
||||
|
En shell, c'est plus compliqué, htmlq est fait pour ça : |
||||
|
cat fichier.html | htmlq 'section h1' |
||||
|
Et pour récurer seulement le texte -- l'équivalent en javascript de |
||||
|
.innerHTML : |
||||
|
cat fichier.html | htmlq 'section h1' --text |
||||
|
On s'en sert pour récupérer la balise titre de la page à ajouter : |
||||
|
curl page.html | htmlq 'title' --text |
||||
|
Patch pré-sortie : |
||||
|
|
||||
|
|
||||
|
|
||||
|
C'est quelque chose qu'il faudra changer, pour l'instant cette étape est |
||||
|
bloquante. Pour peu que la connection internet coupe lors de l'ajout |
||||
|
d'un lien, il faudra attendre la fin de la tentative de curl pour passer |
||||
|
au prochain champs du script :/ sorry ! |
||||
|
|
||||
|
# Usage : (faites les votre) |
||||
|
Pour ajouter un lien, je séléctionne l'url de la page avec Ctrl + l, la |
||||
|
copie et lance add.sh avec Super + i. _Si quelqu'un sait récupérer l'url |
||||
|
de la page courante du navigateur sans avoir à la copier, ça |
||||
|
économiserait deux étapes._ |
||||
|
En résumé : Ctrl + l, Ctrl + c, Super + i |
||||
|
(ou plus court : Ctrl + l + i, Super + i) |
||||
|
|
||||
|
Super + i car dans le fichier de configuration de mon gestionnaire de |
||||
|
fenêtre situé dans ~/.config/awesome/rc.lua j'ai les lignes suivantes : |
||||
|
|
||||
|
awful.key({modkey}, "i", function() |
||||
|
awful.util.spawn_with_shell("add.sh") end, |
||||
|
{description = "Enregistre le lien copié dans signet.sh"}), |
||||
|
|
||||
|
# Structure du répertoire |
||||
|
|
||||
|
BOOKMARKS → Une base de donnée de liens |
||||
|
add.sh → Un script pour rajouter un lien dans la base de donné |
||||
|
- dmenu |
||||
|
- ./signet.sh |
||||
|
signet.sh → Le script shell en lui-même |
||||
|
- Il génère une nouvelle page html à partir de la base |
||||
|
de donnés de liens (par défaut index.html) |
||||
|
style.css → La feuille de style pour styliser index.html |
||||
|
script.js → Un peu de javascript pour: |
||||
|
- rechercher dans la </textarea> |
||||
|
- ajouter les couleurs de fond aux entrées qui en ont |
||||
|
- si le champs de description est vide, ne pas |
||||
|
l'afficher |
||||
|
- formater les dates du temps posix au format AA-MM-JJ |
||||
|
/!\ Prochainement /!\ |
||||
|
starred.sh → Un curl des repos de l'api github https://api.github.com/users/[user]/starred , formaté de json à une liste html sans jq ! |
||||
|
|
Loading…
Reference in new issue