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

man*_*vso 8 scripts window-manager window xdotool

当前/技术上是否可以在当前活动窗口中显示当前日期和时间(即:数字时钟数字)?喜欢从脚本中附加一些文本吗?

Jac*_*ijm 10

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

运行下面的脚本(编辑版本这一背景),最前面的窗口会显示当前日期和时间:

在此处输入图片说明

如果窗口失去焦点,则不会更新时间;只有在最前面的窗口,时间才会更新。
该脚本还使用选项显示任何应用程序上每个选项卡的日期和时间,例如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
Run Code Online (Sandbox Code Playgroud)

如何使用

  1. 该脚本使用 xdotool

    sudo apt-get install xdotool
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将下面的脚本复制到一个空文件中,另存为 show_datetime.py

  3. 通过以下命令测试运行它:

    python3 /path/to/show_datetime.py
    
    Run Code Online (Sandbox Code Playgroud)

    打开一个新窗口或给一个现有的一个焦点。日期和时间应在 1-2 秒内出现在窗口标题中。稍等片刻,看看时间是否更新。

  4. 如果一切正常,请将其添加到您的启动应用程序:Dash > Startup Applications > Add,添加命令:

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

    /bin/bash -c "sleep 20&&python3 /path/to/show_datetime.py"
    
    Run Code Online (Sandbox Code Playgroud)

解释

该脚本关注三件事:

  • 最前面的窗口的id
  • 最前面的窗口名称
  • 当前时间(分钟)

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

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

  • 该窗口- ID是用来设置窗口的标题,以防止设置错误的窗口(终端窗口例如,可以类似的名称)。
  • 窗口名称将包括选项卡式窗口,例如Firefox。选择或打开另一个选项卡时,窗口名称将更改,而窗口ID不会更改。
  • 条件 if any([])是只修改,如果有一个理由窗口的标题。


A.B*_*.B. 5

这是一个简单的shell脚本:


要求


主要部分

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

||是窗口的标题的日期/时间部分之间的隔板。如果您需要另一个,请更改它,例如:

#

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

剧本

#!/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
Run Code Online (Sandbox Code Playgroud)