Vous connaissez probablement ce problème. Oh oui, vous le connaissez ! Vous utilisez parfois un émulateur de terminal (comme xterm, *term, gnome-terminal, Konsole ou Terminal.app) et vous savez mettre à profit les petits raccourcis du shell, comme la flèche vers le haut pour naviguer dans l'historique, Ctrl+R pour chercher dans cet historique, les touches Début (ou Ctrl+A), Fin (ou Ctrl+e), flèche gauche et flèche droite pour vous déplacer dans la commande actuelle...
Vous savez aussi que sans ces touches le fait de taper dans une CLI (Command Line Interface) est une vraie baguette dans le cul. Et certains programmes ne se gênent pas pour vous le rappeler. Oui, beaucoup de programmes ont la fâcheuse tendance à ne pas proposer tous ces petits raccourcis sympathiques. Lorsque l'entrée standard est lue, par exemple, elle l'est de manière brute, donc adieu les raccourcis d'amour. Pour vous en convaincre, je vous invite à essayer juste l'entrée standard toute simple :
$ cat
pouet
pouet
ah ouais
ah ouais
^[[D^[[A^[[B^[[Cok
ok
^[^[^[^[
pourquoi ça marche pas ctrl+c????????
pourquoi ça marche pas ctrl+c????????
arrête de répéter ce que je dis
arrête de répéter ce que je dis
je suis un idiot
je suis un idiot
raaaah mais arrête !
raaaah mais arrête !
Alors, ça vous casse les bonbons ou quoi ? Si vous avez déjà fermé violemment votre émulateur de terminal, je vous rappelle que vous pouviez utiliser Ctrl+D pour fermer l'entrée standard. Voilà, vous êtes en rogne.
Heureusement il existe un programme qui vous permettra d'adorer à nouveau la ligne de commande, puisqu'il fonctionne avec quasiment toutes les CLI.
Le coupable
Il s'agit bien évidemment de
rlwrap, un magnifique programme qui se contente d'utiliser
readline lorsqu'il faut utiliser l'entrée standard. Ce truc bizarre nommé
readline est une librairie GNU qui est responsable de tous les trucs que vous aimez bien dans le shell, c'est-à-dire les raccourcis-clavier, l'historique... En gros, si vous invoquez rlwrap en passant en argument le programme dont les mécanismes d'entrée vous hachent les bourses en petites lamelles (je pense en premier à ocaml ou sqlplus...), vous disposerez du même programme mais avec tous les petits raccourcis qui font votre bonheur !
Catwoman
Testons le comportement de rlwrap avec un programme très simple, cat, qui, lorsqu'il est appelé nature (comme les yaourts nature), recopie l'entrée sur la sortie. Nous n'allons pas revivre l'expérience humiliante de cat tout seul, alors regardons-le à l'œuvre avec sa super modification laser :
$ rlwrap cat
pouet
pouet
ah ouais
ah ouais
ah ouaisok
ah ouaisok
(reverse-i-search)`': ah ouais
Bon, je pense que vous avez compris, je ne vous fournis pas plus d'explications, car je sens que vous mourrez d'envie d'aller utiliser rlwrap en courant dans les champs !