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

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

7
задан 9 June 2015 в 15:50

3 ответа

Показ даты и время в заголовке активного окна

Запуская скрипт ниже (отредактированная версия этого) в фоновом режиме, передняя сторона большая часть окна покажет текущую дату и время:

enter image description here

Если окно потеряет фокус, то время не будет обновлено; только на передней стороне большая часть окна, время будет обновлено.
Сценарий также показывает дату и время на вкладку на любых вкладках использования приложения, как 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. Если все хорошо работает, добавьте его к своим приложениям запуска: Тире> Приложения Запуска> Добавляют, добавляют команду:

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

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

Объяснение

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

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

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

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

  • Окно - идентификатор используется, чтобы установить заголовок окна, предотвратить установку неправильного окна (окна терминала, например, может быть назван так же).
  • Окно - имя должно включать снабженные вкладками окна, например. Firefox. Имя окна изменится, когда другая вкладка будет выбрана или открыта, в то время как окно - идентификатор не изменится.
  • Условное выражение if any([]) должен отредактировать заголовок окна, только если существует причина для.
11
ответ дан 9 June 2015 в 15:50

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

<час>

Требования

  • 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
0
ответ дан 9 June 2015 в 15:50

Вот сценарий, который использует удар, 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
3
ответ дан 9 June 2015 в 15:50

Другие вопросы по тегам:

Похожие вопросы: