Показать текущую дату и время в заголовке окна

Возможно ли в настоящее время / технически отобразить текущую дату и время (т.е. цифровые часы) в текущем активном окне? Как добавить текст из скрипта?

3 ответа

Решение

Отображение даты и времени в заголовке активного окна

Запустив сценарий ниже (отредактированный вариант этого) в фоновом режиме, самое переднее окно покажет текущую дату и время:

введите описание здесь

Если окно теряет фокус, время не будет обновляться; только в самом переднем окне время будет обновлено.
Сценарий также показывает дату и время для каждой вкладки в любом приложении, используя вкладки, например firefox или же gnome-terminal

Сценарий

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

Как пользоваться

  1. Скрипт использует xdotool

    sudo apt-get install xdotool
    
  2. Скопируйте приведенный ниже скрипт в пустой файл и сохраните его как show_datetime.py

  3. Протестируйте его командой:

    python3 /path/to/show_datetime.py
    

    Откройте новое окно или выделите существующий фокус. Дата и время должны появиться в заголовке окна в течение 1-2 секунд. Подождите минуту, чтобы увидеть, если время обновляется.

  4. Если все работает нормально, добавьте его в автозагрузку приложений: Dash > Startup Applications > Add, добавьте команду:

    python3 /path/to/show_datetime.py
    
  5. Если у вас возникли проблемы с запуском с самого начала, используйте команду (в автозагрузке приложений):

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

объяснение

Сценарий следит за тремя вещами:

  • Идентификатор переднего окна
  • Имя переднего окна
  • Текущее время (минуты)

Если есть изменения в одном из них, дата / время добавляются или обновляются в текущее переднее окно.

Зачем использовать имя и идентификатор окна?

  • Идентификатор окна используется для установки заголовка окна, чтобы предотвратить установку неправильного окна (например, окна терминала могут быть названы аналогично).
  • Имя окна должно включать окна с вкладками, например Firefox, Имя окна изменится, когда будет выбрана или открыта другая вкладка, а идентификатор окна не изменится.
  • Условный if any([]) редактировать заголовок окна, только если есть причина.

Это простой сценарий оболочки:


Требования

  • xdotool

    sudo apt-get install xdotool
    
  • wmctrl

    sudo apt-get install wmctrl
    

Основная часть

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

|| является разделителем между заголовком окна и частью даты / времени. Если вам нужен другой, измените его, например:

#

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

Сценарий

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

Вот скрипт, который использует bash, xprop и wmctrl (не входит в ubuntu). Этот скрипт может быть добавлен как запись автозапуска или помещен в .desktop файл. Основная идея состоит в том, чтобы получить идентификатор текущего активного окна, сохранить его текущий заголовок и использовать вывод команды date и title для формирования нового заголовка. Оператор if предотвращает бесконечный цикл добавления даты. Ты можешь получить wmctrl с sudo apt-get install wmctrl, В противном случае этот скрипт очень упрощен, но делает работу достаточно хорошо.

#!/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
Другие вопросы по тегам