Возможно ли в настоящее время / технически отобразить текущую дату и время (т.е. цифровые часы) в текущем активном окне? Как добавить текст из сценария?
Запуская скрипт ниже (отредактированная версия этого) в фоновом режиме, передняя сторона большая часть окна покажет текущую дату и время:
Если окно потеряет фокус, то время не будет обновлено; только на передней стороне большая часть окна, время будет обновлено.
Сценарий также показывает дату и время на вкладку на любых вкладках использования приложения, как 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 секунд. Ожидайте минута, чтобы видеть, обновляется ли время.
Если все хорошо работает, добавьте его к своим приложениям запуска: Тире> Приложения Запуска> Добавляют, добавляют команду:
python3 /path/to/show_datetime.py
При наличии затруднений при выполнении его от запуска используйте команду (в приложениях запуска):
/bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
Сценарий следит за тремя вещами:
Если существует изменение или в один, дата/время добавляется или обновляется к в настоящее время frontmost окно.
Почему использование имя - и идентификатор окна?
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
Вот сценарий, который использует удар, xprop, и wmctrl (не идет с человечностью). Этот сценарий может быть добавлен как запись автоматического запуска или помещен в .desktop
файл. Основная идея состоит в том, чтобы получить идентификатор текущего активного окна, сохранить его текущий заголовок и вывод использования команды даты и заголовка для формирования нового заголовка. Если оператор предотвращает бесконечный цикл добавления даты. Можно добраться 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