xscreensaver-watch pomodoro

index | OSiUX | archive | charlas | docs | links

dot | git | img | plt | tty | uml

si estoy con auriculares, estoy en un pomodoro

Hace años que utilizo la técnica pomodoro= 1 y no es fácil llevarla adelante, por un lado requiere de cierta auto-disciplina y el entorno que me rodea no siempre contribuye, pero recuerdo que en un momento de auge había convencido a mis pares que si estaba con auriculares y con una notificación con un tomate, significaba que debían esperar en el peor de los casos 25 minutos para «molestarme».

soy mi peor enemigo

Es fácil tirar culpas, pero la verdad, es probable que yo mismo haya sido quién interrumpió un pomodoro o me puse a hacer otra cosa, o ni siquiera inicié el pomodoro o lo inicié sin una definición precisa de la tarea que estaba por realizar.

Mucho peor, es ignorar las advertencias y continuar trabajando, sin realizar una pausa de 5 minutos, muchas veces sucede eso y es terrible porque no alejarse unos minutos del teclado hace mal en todo sentido, no te permite repensar un poco que estabas haciendo, porqué no funcionaba o porqué te estas frustrando con eso que no te sale, tal vez simplemente te dejaste llevar y te fuiste por las ramas.

la pausa son 5 minutos obligatorios!

Algo que le faltaba a mi script pomodoro 2 era obligarme a pausar 5 minutos, luego de 25 minutos de trabajo intenso y enfocado, asi que estuve dándole vueltas a esa idea hace unos días, ya que estoy intentando ser un poco mas estricto con mis pomodoros y buscando por la web, caí en un foro 3 donde había un ejemplo para escuchar los eventos de xscreensaver y en función de esos estados disparar acciones!

xscreensaver-watch

Mi primer versión del script xscreensaver-watch se ocupa de registrar en un log cada vez que se bloquea (LOCK) o desbloquea (UNBLANK) y en función de la fecha y hora, verificar si todavía no pasaron 5 minutos, vuelve a activar xscreensaver y por más que vuelva a intentar desactivarlo ingresando mi contraseña, si no pasaron 5 minutos, me deja fuera de mi notebook :P

Falta pulir un poco, pero va queriendo bloquear correctamente :)

#!/bin/bash

# This script comes with ABSOLUTELY NO WARRANTY, use at own risk
# Copyright (C) 2021 Osiris Alejandro Gomez <osiux@osiux.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# based on https://bbs.archlinux.org/viewtopic.php?pid=1182514

LOG="$HOME/log/xscreensaver-watch.log"

lock()
{
  exec xscreensaver-command -lock &
}

last_lock()
{
  local LOCK
  LOCK="$(grep LOCK "$LOG" | tail -1 | cut -d' ' -f2)"
  [[ -z "$LOCK" ]] && echo "$DATE $TIME LOCK" >> "$LOG"
  echo "$LOCK"
}

watch_lock()
{
  LOCK=$(last_lock)
  DATE="$(date +'%F')"
  TIME="$(date +'%H:%M')"
  DIFF="$(timediff "$LOCK" "$TIME")"
  MINUTES="$(time2minutes "$DIFF")"
  [[ "$MINUTES" -ge 5 ]] && echo "$DATE $TIME LOCK" >> "$LOG"
}

watch_unblank()
{
  LOCK=$(last_lock)
  DATE="$(date +'%F')"
  TIME="$(date +'%H:%M')"
  DIFF="$(timediff "$LOCK" "$TIME")"
  MINUTES="$(time2minutes "$DIFF")"
  [[ "$MINUTES" -lt 5 ]] && lock
  echo "$DATE $TIME UNBLANK" >> "$LOG"
}

watch_while()
{
while read -r LINE
do 
  case "$LINE" in
    UNBLANK*) watch_unblank;;
    LOCK*)        watch_lock;;
  esac
done
}

/usr/bin/xscreensaver-command -watch | watch_while

ChangeLog

Notas al pie de página: