Fish et les notifications de Gnome terminal

Sur Fedora 22, gnome-terminal vous permet d’avoir une notification quand une commande se termine et que vous êtes sur une autre fenêtre. Très pratique quand vous avez executé une commande “curl” ou “wget” dans un coin ou si vous lancez des procédure d’installation ou de compilation qui prennent un certain temps. Or, si vous passez au shell “fish”, les notifications ne marchent plus. Voilà comment on s’y prend pour les retrouver.

TL;DR;

Dans .config/fish/config.fish:

if test "$VTE_VERSION" -ge 3405
    switch "$TERM"
        case 'vte*' 'xterm*'
            function __notify_vte_command_completed --on-event fish_postexec --description 'Notify VTE of command completion'
                printf '\e]777;notify;Command completed;%s\a' (echo "$argv" | cat --show-nonprinting | tr --delete \;)
            end
    end
end

Et relancez votre sessions.

Détaillons

Depuis quelques temps les terminaux VTE (Virtual Terminal Emulator, le widget gnome qui permet d’afficher un terminal) comprend quelques “séquences d’échappement” (escape sequence) qui permettent de s’amuser un peu. L’une de ces séquence est \e]777.

En général, il suffit d’afficher une suite d’argument à cette séquence:

\e]777;argument 1; argument 2; etc...

Le premier argument définit quelle action exécuter. Dans notre cas, ce sera “notify”. Les arguments suivant sont définis en fonctione de l’action. Pour “notify” on défini:

  • le titre
  • le texte

La notification ne se fera que si votre focus se trouve sur une autre fenêtre. Donc l’idée c’est d’ouvrir un terminal gnome et une autre fenêtre (par exemple restez sur cette page web).

Dans le terminal, tapez:

# sur fish
sleep 2; and echo -e '\e]777';notify;Le titre;Le contenu"

Rapidement, passez sur une autre fenêtre et vous devez avoir une notification de bureau.

Fish config

En cherchant un peu, je suis tombé sur ce ticket: Issue 2102 - apparement fish avait intégré le fait d’envoyer des notification Gnome mais certaines personnes ont eut quelques soucis. Du coup, l’auteur à retiré (temporairement ?) le test qui permettait l’envoit de notification.

Mais, le commit qu’il a retiré est lisible ici et on voit que c’est une simple fonction à ajouter dans la configuration.

Il suffit donc de prendre le bloc qu’il a supprimé, et le mettre dans votre propre configuration.

Sachez qu’en l’état, c’est un peu moins fin que ce que nous avions avec Bash. En effet, vous n’aurez que des notifications qui vous indiqueront qu’une commande est terminée mais pas son état. Alors que sur bash, on avait connaissance du fait que la commande avait planté ou réussi. Il doit y avoir une solution à cela, mais en l’état c’est déjà bien utile (selon moi) d’avoir au moins la notification.

comments powered by Disqus