在窗口标题中显示当前日期和时间

在窗口标题中显示当前日期和时间

目前/技术上是否可以将当前日期和时间(即数字时钟数字)显示到当前活动窗口?比如从脚本中附加一些文本?

答案1

在活动窗口的标题中显示日期和时间

运行下面的脚本(编辑版本这个)在后台,最前面的窗口将显示当前日期和时间:

在此处输入图片描述

如果窗口失去焦点,时间将不会更新;只有在最前面的窗口,时间将要得到更新。
脚本还显示日期和时间每个标签在任何使用标签的应用程序上,例如firefoxgnome-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 > 启动应用程序 > 添加,添加以下命令:

    python3 /path/to/show_datetime.py
    
  5. 如果您在启动时运行它时遇到困难,请使用以下命令(在启动应用程序中):

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

解释

该脚本关注三件事:

  • 最前面的窗户ID
  • 最前面的窗户姓名
  • 当前时间(分钟)

如果其中一个发生变化,则日期/时间将被附加或更新到当前最前面的窗口。

为什么要使用窗口的名称和 ID?

  • 窗户-ID用于设置窗口的标题,以防止设置错误的窗口(例如终端窗口可以类似地命名)。
  • 窗户-姓名是包含选项卡式窗口,例如Firefox。窗口姓名当选择或打开另一个选项卡时会发生变化,而窗口ID不会改变。
  • 有条件的 if any([])只有在有理由的情况下才编辑窗口的标题。

答案2

这是一个简单的 shell 脚本:


要求

  • 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

答案3

这是一个使用 bash、xprop 和 wmctrl(ubuntu 不附带)的脚本。此脚本可以添加为自动启动条目或放入.desktop文件中。基本思路是获取当前活动窗口的 ID,存储其当前标题,并使用 date 命令和标题的输出来形成新标题。if 语句可防止无限循环添加日期。您可以使用 获得wmctrlsudo 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

相关内容