Sélection/insertion d'emojis (ou autre) avec vi et fzf

2021-11-29T11:08:57Z

Bien que cela surprenne par son extrémité, mon éditeur de texte quotidien est vi.

Oui, vi.

Pas vim. vi.

Celui livré par défaut à l'installation d'OpenBSD.

Ou alors, si j'ai vraiment besoin de voir les jolis accents, j'utilise son équivalent "nvi-iconv".

Sa simplicité le rend agréable à configurer. Alors certes, pas de coloration syntaxique. Cela m'a manqué au début. Toutefois, devoir m'en passer me force à écrire du code plus clair (je crois).

J'en parle ici [GEMINI]

J'en parle ici [HTML]

J'ai récemment ajouté la possibilité de sélectionner et insérer des emojis 😃. Cela se passe avec un raccourci dans le fichier de configuration ~/.exrc, un fichier contenant les émojis et leur description séparés par un espace et le bien connu fzf.

(On peut remplacer fzf par slmenu)

slmenu

fzf

Voici le raccourci dans ~/.exrc :

map ge :!emojisel > /tmp/vi-$USER.tmp^M^M:r/tmp/vi-$USER.tmp^M:!rm /tmp/vi-$USER.tmp^M

(Si vous voulez l'utiliser, évitez de copier/coller. En effet, "^M" correspond à "valider avec Entrée". On l'obtient en tapant "ctrl-v" puis "Entrée".)

Cette ligne est décomposée en plusieurs parties.

Tout d'abord "map ge" ajoute le raccourci constitué de la suite de lettres "g" et "e".

Ce dernier permet de lancer une commande shell : ":!".

Cette commande est en fait un script shell appelé "emojisel" dont voici le contenu :

#!/bin/sh
emojis=$HOME/.templates/emojis.txt
fzf < $emojis | awk '{print $1}'

Rien de très original, fzf permet de choisir une ligne dans le fichier d'emojis. On n'en garde que l'emoji, pas la description avec awk.

On voit ensuite que ce que ce script renvoie est enregistré dans un fichier temporaire /tmp/vi-$USER.tmp.

On lance ensuite une nouvelle commande qui consiste à insérer le contenu d'un fichier ":r" : celui contenant notre emoji.

Enfin, on supprime ce fichier temporaire avec ":!rm /tmp/vi-$USER.tmp".

Le fait de passer par un fichier temporaire est discutable : pourquoi ne pas directement mettre l'emoji dans le presse papier avec xclip ou xsel? C'est ce que je faisais initialement. Cependant, cela ne fonctionne pas si vous n'êtes pas dans un environnement graphique (X). Là, ça marche même en tty, via ssh ou que sais-je.

Voilà à quoi ça ressemble :

Enregistrement asciinema [HTTP]

(Préférez : 😉)

curl "https://asciinema.org/a/452230.cast?dl=1" | asciinema play -

Ce que je viens de décrire pour des emojis peut très bien être adapté pour insérer n'importe quel texte. Je m'en sens pour ma part pour des morceaux de LaTeX : ajout de tableaux, de listes...

Une réaction?

Envoyez votre commentaire par mail.

Mode d'emploi de la liste de diffusion pour recevoir les réponses.