web-dev-qa-db-ja.com

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

現在/技術的に、現在アクティブなウィンドウに現在の日付と時刻(つまり、デジタル時計番号)を表示できますか?スクリプトからテキストを追加したいですか?

7
mancvso

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

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

enter image description here

ウィンドウがフォーカスを失うと、時間は更新されません。最前面のウィンドウでのみ、時間willが更新されます。
スクリプトは、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. すべてが正常に動作する場合は、スタートアップアプリケーションに追加します:ダッシュ>スタートアップアプリケーション>追加、コマンドを追加します。

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

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

説明

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

  • 最前面のウィンドウのid
  • 最前面のウィンドウのname
  • 現在のtime(分)

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

ウィンドウの名前とIDを使用する理由

  • Window- idは、間違ったウィンドウの設定を防ぐために、ウィンドウのタイトルを設定するために使用されます(例えば、端末ウィンドウも同様に命名できます)。
  • Window- nameは、タブ付きウィンドウを含めます。 Firefox。ウィンドウnameは、別のタブが選択または開かれたときに変更されますが、ウィンドウidは変更されません。
  • conditionalif any([])は、理由がある場合にのみウィンドウのタイトルを編集します。
11
Jacob Vlijm

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


必要条件

  • 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
5
A.B.

Bash、xprop、およびwmctrlを使用するスクリプトを次に示します(ubuntuには付属していません)。このスクリプトは、自動開始エントリとして追加するか、.desktopファイルに配置できます。基本的な考え方は、現在のアクティブウィンドウのIDを取得し、現在のタイトルを保存し、dateコマンドとタイトルの出力を使用して新しいタイトルを作成することです。 ifステートメントは、日付の追加の無限ループを防ぎます。 Sudo apt-get install wmctrlwmctrlを取得できます。それ以外の場合、このスクリプトは非常に単純ですが、十分に機能します。

#!/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