ウィンドウのタイトルに現在の日付と時刻を表示する

ウィンドウのタイトルに現在の日付と時刻を表示する

現在アクティブなウィンドウに現在の日付と時刻 (つまり、デジタル時計の数字) を表示することは現在/技術的に可能ですか? スクリプトからテキストを追加するようなものですか?

答え1

アクティブウィンドウのタイトルに日付と時刻を表示する

以下のスクリプトを実行すると(編集版)これです) をバックグラウンドで実行すると、最前面のウィンドウに現在の日付と時刻が表示されます。

ここに画像の説明を入力してください

ウィンドウがフォーカスを失った場合、時間は更新されません。最前面のウィンドウのみ、時間が更新されます。意思更新されます。
スクリプトは日付と時刻も表示しますタブあたりタブを使用するアプリケーションでは、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 秒以内にウィンドウのタイトルに表示されます。時刻が更新されるかどうかを確認するには、1 分ほど待ちます。

  4. すべて正常に動作する場合は、スタートアップ アプリケーションに追加します。Dash > スタートアップ アプリケーション > 追加で、次のコマンドを追加します。

    python3 /path/to/show_datetime.py
    
  5. 起動から実行するのが困難な場合は、次のコマンドを使用します (起動アプリケーション内)。

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

説明

スクリプトは次の 3 つの点に注目します。

  • 最前面のウィンドウのid
  • 最前面のウィンドウの名前
  • 現在時間(分)

どちらかに変更があった場合、日付/時刻が現在最前面のウィンドウに追加または更新されます。

ウィンドウの名前と ID を使用するのはなぜですか?

  • 窓-id間違ったウィンドウが設定されないように、ウィンドウのタイトルを設定するために使用されます (たとえば、ターミナル ウィンドウは同様の名前を付けることができます)。
  • 窓-名前タブ付きウィンドウを含めることですFirefox。例えば、ウィンドウ名前別のタブを選択または開くとウィンドウが変わりますが、id変わりません。
  • 条件付き if any([])理由がある場合にのみウィンドウのタイトルを編集します。

答え2

これは単純なシェル スクリプトです。


要件

  • 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

関連情報