Quienes vivimos gran parte de nuestra jornada en la terminal es normal que tarde o temprano acabemos usando una shell como Fish, que nos hace la vida más cómoda.

En mi caso muchas veces realizo tareas que toman cierto tiempo, y me viene bien que algo me avise cuando terminan, para que mientras tanto pueda ir haciendo otras cosas.

Si usas GNOME Terminal y Bash o Zsh, esto viene activado por defecto en las últimas versiones, pero si usas Fish, no. No sé si algún día corregirán ese problema, pero mientras tanto (y para quien no use esa terminal solamente), no estamos desamparados:

En todo terminal, el prompt es el texto que te aparece para darte la bienvenida y que escribas un comando. El mío, por ejemplo, tiene este aspecto:

yajo@yajolap:~/D/d/p/recallstack.gitlab.io|master⚡?

Puedes personalizarlo cómodamente en Fish usando este comando y yendo a la pestaña “prompt”:

$ fish_config

Una vez lo tengas personalizado a tu gusto, se habrá creado el archivo ~/.config/fish/functions/fish_prompt.fish.

Edítalo, y añade este código al principio de la función fish_prompt.

A partir de entonces, cuando un comando dure más de 10 segundos, recibirás una notificación de escritorio con las siguientes características:

  • Un sonido breve indicando si ha funcionado o no.
  • El comando que se ha ejecutado.
  • El tiempo que ha tomado.
  • El código de salida (si ha fallado).
  • Un icono fácilmente identificable para que sepas si ha fallado o no.
  • La notificación desaparecerá tras unos segundos.

Funcionará en cualquier terminal que abras. Eso sí, lógicamente tienes que tener instalados notify-send y paplay.

Observa:

<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
  <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/M_-vNiJpPYQ?autoplay=0&controls=1&end=0&loop=0&mute=0&start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"
  ></iframe>
</div>