Le site arthur.bebou.netlib.re - retour accueil
git clone git://bebou.netlib.re/arthur.bebou
Log | Files | Refs |
commit fc945fe0c387da2bc7f54bade362f4c4a4ee1e85 parent cbccc69f636974b14f71bcb9fc13397113fb5386 Auterice: Arthur Pons <arthur.pons@unistra.fr> Date: Wed, 1 May 2024 15:45:36 +0200 Nouvel article emoji picker Diffstat:
A | contents/emoji/index.sh | | | 97 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 97 insertions(+), 0 deletions(-)
diff --git a/contents/emoji/index.sh b/contents/emoji/index.sh @@ -0,0 +1,97 @@ +#! page +title: Un emoji \"picker\" en shell +author: Arthur Pons +description: Construisons un outil pour sélectionner un emoji et les mettre dans le presse-papier +publication: 2024-05-02 + +sectionmd: main + +Les emojis c'est mignon et on voudrait en mettre partout. Créons +donc un "emoji picker" aussi simple que possible et qui nous permettra +d'en insérer un peu partout où on veut 😄 (<- comme celui-ci !). + +## Récupérer la liste des emojis + +Le consortium unicode fourni une liste des emojis dans un document +disponible sur le web : + + curl -Ls https://unicode.org/Public/emoji/latest/emoji-test.txt > emoji-test.txt + +Il contient un emoji par ligne ainsi que tout plein d'informations à son propos : + + 1F498 ; fully-qualified # 💘 E0.6 heart with arrow + 1F49D ; fully-qualified # 💝 E0.6 heart with ribbon + 1F496 ; fully-qualified # 💖 E0.6 sparkling heart + 1F497 ; fully-qualified # 💗 E0.6 growing heart + 1F493 ; fully-qualified # 💓 E0.6 beating heart + 1F49E ; fully-qualified # 💞 E0.6 revolving hearts + 1F495 ; fully-qualified # 💕 E0.6 two hearts + 1F49F ; fully-qualified # 💟 E0.6 heart decoration + 2763 FE0F ; fully-qualified # ❣️ E1.0 heart exclamation + 2763 ; unqualified # ❣ E1.0 heart exclamation + 1F494 ; fully-qualified # 💔 E0.6 broken heart + 2764 FE0F 200D 1F525 ; fully-qualified # ❤️🔥 E13.1 heart on fire + 2764 200D 1F525 ; unqualified # ❤🔥 E13.1 heart on fire + +## Créer un format propice au choix + +Qui dit des données tabulaires dit notre arsenal habituel d'outils. On veut un emoji +et sa description par ligne ce qui devrait faire une interface décente de choix : + + 💘 heart with arrow + 💝 heart with ribbon + 💖 sparkling heart + 💗 growing heart + +Pour cela on peut utiliser le script suivant : + + t=$(mktemp -d);trap "rm -rf $t" EXIT + < emoji-test.txt grep -Ev '^(#.*)?$' | tr -s ' ' | cut -d';' -f2 > $t/c + < $t/c cut -d' ' -f4 > $t/l + < $t/c cut -d' ' -f6- > $t/r + paste $t/l $t/r + +Première ligne on créé un répertoire temporaire de travail. Seconde on retire +les lignes vides et les commentaires, on écrase les suites d'espaces en un seul +espace puis on retire tout ce qu'il y a à gauche du point virgule. Troisième et +quatrième on récupère les emojis et leurs descriptions. Ce script pourrait +être plus simple sous la forme d'un programme awk mais peu importe. + +## Créer une interface pour en choisir un + +Quand il s'agit de choisir parmi une liste arbitraire d'éléments sur la base du +contenu des lignes il est propice d'utiliser fzy. J'en parle dans l'[article +sur les extensions de francium](/extension-francium/index.html) et [celui sur +la musique](/musique/index.html). Pour notre besoin cela pourrait ressembler à +ça, avec `dbemoji` le fichier que l'on a créé avec le précédent script : + + < dbemoji fzy -l 100 | cut -f1 | xclip -selection clipboard -f -rmlastnl + +On met les emoji dans fzy, on filtre interactivement dessus en tapant du texte +susceptible d'apparaître dans la description, on ne récupère que l'emoji de +la ligne sélectionnée et on met ça dans le presse papier. L'option `-f` d'xclip +permet de tout de même récupérer l'emoji en sortie de façon à pouvoir continuer +le pipe si jamais. On peut donc soit `ctrl+v` l'emoji quelque part soit, si +l'outil où l'on veut l'insérer le permet, le récupérer directement depuis +la stdout. + +## L'utiliser dans vim + +Evidemment j'ai envie d'insérer facilement des emoji dans vim. Pour cela +j'utilise cette macro : + + inoremap <buffer> (-e <ESC>:r!pickemoji<CR>kgJe + +avec `pickemoji` étant la ligne de shell écrite juste au dessus. Je peux +donc taper taper taper du texte, entrer rapidement `(-e`, déclencher +l'interface fzy, choisir mon emoji et continuer à taper[^1] ! 🙂 + +## Et si on en veut plusieurs ? + +Il existe un [fork de fzy](https://github.com/leo-arch/fzy) permettant de +choisir plusieurs lignes dans l'interface. Il faut utiliser l'option `-m` puis +faire une tabulation sur chaque choix que l'on veut. Cela permet d'insérer +plusieurs emoji d'un coup ! +Tous les emojis avec computer dans leurs descriptions : 🖥️💽🖱 + +[^1]: du moins c'est mon espoir mais la macro ne me remet pas en mode insertion à la fin. Je ne sais pas bien pourquoi, je vais investiguer 🕵🔎