Показать текущую дату и время в заголовке окна
Возможно ли в настоящее время / технически отобразить текущую дату и время (т.е. цифровые часы) в текущем активном окне? Как добавить текст из скрипта?
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
Как пользоваться
Скрипт использует
xdotool
sudo apt-get install xdotool
Скопируйте приведенный ниже скрипт в пустой файл и сохраните его как
show_datetime.py
Протестируйте его командой:
python3 /path/to/show_datetime.py
Откройте новое окно или выделите существующий фокус. Дата и время должны появиться в заголовке окна в течение 1-2 секунд. Подождите минуту, чтобы увидеть, если время обновляется.
Если все работает нормально, добавьте его в автозагрузку приложений: Dash > Startup Applications > Add, добавьте команду:
python3 /path/to/show_datetime.py
Если у вас возникли проблемы с запуском с самого начала, используйте команду (в автозагрузке приложений):
/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