在視窗標題中顯示目前日期和時間

在視窗標題中顯示目前日期和時間

目前/技術上是否可以將目前日期和時間(即:數字時鐘數字)顯示到目前活動視窗?就像從腳本中附加一些文字一樣?

答案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

相關內容