ワークスペースストップウォッチ?


13

ワークスペース依存のストップウォッチとして機能できるプログラムはありますか?各ワークスペースで毎日どれだけの時間を費やしたかを知りたい。

編集: Unityを使用しています。


Unityを使用していますか?
ジェイコブVlijm

どのデスクトップマネージャーを使用していますか?
デビッドフォースター

1
はい、Unityを使用しています。
ガゾルパゾール

回答:


11

いい質問です!

次のスクリプトは、ログファイルを作成します。~/viewport_log.txtホームディレクトリに、現在のセッションのビューポート(ワークスペース)使用時間をビューポートごとに報告します。

レポートは2秒に1回更新され、次のようになります(クイックランで)。

workspace1 0:00:24
workspace2 0:00:05
workspace6 0:00:04
workspace8 0:00:05

形式で

hours:minutse:seconds

ご覧のとおり、ワークスペース1、2、6、8のみを使用しました。

使い方

スクリプトはwmctrl -dコマンドを使用して現在のビューポートデータを取得するため、最初にインストールする必要があります。

sudo apt-get install wmctrl

次に:

  1. 以下のスクリプトを空のファイルにコピーして、名前を付けて保存します workspace_log.py
  2. 次のコマンドでテスト実行します。

    python3 /path/to/workspace_log.py

    さまざまなワークスペースをナビゲートし、ファイル~/viewport_log.txtを開いて結果を確認します(または、cat ~/viewport_log.txtログが毎秒更新されるため、読みやすいようにターミナルで実行します)。

  3. すべてが期待どおりに機能する場合は、コマンドをスタートアップアプリケーションに追加します。スクリプトの起動が早すぎると(デスクトップが完全にロードされる前に)クラッシュする可能性が高いため、起動コマンドに小さなブレークを追加して、起動アプリケーションとして機能させる必要があります。

    /bin/bash -c "sleep 15&&python3 /path/to/workspace_log.py"

    スタートアップアプリケーションに追加するには:[ダッシュ]> [スタートアップアプリケーション]> [追加]をクリックし、コマンドを追加します。

スクリプト

import subprocess
import os
import time

# define / clear log file
home = os.environ["HOME"]
logfile = home+"/"+"viewport_log.txt"
open(logfile, "wt").write("")
vplist = []

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def get_dt():
    # get the current viewport
    res = get_res()
    vp_data = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1; curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

def time_format(s):
    # convert time format from seconds to h:m:s
    m, s = divmod(s, 60)
    h, m = divmod(m, 60)
    return "%d:%02d:%02d" % (h, m, s)

current_time1 = float(time.time())
curr_dt1 = get_dt()

while True:
    time.sleep(2)
    curr_dt2 = get_dt()
    if curr_dt2 == curr_dt1:
        current_time2 = float(time.time())
        span = current_time2-current_time1
        vp = "workspace "+curr_dt1+" . "*10
        vplist.sort(key=lambda x: x[0])
        if not vp in [v[0] for v in vplist]:
            vplist.append([vp, span])
        else: 
            index = vplist.index([vplist[i] for i in range(len(vplist)) if vplist[i][0] == vp][0])
            vplist[index][1] = float(vplist[index][1])+span
        with open(logfile, "wt") as out:
            for item in vplist:
                out.write(item[0]+" "+time_format(item[1])+"\n")
    current_time1 = current_time2
    curr_dt1 = curr_dt2

スクリプトのプロパティ

このスクリプトは、2つのモーメント間の正確な時間スパンを計算しtime.sleep(2)ます。両方のモーメントのワークスペースが同じである場合、それらのモーメントの使用ワークスペース(2秒のまま、行の間隔)が対応するワークスペースの合計に加算されます使用時間。

両方の瞬間のワークスペースが異なる場合、ワークスペースの切り替えがあったことは明らかであり、時間はワークスペースの生産時間に追加されません。~/viewport_log.txtしたがって、概要の時間は、ワークスペースごとの期間ごとに2秒に丸められます。

編集

上記のスクリプトをバックグラウンドで実行すると、以下のスクリプトをキーの組み合わせの下に置くことにより、ワークスペースごとの現在の使用時間を表示できます。

#!/bin/bash
lines="$( cat ~/viewport_log.txt )"
zenity --info --title='Usage per Viewport' --text="$lines"
  1. スクリプトを空のファイルにコピーして、名前を付けて保存します view_vplog.sh
  2. のコマンドにより、最初のスクリプトがバックグラウンド実行されている間に実行します。

    sh /path/to/view_vplog.sh
  3. (テスト後)ショートカットキーの組み合わせで使用可能にします。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、選択したキーの組み合わせにコマンドを追加します。

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


1
@ABありがとうございます!この種の質問が好きです:)
ジェイコブVlijm

うわー!投票され、明日インストールされます!(今それを行うにはあまりにも疲れている)
ファビー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.