Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

Un joli prompt dans ksh

ksh, c'est le shell par défaut sous OpenBSD. Globalement, ça fait à peu près tout ce dont on peut avoir besoin à moins d'avoir des habitudes très poussées avec bash ou zsh. Perso, ça fait le job.
Actuellement en recherche de minimalisme, je fais le tour des outils que j'utilise pour n'en utiliser qu'un minimum, si possible déjà installés.

J'avais déjà parlé de cwm, un gestionnaire de fenêtres qui remplace désormais dwm déjà très simple. Il me manquait de quoi voir si j'ai reçu des mails. J'utilisais conky pour ça, mais j'ai enfin un moyen de m'en passer, en configurant le prompt de ksh puisque j'ai souvent un terminal d'ouvert.

Désormais, j'ai un prompt qui ressemble à ça :

Afin de le construire, il faut préciser une variable PS1 :

PS1=contenu du prompt

Dans cette variable, voici ce que j'ai mis :

PS1="\e[m[\e[0;36m\D{%H:%m - %d/%m/%Y}\e[m] [\e[0;35m\$(~/geek/bin/nbmail.sh)\e[m] [\e[0;32m\$(MPD_)\e[m]
[\e[0;33m\w\e[m] \e[0;33m\$\e[m "

Il y a beaucoup de code couleur, on les repère car ils commencent par "\e[" et se terminent par "m". Enlevez-les tous, et il vous reste :

PS1="[\D{%H:%m - %d/%m/%Y}] [\$(~/geek/bin/nbmail.sh)] [\$(MPD_)]
[\w] \$ "

Le script nbmail.sh ne fait que lister le nombre de fichiers dans les dossiers "new" de mes Maildir.
Sinon, j'ai ce qui est en cours de lecteur dans MPD.
C'est très simple, et ça reste léger puisque mis à jour seulement à l'ouverture du terminal ou après avoir tapé une commande.

Voici donc ma configuration de ksh au complet: le .kshrc

# source some aliases
 . /etc/ksh.kshrc
 . ~/.aliases
 . ~/.functions
 
 # history
 HISTFILE=~/.hist
 HISTSIZE=3000
 HISTCONTROL=ignoredumps # no doubles
 
 # Prompt
 MPD_() {
    pgrep mpd > /dev/null
    if [ $? -eq 0 ]; then
        status=$(mpc)
        if [ -n "$(echo "$status" |grep -o '[playing]')" ]; then
            STRING=$(echo -n "$status" | sed -n '1p')
            STRING="$STRING $(echo -n "$status" | sed -n '2p' | cut -d' ' -f5)"
            echo -n "$STRING"
        fi
    fi
 }
 
 PS1="\e[m[\e[0;36m\D{%H:%m - %d/%m/%Y}\e[m] [\e[0;35m\$(~/geek/bin/nbmail.sh)\e[m] [\e[0;32m\$(MPD_)\e[m]
[\e[0;33m\w\e[m] \e[0;33m\$\e[m "
 PS2="
>"
 
 # option
 set -o vi # I love vim
 
 # autocompletion
 set -A complete_git -- clone branch add rm checkout fetch show tag commit
 set -A complete_mpc -- lsplaylists ls play pause toggle prev random shuffle stop update
 PKG_LIST=$(ls -1 /var/db/pkg)
 set -A complete_pkg_delete -- $PKG_LIST
 set -A complete_pkg_info -- $PKG_LIST
 
 set -A complete_ssh -- $(awk '{split($1,a,","); print a[1]}' ~/.ssh/known_hosts)
 set -A complete_rcctl_1 -- disable enable get ls order set
 set -A complete_rcctl_2 -- $(ls /etc/rc.d)
 
 set -A complete_signify_1 -- -C -G -S -V
 set -A complete_signify_2 -- -q -p -x -c -m -t -z
 set -A complete_signify_3 -- -p -x -c -m -t -z
 set -A complete_gpg2 -- --refresh --receive-keys --armor --clearsign --sign --list-key --decrypt --verify --detach-sig
 set -A complete_ifconfig_1 -- $(ifconfig | grep ^[a-z] | cut -d: -f1)