Exibir a data e hora atuais no título da janela

Exibir a data e hora atuais no título da janela

É atualmente/tecnicamente possível exibir a data e hora atuais (ou seja: números do relógio digital) na janela atualmente ativa? Como anexar algum texto de um script?

Responder1

Mostrando data e hora no título da janela ativa

Executando o script abaixo (uma versão editada doEste) em segundo plano, a janela mais frontal mostrará a data e hora atuais:

insira a descrição da imagem aqui

Se a janela perder o foco, a hora não será atualizada; apenas na janela mais frontal, a horavaiser atualizado.
O script também mostra a data e horapor guiaem qualquer aplicativo usando guias, como firefoxougnome-terminal

O roteiro

#!/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

Como usar

  1. O roteiro usaxdotool

    sudo apt-get install xdotool
    
  2. Copie o script abaixo em um arquivo vazio e salve-o comoshow_datetime.py

  3. Faça um teste e execute-o pelo comando:

    python3 /path/to/show_datetime.py
    

    Abra uma nova janela ou dê foco a uma já existente. A data e a hora devem aparecer no título da janela dentro de 1 a 2 segundos. Espere um minuto para ver se a hora está atualizada.

  4. Se tudo funcionar bem, adicione-o aos seus aplicativos de inicialização: Dash > Aplicativos de inicialização > Adicionar, adicione o comando:

    python3 /path/to/show_datetime.py
    
  5. Se você estiver tendo dificuldades para executá-lo desde a inicialização, use o comando (em aplicativos de inicialização):

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

Explicação

O script fica de olho em três coisas:

  • A janela mais frontaleu ia
  • A janela mais frontalnome
  • O actualtempo(minuto)

Se houver uma alteração em qualquer uma delas, a data/hora será anexada ou atualizada na janela atualmente mais à frente.

Por que usar o nome e o id da janela?

  • A janela-eu iaé usado para definir o título da janela, para evitar definir a janela errada (por exemplo, janelas de terminal podem ter nomes semelhantes).
  • A janela-nomeé incluir janelas com guias, por exemplo Firefox. A janelanomemudará quando outra guia for escolhida ou aberta, enquanto a janelaeu ianão vai mudar.
  • Ocondicional if any([])é editar o título da janela somente se houver um motivo para isso.

Responder2

É um script de shell simples:


Requisitos

  • xdotool

    sudo apt-get install xdotool
    
  • wmctrl

    sudo apt-get install wmctrl
    

Parte principal

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

É ||o separador entre o título da janela e a parte de data/hora. Se precisar de outro, altere-o, por exemplo:

#

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

O roteiro

#!/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

Responder3

Aqui está um script que utiliza bash, xprop e wmctrl (não vem com o Ubuntu). Este script pode ser adicionado como uma entrada de inicialização automática ou colocado em .desktopum arquivo. A ideia básica é obter o ID da janela ativa atual, armazenar seu título atual e usar a saída do comando de data e do título para formar um novo título. A instrução if evita um loop infinito de acréscimo de data. Você pode ficar wmctrlcom sudo apt-get install wmctrl. Caso contrário, este script é muito simplista, mas faz o trabalho bem o suficiente.

#!/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

informação relacionada