web-dev-qa-db-fra.com

Afficher la date et l'heure actuelles dans le titre de la fenêtre

Est-il actuellement/techniquement possible d'afficher la date et l'heure actuelles (par exemple, les numéros d'horloge numérique) dans la fenêtre actuellement active? Vous souhaitez ajouter du texte à partir d'un script?

7
mancvso

Affichage de la date et de l'heure dans le titre de la fenêtre active

En exécutant le script ci-dessous (une version modifiée de celle-ci ) en arrière-plan, la fenêtre la plus en avant affiche la date et l'heure actuelles:

enter image description here

Si la fenêtre perd le focus, l'heure ne sera pas mise à jour; seulement sur la fenêtre la plus en avant, l'heure sera mise à jour.
Le script indique également la date et l'heure par onglet de toute application utilisant des onglets, comme firefox ou gnome-terminal.

Le scénario

#!/usr/bin/env python3
import subprocess
import time

cmd = "xdotool", "getwindowfocus"
get_name = "xdotool", "getactivewindow", "getwindowname"

currtime_1 = time.strftime("%d-%m-%Y  %H:%M"); wid_1 = subprocess.check_output(cmd).decode("utf-8").strip()
wname_1 = subprocess.check_output(get_name).decode("utf-8"); wname_1 = wname_1[:wname_1.rfind(" |  ")]

while True:
    time.sleep(2)
    currtime_2 = time.strftime("%d-%m-%Y  %H:%M")
    try:
        wid_2 = subprocess.check_output(cmd).decode("utf-8").strip()
        wname_2 = subprocess.check_output(get_name).decode("utf-8"); wname_2 = wname_2[:wname_2.rfind(" |  ")]
        if any([wid_2 != wid_1, currtime_2 != currtime_1, wname_2 != wname_1]):
            cmd2 = ["xdotool", "set_window", "--name", wname_2+" |  "+str(currtime_2), wid_2]
            subprocess.Popen(cmd2)
        currtime_1 = currtime_2; wid_1 = wid_2
    except subprocess.CalledProcessError:
        pass

Comment utiliser

  1. Le script utilise xdotool

    Sudo apt-get install xdotool
    
  2. Copiez le script ci-dessous dans un fichier vide, enregistrez-le sous le nom show_datetime.py

  3. Testez-le avec la commande:

    python3 /path/to/show_datetime.py
    

    Ouvrez une nouvelle fenêtre ou donnez un focus existant. La date et l'heure doivent apparaître dans le titre de la fenêtre dans un délai de 1 à 2 secondes. Attendez une minute pour voir si l'heure est mise à jour.

  4. Si tout fonctionne correctement, ajoutez-le à vos applications de démarrage: Dash> Applications de démarrage> Ajouter, ajoutez la commande:

    python3 /path/to/show_datetime.py
    
  5. Si vous rencontrez des difficultés pour l'exécuter au démarrage, utilisez la commande (dans les applications de démarrage):

    /bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
    

Explication

Le script garde un œil sur trois choses:

  • L'identifiant de la fenêtre la plus antérieure
  • Le nom de la fenêtre la plus en avant
  • L'heure actuelle (minute)

S'il y a un changement dans l'un ou l'autre, la date/heure est ajoutée ou mise à jour dans la fenêtre la plus en avant actuellement.

Pourquoi utiliser le nom - et - l'id de la fenêtre?

  • L'identifiant window- est utilisé pour définir le titre de la fenêtre, afin d'éviter de définir une fenêtre incorrecte (les fenêtres de terminal peuvent par exemple être nommées de la même manière).
  • Le nom window ( doit inclure des fenêtres à onglets, par exemple: Firefox. Le nom de la fenêtre changera lorsqu'un autre onglet est choisi ou ouvert, tandis que la fenêtre- id ne changera pas.
  • Le conditionnel if any([]) consiste à éditer le titre de la fenêtre uniquement s'il existe une raison.
11
Jacob Vlijm

C'est un simple script shell:


Exigences

  • xdotool

    Sudo apt-get install xdotool
    
  • wmctrl

    Sudo apt-get install wmctrl
    

Partie principale

wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"

Le || est le séparateur entre le titre de la fenêtre et la partie date/heure. Si vous en avez besoin, changez-le, par exemple:

#

wmctrl -r :ACTIVE: -N "$(awk -F' #' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) # $(date "+%Y-%m-%d %H:%M:%S")"

Le scénario

#!/bin/bash
while true
do
    wmctrl -r :ACTIVE: -N "$(awk -F' \\|\\|' '{print $1}' <<< $(xdotool getwindowfocus getwindowname)) || $(date "+%Y-%m-%d %H:%M:%S")"
    sleep 5
done
5
A.B.

Voici un script qui utilise bash, xprop et wmctrl (ne vient pas avec Ubuntu). Ce script peut être ajouté en tant qu'entrée à démarrage automatique ou placé dans le fichier .desktop. L'idée de base est d'obtenir l'identifiant de la fenêtre active en cours, de stocker son titre actuel et d'utiliser la sortie de la commande date et le titre pour former un nouveau titre. L'instruction if empêche la boucle infinie de la date d'ajout. Vous pouvez obtenir wmctrl avec Sudo apt-get install wmctrl. Sinon, ce script est très simpliste mais fait assez bien le travail.

#!/bin/bash
# Date : June 9 2015
# Author: Serg Kolo
# Description: script to append time to window titles
while sleep 1; do
        ACTIVEID=$(xprop -root | awk '/^_NET_ACTIVE_WINDOW/ {gsub("0x","0x0");print $5}')
        MATCHED_TITLE="$( wmctrl -l | awk -v searchterm=$ACTIVEID   '$0~searchterm {for(i=4;i<=NF;i++) printf $i" "}')"
        date --date="$(echo $MATCHED_TITLE | awk '{print $1" "$2}')"  > /dev/null  2>&1

        if [ "$?" -eq 0 ]; then
                MATCHED_TITLE="$(echo $MATCHED_TITLE | awk '{for(i=3;i<=NF;i++) printf $i" "}')"
        fi      
        sleep 1
        wmctrl -i -r $ACTIVEID -T "$(date +"%D %H:%M" 2>/dev/null) $MATCHED_TITLE "

done
3