NowFocus 0.2.0__tar.gz → 0.2.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nowfocus-0.2.0/src/NowFocus.egg-info → nowfocus-0.2.3}/PKG-INFO +62 -57
- nowfocus-0.2.3/README.md +117 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/pyproject.toml +3 -3
- {nowfocus-0.2.0 → nowfocus-0.2.3/src/NowFocus.egg-info}/PKG-INFO +62 -57
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/__main__.py +2 -1
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/conf.py +1 -1
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/task_window.py +16 -29
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/utils.py +5 -5
- nowfocus-0.2.0/README.md +0 -112
- {nowfocus-0.2.0 → nowfocus-0.2.3}/LICENSE +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/setup.cfg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/NowFocus.egg-info/SOURCES.txt +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/NowFocus.egg-info/dependency_links.txt +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/NowFocus.egg-info/entry_points.txt +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/NowFocus.egg-info/requires.txt +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/NowFocus.egg-info/top_level.txt +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/__init__.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/activitywatch.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/caldav.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/csv.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/psc_timetracker.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/taskwarrior.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/timewarrior.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/todo_template.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/todotxt.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/trello.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/txt.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/connectors/vikunja.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/example-todo.txt +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/cancel.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/cancel.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/edit.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/edit.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-0.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-0.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-1.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-2.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-3.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-4.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-5.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-6.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-7.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-8.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon-9.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/icon.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/mark-done.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/mark-done.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/pause.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/pause.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/settings.png +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/settings.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/action-unavailable-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/applications-engineering-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/background-selected-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/cancel-operation-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-checked-symbolic (2).svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-checked-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-mixed-symbolic (2).svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-mixed-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-symbolic (2).svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/clock-app-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/document-edit-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/document-new-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/document-open-recent-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/edit-find-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/edit-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/filter-flagged-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/format-unordered-list-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/help-about-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/list-add-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/list-remove-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/media-playback-pause.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/media-playback-start-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/no-event-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/object-select-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-about-symbolic-2.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-about-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-keyboard-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-notifications-symbolic (2).svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-notifications-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-search-symbolic-2.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-search-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-system-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-time-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-wacom-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.clocks-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/pause-large-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/preferences-system-time-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/process-stop-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/selection-checked.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/software-installed-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/stopwatch-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/system-settings-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/timer-sand-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/timer-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/user-trash-symbolic (2).svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/user-trash-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-fullscreen-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-more-horizontal-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-more-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-restore-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-sort-ascending-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-sort-descending-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-tasks-unscheduled-symbolic.svg +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/new_task_dialog.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/runner.sh +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/session_edit_dialog.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/session_options.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/sessions.csv +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/settings.py +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/sound/bell-xylophone-g.mp3 +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/sound/dinner-bell.mp3 +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/sound/xylophone-chord.mp3 +0 -0
- {nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/styles.css +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: NowFocus
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: NowFocus: the open source task-tracking self-control panel.
|
|
5
|
-
Author:
|
|
6
|
-
Project-URL: Homepage, https://gitlab.com/GitFr33/
|
|
5
|
+
Author: GitFr33
|
|
6
|
+
Project-URL: Homepage, https://gitlab.com/GitFr33/NowFocus
|
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
|
8
8
|
Classifier: Operating System :: OS Independent
|
|
9
9
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
@@ -44,25 +44,36 @@ Requires-Dist: vobject
|
|
|
44
44
|
Requires-Dist: x-wr-timezone
|
|
45
45
|
Dynamic: license-file
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
<div align="center"><img src="nowfocus.svg" width="60" align="center">
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
# *NowFocus* <br> Open-source task timer for linux
|
|
50
50
|
|
|
51
|
+
**Avoid multifailing. Master your to-do lists. Track your time.**
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
</div>
|
|
54
|
+
NowFocus is a clean, keyboard-driven project time tracker build with python + GTK that flexibly connects multiple to-do lists with multiple time trackers and displays your current task and time spent in the status bar.
|
|
53
55
|
|
|
56
|
+
## Features
|
|
54
57
|
- Unlimited flexible combinations of to-do lists and time tracking systems
|
|
55
|
-
-
|
|
58
|
+
- Infinitely nestable lists
|
|
56
59
|
- Inactivity detection that automatically pauses time tracking
|
|
57
60
|
- Pomodoro timer
|
|
58
61
|
- Task prioritization
|
|
59
62
|
- Time targets: set a minimum or maximum time for any task or list of tasks and get reminded to follow though
|
|
60
63
|
- Randomness interrupt bell (optional) to keep you on track with tracking your time
|
|
61
|
-
-
|
|
64
|
+
- Keyboard-driven interface
|
|
62
65
|
- Offline to-do list cache
|
|
63
|
-
-
|
|
66
|
+
- CLI
|
|
67
|
+
- Run a command (or launch an application) when a task is started
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
<img src="Screenshot-25-09-23-11-42-56.webp" width="500">
|
|
71
|
+
<img src="Screenshot-25-09-23-11-46-14.webp" width="400">
|
|
72
|
+
<img src="Screenshot-25-09-23-11-53-22.webp" width="400">
|
|
73
|
+
|
|
74
|
+
<br>
|
|
64
75
|
|
|
65
|
-
### Currently Supported
|
|
76
|
+
### Currently Supported To-do List Backends
|
|
66
77
|
|
|
67
78
|
- Simple text or markdown file with indentation based sub-lists
|
|
68
79
|
- Any to-do list that supports [CalDav todos](https://en.wikipedia.org/wiki/CalDAV)
|
|
@@ -70,8 +81,9 @@ A simple, performance-oriented, activity tracker that flexibly connects multiple
|
|
|
70
81
|
- [TaskWarrior](https://taskwarrior.org/)
|
|
71
82
|
- [Vikunja](https://www.vikunja.io)
|
|
72
83
|
- [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
|
|
84
|
+
- [Trello](https://www.trello.com)
|
|
73
85
|
|
|
74
|
-
### Currently Supported Time
|
|
86
|
+
### Currently Supported Time Tracker Backends
|
|
75
87
|
|
|
76
88
|
- CSV file
|
|
77
89
|
- [ActivityWatch](https://www.activitywatch.net)
|
|
@@ -79,53 +91,62 @@ A simple, performance-oriented, activity tracker that flexibly connects multiple
|
|
|
79
91
|
- [TimeWarrior](https://timewarrior.net)
|
|
80
92
|
|
|
81
93
|
|
|
94
|
+
## Installation (using pipx)
|
|
82
95
|
|
|
83
|
-
|
|
84
|
-
If you don't have pipx install
|
|
96
|
+
1. Run the following in terminal to install with dependencies:
|
|
85
97
|
```
|
|
86
|
-
sudo apt install pipx
|
|
98
|
+
sudo apt install pip pipx install gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf python3.12-venv libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
|
|
87
99
|
pipx ensurepath
|
|
88
|
-
|
|
100
|
+
pipx install NowFocus
|
|
101
|
+
```
|
|
102
|
+
2. Now run `nowfocus` and check for errors
|
|
89
103
|
|
|
104
|
+
3. Set up a keybinding (on Ubuntu or Linux Mint), open **Setting > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `nowfocus`, and pick whatever key combo you'd like.
|
|
90
105
|
|
|
91
|
-
|
|
106
|
+
4. Add the following command to your startup applications: `nowfocus --force`
|
|
92
107
|
|
|
93
|
-
- Install dependencies:
|
|
94
|
-
```
|
|
95
|
-
sudo apt install gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf python3.12-venv pip libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
|
|
96
|
-
```
|
|
97
108
|
|
|
98
|
-
|
|
109
|
+
## Usage
|
|
99
110
|
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
python3 -m venv .venv/nowfocus
|
|
103
|
-
source .venv/nowfocus/bin/activate
|
|
104
|
-
```
|
|
111
|
+
#### Set up to-do lists and time trackers
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
113
|
+
Open NowFocus **Settings** from the indicator menu or tasks window and connect your to-do lists and time tracker(s)
|
|
114
|
+
|
|
115
|
+
#### Task Window Keybindings
|
|
116
|
+
|
|
117
|
+
- `F11` Toggle fullscreen
|
|
118
|
+
- `Esc` Close task window
|
|
119
|
+
- `Enter` Start top task (or make a new task with current search phrase if no results)
|
|
120
|
+
- `Ctrl + P` **Pause** current task
|
|
121
|
+
- `Ctrl + D` Pause current task and mark it **Done**
|
|
122
|
+
- `Ctrl + X` Cancel current task
|
|
123
|
+
- `Ctrl + N` **New** task
|
|
124
|
+
- `Ctrl + R` **Refresh** todolists
|
|
125
|
+
- `Ctrl + L` or `Ctrl + F` **Focus** the task search
|
|
111
126
|
|
|
112
|
-
|
|
127
|
+
#### Commandline Interface
|
|
113
128
|
|
|
129
|
+
- To raise the task window use simply: `nowfocus`
|
|
130
|
+
- If NowFocus has crashed or failed to shut down nicely use `nowfocus --force`
|
|
131
|
+
- To start timing a task: add the task name as the first positional argument. `nowfocus "checking email"`
|
|
132
|
+
- To stop timing use `nowfocus stop`
|
|
133
|
+
- Start with verbose logging use: `nowfocus -l 3`
|
|
134
|
+
- Start with targeted verbose logging use: `nowfocus -s trello`
|
|
114
135
|
|
|
115
|
-
### Install from Source
|
|
116
136
|
|
|
117
|
-
|
|
118
|
-
- Change to `YOUR_INSTALL_PATH` directory with `cd /path/to/where/you/cloned/nowfocus`
|
|
137
|
+
## Development
|
|
119
138
|
|
|
120
|
-
|
|
121
|
-
- Run `python3 __main__.py` and check for errors
|
|
122
|
-
- Add the following to your startup applications: `bash -c "source .venv/nowfocus/bin/activate; python3 /YOUR_INSTALL_PATH/src/what-am-doing/__main__.py"`
|
|
139
|
+
### Install from Source
|
|
123
140
|
|
|
141
|
+
- Install dependencies from above.
|
|
142
|
+
- Clone this repo somewhere (referred to as `YOUR_INSTALL_PATH`)
|
|
143
|
+
- Change to `YOUR_INSTALL_PATH` directory with `cd YOUR_INSTALL_PATH/nowfocus`
|
|
144
|
+
- build python module with `python3 -m build` (this should be done in a venv and will require some dependecies...)
|
|
145
|
+
- pipx install -e --force YOUR_INSTALL_PATH/monotask/
|
|
124
146
|
|
|
125
|
-
## Usage
|
|
126
147
|
|
|
127
|
-
- Open settings and add your to-do list and time tracker details
|
|
128
148
|
|
|
149
|
+
<!--
|
|
129
150
|
## Build Flatpak
|
|
130
151
|
|
|
131
152
|
```
|
|
@@ -134,23 +155,7 @@ python3 -m build
|
|
|
134
155
|
flatpak run org.flatpak.Builder --force-clean --user --install --install-deps-from=flathub --repo=repo builddir APPID.yaml
|
|
135
156
|
flatpak run APPID
|
|
136
157
|
```
|
|
137
|
-
|
|
138
|
-
## Keybindings
|
|
139
|
-
|
|
140
|
-
To set up a keybinding to open your tasks on Ubuntu or Linux Mint, open **Setting > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `/YOUR_INSTALL_PATH/src/what-am-doing/signal.sh`, and pick whatever key combo you'd like.
|
|
141
|
-
|
|
142
|
-
### Task Window Keybindings
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- `F11` Toggle fullscreen
|
|
146
|
-
- `Esc` Close task window
|
|
147
|
-
- `Enter` Start top task (or make a new task with current search phrase if no results)
|
|
148
|
-
- `Ctrl + P` **Pause** current task
|
|
149
|
-
- `Ctrl + D` Pause current task and mark it **Done**
|
|
150
|
-
- `Ctrl + X` Cancel current task
|
|
151
|
-
- `Ctrl + N` **New** task
|
|
152
|
-
- `Ctrl + R` **Refresh** todolists
|
|
153
|
-
- `Ctrl + L` or `Ctrl + F` **Focus** the task search
|
|
158
|
+
-->
|
|
154
159
|
|
|
155
160
|
|
|
156
161
|
<!-- ## Contributing
|
nowfocus-0.2.3/README.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<div align="center"><img src="nowfocus.svg" width="60" align="center">
|
|
2
|
+
|
|
3
|
+
# *NowFocus* <br> Open-source task timer for linux
|
|
4
|
+
|
|
5
|
+
**Avoid multifailing. Master your to-do lists. Track your time.**
|
|
6
|
+
|
|
7
|
+
</div>
|
|
8
|
+
NowFocus is a clean, keyboard-driven project time tracker build with python + GTK that flexibly connects multiple to-do lists with multiple time trackers and displays your current task and time spent in the status bar.
|
|
9
|
+
|
|
10
|
+
## Features
|
|
11
|
+
- Unlimited flexible combinations of to-do lists and time tracking systems
|
|
12
|
+
- Infinitely nestable lists
|
|
13
|
+
- Inactivity detection that automatically pauses time tracking
|
|
14
|
+
- Pomodoro timer
|
|
15
|
+
- Task prioritization
|
|
16
|
+
- Time targets: set a minimum or maximum time for any task or list of tasks and get reminded to follow though
|
|
17
|
+
- Randomness interrupt bell (optional) to keep you on track with tracking your time
|
|
18
|
+
- Keyboard-driven interface
|
|
19
|
+
- Offline to-do list cache
|
|
20
|
+
- CLI
|
|
21
|
+
- Run a command (or launch an application) when a task is started
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
<img src="Screenshot-25-09-23-11-42-56.webp" width="500">
|
|
25
|
+
<img src="Screenshot-25-09-23-11-46-14.webp" width="400">
|
|
26
|
+
<img src="Screenshot-25-09-23-11-53-22.webp" width="400">
|
|
27
|
+
|
|
28
|
+
<br>
|
|
29
|
+
|
|
30
|
+
### Currently Supported To-do List Backends
|
|
31
|
+
|
|
32
|
+
- Simple text or markdown file with indentation based sub-lists
|
|
33
|
+
- Any to-do list that supports [CalDav todos](https://en.wikipedia.org/wiki/CalDAV)
|
|
34
|
+
- [todotxt format](http://todotxt.org/)
|
|
35
|
+
- [TaskWarrior](https://taskwarrior.org/)
|
|
36
|
+
- [Vikunja](https://www.vikunja.io)
|
|
37
|
+
- [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
|
|
38
|
+
- [Trello](https://www.trello.com)
|
|
39
|
+
|
|
40
|
+
### Currently Supported Time Tracker Backends
|
|
41
|
+
|
|
42
|
+
- CSV file
|
|
43
|
+
- [ActivityWatch](https://www.activitywatch.net)
|
|
44
|
+
- [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
|
|
45
|
+
- [TimeWarrior](https://timewarrior.net)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
## Installation (using pipx)
|
|
49
|
+
|
|
50
|
+
1. Run the following in terminal to install with dependencies:
|
|
51
|
+
```
|
|
52
|
+
sudo apt install pip pipx install gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf python3.12-venv libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
|
|
53
|
+
pipx ensurepath
|
|
54
|
+
pipx install NowFocus
|
|
55
|
+
```
|
|
56
|
+
2. Now run `nowfocus` and check for errors
|
|
57
|
+
|
|
58
|
+
3. Set up a keybinding (on Ubuntu or Linux Mint), open **Setting > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `nowfocus`, and pick whatever key combo you'd like.
|
|
59
|
+
|
|
60
|
+
4. Add the following command to your startup applications: `nowfocus --force`
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
## Usage
|
|
64
|
+
|
|
65
|
+
#### Set up to-do lists and time trackers
|
|
66
|
+
|
|
67
|
+
Open NowFocus **Settings** from the indicator menu or tasks window and connect your to-do lists and time tracker(s)
|
|
68
|
+
|
|
69
|
+
#### Task Window Keybindings
|
|
70
|
+
|
|
71
|
+
- `F11` Toggle fullscreen
|
|
72
|
+
- `Esc` Close task window
|
|
73
|
+
- `Enter` Start top task (or make a new task with current search phrase if no results)
|
|
74
|
+
- `Ctrl + P` **Pause** current task
|
|
75
|
+
- `Ctrl + D` Pause current task and mark it **Done**
|
|
76
|
+
- `Ctrl + X` Cancel current task
|
|
77
|
+
- `Ctrl + N` **New** task
|
|
78
|
+
- `Ctrl + R` **Refresh** todolists
|
|
79
|
+
- `Ctrl + L` or `Ctrl + F` **Focus** the task search
|
|
80
|
+
|
|
81
|
+
#### Commandline Interface
|
|
82
|
+
|
|
83
|
+
- To raise the task window use simply: `nowfocus`
|
|
84
|
+
- If NowFocus has crashed or failed to shut down nicely use `nowfocus --force`
|
|
85
|
+
- To start timing a task: add the task name as the first positional argument. `nowfocus "checking email"`
|
|
86
|
+
- To stop timing use `nowfocus stop`
|
|
87
|
+
- Start with verbose logging use: `nowfocus -l 3`
|
|
88
|
+
- Start with targeted verbose logging use: `nowfocus -s trello`
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
## Development
|
|
92
|
+
|
|
93
|
+
### Install from Source
|
|
94
|
+
|
|
95
|
+
- Install dependencies from above.
|
|
96
|
+
- Clone this repo somewhere (referred to as `YOUR_INSTALL_PATH`)
|
|
97
|
+
- Change to `YOUR_INSTALL_PATH` directory with `cd YOUR_INSTALL_PATH/nowfocus`
|
|
98
|
+
- build python module with `python3 -m build` (this should be done in a venv and will require some dependecies...)
|
|
99
|
+
- pipx install -e --force YOUR_INSTALL_PATH/monotask/
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
<!--
|
|
104
|
+
## Build Flatpak
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
python3 -m build
|
|
108
|
+
# python3 flatpak-pip-generator --runtime=org.gnome.Sdk/x86_64/47 PACKAGE # run this for lots of stuff
|
|
109
|
+
flatpak run org.flatpak.Builder --force-clean --user --install --install-deps-from=flathub --repo=repo builddir APPID.yaml
|
|
110
|
+
flatpak run APPID
|
|
111
|
+
```
|
|
112
|
+
-->
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
<!-- ## Contributing
|
|
116
|
+
Package it for your operating system.
|
|
117
|
+
Write a connector for your favorite to-do list or time tracker -->
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "NowFocus"
|
|
3
|
-
version = "0.2.
|
|
3
|
+
version = "0.2.3"
|
|
4
4
|
authors = [
|
|
5
|
-
{ name="
|
|
5
|
+
{ name="GitFr33" },
|
|
6
6
|
]
|
|
7
7
|
description = "NowFocus: the open source task-tracking self-control panel."
|
|
8
8
|
readme = "README.md"
|
|
@@ -55,7 +55,7 @@ dependencies = [
|
|
|
55
55
|
]
|
|
56
56
|
|
|
57
57
|
[project.urls]
|
|
58
|
-
Homepage = "https://gitlab.com/GitFr33/
|
|
58
|
+
Homepage = "https://gitlab.com/GitFr33/NowFocus"
|
|
59
59
|
|
|
60
60
|
[project.gui-scripts]
|
|
61
61
|
nowfocus = "nowfocus.__main__:startup"
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: NowFocus
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.3
|
|
4
4
|
Summary: NowFocus: the open source task-tracking self-control panel.
|
|
5
|
-
Author:
|
|
6
|
-
Project-URL: Homepage, https://gitlab.com/GitFr33/
|
|
5
|
+
Author: GitFr33
|
|
6
|
+
Project-URL: Homepage, https://gitlab.com/GitFr33/NowFocus
|
|
7
7
|
Classifier: Programming Language :: Python :: 3
|
|
8
8
|
Classifier: Operating System :: OS Independent
|
|
9
9
|
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
@@ -44,25 +44,36 @@ Requires-Dist: vobject
|
|
|
44
44
|
Requires-Dist: x-wr-timezone
|
|
45
45
|
Dynamic: license-file
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
<div align="center"><img src="nowfocus.svg" width="60" align="center">
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
# *NowFocus* <br> Open-source task timer for linux
|
|
50
50
|
|
|
51
|
+
**Avoid multifailing. Master your to-do lists. Track your time.**
|
|
51
52
|
|
|
52
|
-
|
|
53
|
+
</div>
|
|
54
|
+
NowFocus is a clean, keyboard-driven project time tracker build with python + GTK that flexibly connects multiple to-do lists with multiple time trackers and displays your current task and time spent in the status bar.
|
|
53
55
|
|
|
56
|
+
## Features
|
|
54
57
|
- Unlimited flexible combinations of to-do lists and time tracking systems
|
|
55
|
-
-
|
|
58
|
+
- Infinitely nestable lists
|
|
56
59
|
- Inactivity detection that automatically pauses time tracking
|
|
57
60
|
- Pomodoro timer
|
|
58
61
|
- Task prioritization
|
|
59
62
|
- Time targets: set a minimum or maximum time for any task or list of tasks and get reminded to follow though
|
|
60
63
|
- Randomness interrupt bell (optional) to keep you on track with tracking your time
|
|
61
|
-
-
|
|
64
|
+
- Keyboard-driven interface
|
|
62
65
|
- Offline to-do list cache
|
|
63
|
-
-
|
|
66
|
+
- CLI
|
|
67
|
+
- Run a command (or launch an application) when a task is started
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
<img src="Screenshot-25-09-23-11-42-56.webp" width="500">
|
|
71
|
+
<img src="Screenshot-25-09-23-11-46-14.webp" width="400">
|
|
72
|
+
<img src="Screenshot-25-09-23-11-53-22.webp" width="400">
|
|
73
|
+
|
|
74
|
+
<br>
|
|
64
75
|
|
|
65
|
-
### Currently Supported
|
|
76
|
+
### Currently Supported To-do List Backends
|
|
66
77
|
|
|
67
78
|
- Simple text or markdown file with indentation based sub-lists
|
|
68
79
|
- Any to-do list that supports [CalDav todos](https://en.wikipedia.org/wiki/CalDAV)
|
|
@@ -70,8 +81,9 @@ A simple, performance-oriented, activity tracker that flexibly connects multiple
|
|
|
70
81
|
- [TaskWarrior](https://taskwarrior.org/)
|
|
71
82
|
- [Vikunja](https://www.vikunja.io)
|
|
72
83
|
- [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
|
|
84
|
+
- [Trello](https://www.trello.com)
|
|
73
85
|
|
|
74
|
-
### Currently Supported Time
|
|
86
|
+
### Currently Supported Time Tracker Backends
|
|
75
87
|
|
|
76
88
|
- CSV file
|
|
77
89
|
- [ActivityWatch](https://www.activitywatch.net)
|
|
@@ -79,53 +91,62 @@ A simple, performance-oriented, activity tracker that flexibly connects multiple
|
|
|
79
91
|
- [TimeWarrior](https://timewarrior.net)
|
|
80
92
|
|
|
81
93
|
|
|
94
|
+
## Installation (using pipx)
|
|
82
95
|
|
|
83
|
-
|
|
84
|
-
If you don't have pipx install
|
|
96
|
+
1. Run the following in terminal to install with dependencies:
|
|
85
97
|
```
|
|
86
|
-
sudo apt install pipx
|
|
98
|
+
sudo apt install pip pipx install gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf python3.12-venv libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
|
|
87
99
|
pipx ensurepath
|
|
88
|
-
|
|
100
|
+
pipx install NowFocus
|
|
101
|
+
```
|
|
102
|
+
2. Now run `nowfocus` and check for errors
|
|
89
103
|
|
|
104
|
+
3. Set up a keybinding (on Ubuntu or Linux Mint), open **Setting > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `nowfocus`, and pick whatever key combo you'd like.
|
|
90
105
|
|
|
91
|
-
|
|
106
|
+
4. Add the following command to your startup applications: `nowfocus --force`
|
|
92
107
|
|
|
93
|
-
- Install dependencies:
|
|
94
|
-
```
|
|
95
|
-
sudo apt install gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf python3.12-venv pip libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
|
|
96
|
-
```
|
|
97
108
|
|
|
98
|
-
|
|
109
|
+
## Usage
|
|
99
110
|
|
|
100
|
-
|
|
101
|
-
```
|
|
102
|
-
python3 -m venv .venv/nowfocus
|
|
103
|
-
source .venv/nowfocus/bin/activate
|
|
104
|
-
```
|
|
111
|
+
#### Set up to-do lists and time trackers
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
113
|
+
Open NowFocus **Settings** from the indicator menu or tasks window and connect your to-do lists and time tracker(s)
|
|
114
|
+
|
|
115
|
+
#### Task Window Keybindings
|
|
116
|
+
|
|
117
|
+
- `F11` Toggle fullscreen
|
|
118
|
+
- `Esc` Close task window
|
|
119
|
+
- `Enter` Start top task (or make a new task with current search phrase if no results)
|
|
120
|
+
- `Ctrl + P` **Pause** current task
|
|
121
|
+
- `Ctrl + D` Pause current task and mark it **Done**
|
|
122
|
+
- `Ctrl + X` Cancel current task
|
|
123
|
+
- `Ctrl + N` **New** task
|
|
124
|
+
- `Ctrl + R` **Refresh** todolists
|
|
125
|
+
- `Ctrl + L` or `Ctrl + F` **Focus** the task search
|
|
111
126
|
|
|
112
|
-
|
|
127
|
+
#### Commandline Interface
|
|
113
128
|
|
|
129
|
+
- To raise the task window use simply: `nowfocus`
|
|
130
|
+
- If NowFocus has crashed or failed to shut down nicely use `nowfocus --force`
|
|
131
|
+
- To start timing a task: add the task name as the first positional argument. `nowfocus "checking email"`
|
|
132
|
+
- To stop timing use `nowfocus stop`
|
|
133
|
+
- Start with verbose logging use: `nowfocus -l 3`
|
|
134
|
+
- Start with targeted verbose logging use: `nowfocus -s trello`
|
|
114
135
|
|
|
115
|
-
### Install from Source
|
|
116
136
|
|
|
117
|
-
|
|
118
|
-
- Change to `YOUR_INSTALL_PATH` directory with `cd /path/to/where/you/cloned/nowfocus`
|
|
137
|
+
## Development
|
|
119
138
|
|
|
120
|
-
|
|
121
|
-
- Run `python3 __main__.py` and check for errors
|
|
122
|
-
- Add the following to your startup applications: `bash -c "source .venv/nowfocus/bin/activate; python3 /YOUR_INSTALL_PATH/src/what-am-doing/__main__.py"`
|
|
139
|
+
### Install from Source
|
|
123
140
|
|
|
141
|
+
- Install dependencies from above.
|
|
142
|
+
- Clone this repo somewhere (referred to as `YOUR_INSTALL_PATH`)
|
|
143
|
+
- Change to `YOUR_INSTALL_PATH` directory with `cd YOUR_INSTALL_PATH/nowfocus`
|
|
144
|
+
- build python module with `python3 -m build` (this should be done in a venv and will require some dependecies...)
|
|
145
|
+
- pipx install -e --force YOUR_INSTALL_PATH/monotask/
|
|
124
146
|
|
|
125
|
-
## Usage
|
|
126
147
|
|
|
127
|
-
- Open settings and add your to-do list and time tracker details
|
|
128
148
|
|
|
149
|
+
<!--
|
|
129
150
|
## Build Flatpak
|
|
130
151
|
|
|
131
152
|
```
|
|
@@ -134,23 +155,7 @@ python3 -m build
|
|
|
134
155
|
flatpak run org.flatpak.Builder --force-clean --user --install --install-deps-from=flathub --repo=repo builddir APPID.yaml
|
|
135
156
|
flatpak run APPID
|
|
136
157
|
```
|
|
137
|
-
|
|
138
|
-
## Keybindings
|
|
139
|
-
|
|
140
|
-
To set up a keybinding to open your tasks on Ubuntu or Linux Mint, open **Setting > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `/YOUR_INSTALL_PATH/src/what-am-doing/signal.sh`, and pick whatever key combo you'd like.
|
|
141
|
-
|
|
142
|
-
### Task Window Keybindings
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
- `F11` Toggle fullscreen
|
|
146
|
-
- `Esc` Close task window
|
|
147
|
-
- `Enter` Start top task (or make a new task with current search phrase if no results)
|
|
148
|
-
- `Ctrl + P` **Pause** current task
|
|
149
|
-
- `Ctrl + D` Pause current task and mark it **Done**
|
|
150
|
-
- `Ctrl + X` Cancel current task
|
|
151
|
-
- `Ctrl + N` **New** task
|
|
152
|
-
- `Ctrl + R` **Refresh** todolists
|
|
153
|
-
- `Ctrl + L` or `Ctrl + F` **Focus** the task search
|
|
158
|
+
-->
|
|
154
159
|
|
|
155
160
|
|
|
156
161
|
<!-- ## Contributing
|
|
@@ -717,7 +717,8 @@ class Application(Gtk.Application):
|
|
|
717
717
|
dbg("no handler for received signal",s='signals',l=3)
|
|
718
718
|
|
|
719
719
|
def check_pipe(self):
|
|
720
|
-
print("Listening to pipe at ",pipe_file)
|
|
720
|
+
# print("Listening to pipe at ",pipe_file)
|
|
721
|
+
|
|
721
722
|
try:
|
|
722
723
|
with open(pipe_file, "r") as pipe:
|
|
723
724
|
data = pipe.read().strip()
|
|
@@ -21,7 +21,7 @@ user_settings_dir = GLib.get_user_config_dir()+"/"+app_id
|
|
|
21
21
|
Path(user_settings_dir).mkdir(parents=True, exist_ok=True)
|
|
22
22
|
|
|
23
23
|
debug_level = 1 # dev value
|
|
24
|
-
debug_systems = [
|
|
24
|
+
debug_systems = []
|
|
25
25
|
|
|
26
26
|
# key and type must be the same, (Seems redundant but it's is quite helpful)
|
|
27
27
|
connectors = {
|
|
@@ -41,17 +41,13 @@ class TaskWindow(Gtk.Window):
|
|
|
41
41
|
|
|
42
42
|
self.set_default_size(900,400)
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
self.search_cache_refresh_time = now()
|
|
44
|
+
self.search_cache_refresh_time = now().strftime("%Y-%m-%d %H:%M:%S")
|
|
46
45
|
self.search_cache = {}
|
|
47
46
|
self.task_rclick_menu = Gtk.Popover()
|
|
48
47
|
self.task_rclick_menu.set_name('task_rclick_menu')
|
|
49
48
|
|
|
50
49
|
self.num_initial_tasks = 25
|
|
51
50
|
|
|
52
|
-
# self.set_icon_from_file(os.path.abspath('icon/icon-0.svg')) # doesn't work
|
|
53
|
-
# self.set_icon(os.path.abspath('icon/icon-0.svg')) # doesn't work
|
|
54
|
-
|
|
55
51
|
self.app = app
|
|
56
52
|
session = app.session
|
|
57
53
|
self.set_name("TaskWindow") # set css id
|
|
@@ -184,31 +180,21 @@ class TaskWindow(Gtk.Window):
|
|
|
184
180
|
if todo['status']:
|
|
185
181
|
try:
|
|
186
182
|
openable = conf.todo_connectors[todo['type']].launch
|
|
187
|
-
if openable not in openables:
|
|
183
|
+
# if openable not in openables:
|
|
188
184
|
|
|
189
|
-
|
|
185
|
+
openables.append(openable)
|
|
190
186
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
187
|
+
openable_button = Gtk.Button(label=GLib.markup_escape_text(todo['label']))
|
|
188
|
+
|
|
189
|
+
openable_button.connect("clicked", lambda todo: openable(todo))
|
|
190
|
+
# openable_button.connect("clicked", openable, todo) # Doesn't work because of passing widget as first argument
|
|
191
|
+
openable_button.set_property("tooltip-text","Open (new) "+GLib.markup_escape_text(todo['label']))
|
|
192
|
+
self.buttons_box.add(openable_button)
|
|
197
193
|
|
|
198
194
|
except Exception as e:
|
|
199
|
-
dbg("error adding todo connector open() to task window ",e)
|
|
195
|
+
dbg("error adding todo connector open() to task window ",e, s='taskwindow')
|
|
200
196
|
|
|
201
197
|
|
|
202
|
-
# Old get_connector_openable version
|
|
203
|
-
# openable = get_connector_openable(None, todolist,False)
|
|
204
|
-
# if openable not in openables:
|
|
205
|
-
# openables.append(openable)
|
|
206
|
-
|
|
207
|
-
# # TODO: encode label
|
|
208
|
-
# openable_button = Gtk.Button(label=GLib.markup_escape_text(todolist['label']))
|
|
209
|
-
# openable_button.connect("clicked", get_connector_openable, todolist)
|
|
210
|
-
# openable_button.set_property("tooltip-text","Open "+GLib.markup_escape_text(todolist['label']))
|
|
211
|
-
# self.buttons_box.add(openable_button)
|
|
212
198
|
|
|
213
199
|
|
|
214
200
|
self.new_task_button = Gtk.Button(label="New Task")
|
|
@@ -252,7 +238,6 @@ class TaskWindow(Gtk.Window):
|
|
|
252
238
|
|
|
253
239
|
def refresh_search_cache(self,w = None):
|
|
254
240
|
self.search_cache = {}
|
|
255
|
-
# self.search_cache_refresh_time = now()
|
|
256
241
|
self.search_cache_refresh_time = now().strftime("%Y-%m-%d %H:%M:%S")
|
|
257
242
|
self.task_search(self.taskEntry)
|
|
258
243
|
|
|
@@ -397,7 +382,7 @@ class TaskWindow(Gtk.Window):
|
|
|
397
382
|
self.tasks_box.show_all()
|
|
398
383
|
self.shown_tasks.clear()
|
|
399
384
|
|
|
400
|
-
i = widget.get_text()
|
|
385
|
+
self.search_term = i = widget.get_text()
|
|
401
386
|
|
|
402
387
|
# utils.dbg({"task search":i},s='taskwindow')
|
|
403
388
|
if i in self.search_cache:
|
|
@@ -417,7 +402,7 @@ class TaskWindow(Gtk.Window):
|
|
|
417
402
|
total_duration += int(t['duration'])
|
|
418
403
|
|
|
419
404
|
if count < self.num_initial_tasks:
|
|
420
|
-
self.add_task_to_list(t
|
|
405
|
+
self.add_task_to_list(t)
|
|
421
406
|
else:
|
|
422
407
|
self.lazy_loadable_tasks[id] = t
|
|
423
408
|
|
|
@@ -428,9 +413,10 @@ class TaskWindow(Gtk.Window):
|
|
|
428
413
|
|
|
429
414
|
|
|
430
415
|
|
|
431
|
-
def add_task_to_list(self,t
|
|
416
|
+
def add_task_to_list(self,t):
|
|
432
417
|
|
|
433
418
|
try:
|
|
419
|
+
search_str = self.search_term
|
|
434
420
|
utils.dbg("add_task_to_list "+ str(t['extended_label']), "status",t['status'], s='taskwindow',l=3)
|
|
435
421
|
|
|
436
422
|
# self.shown_tasks[t['id']] = Gtk.Button() # Works but does not accept popovers
|
|
@@ -445,6 +431,7 @@ class TaskWindow(Gtk.Window):
|
|
|
445
431
|
extended_label = GLib.markup_escape_text(t['extended_label'],)
|
|
446
432
|
|
|
447
433
|
if len(search_str) > 1:
|
|
434
|
+
|
|
448
435
|
# fts5 match highlighting, not that good because it highlights the whole word rather than the matching part...
|
|
449
436
|
# extended_label = extended_label.replace('[[',"<b>").replace(']]',"</b>")
|
|
450
437
|
|
|
@@ -454,7 +441,7 @@ class TaskWindow(Gtk.Window):
|
|
|
454
441
|
extended_label += " ("+sec_to_time(t['duration'])+")"
|
|
455
442
|
|
|
456
443
|
if t['id'] in conf.user['task_commands'] and conf.user['task_commands'][t['id']]['status']:
|
|
457
|
-
extended_label += " ["+conf.user['task_commands'][t['id']]['command']+"]"
|
|
444
|
+
extended_label += " ["+GLib.markup_escape_text(conf.user['task_commands'][t['id']]['command'])+"]"
|
|
458
445
|
|
|
459
446
|
if t['priority']:
|
|
460
447
|
extended_label = str(t['priority']) +" "+ extended_label
|
|
@@ -578,12 +578,12 @@ def db_set_item(i,table = "tasks"):
|
|
|
578
578
|
if table == 'tasks':
|
|
579
579
|
reindex(raw)
|
|
580
580
|
|
|
581
|
-
def db_edit_session(session, column, new_value):
|
|
582
|
-
|
|
581
|
+
# def db_edit_session(session, column, new_value):
|
|
582
|
+
# dbg("db_edit_session", session, 'column', column, 'new value', new_value)
|
|
583
583
|
|
|
584
|
-
|
|
584
|
+
# db_query("UPDATE session set ? = ? WHERE start_time = ? AND extended_Label = ? LIMIT 1",(column, new_value, session['start_time'], session['extended_label']))
|
|
585
585
|
|
|
586
|
-
|
|
586
|
+
# db_query("select * FROM sessions WHERE start_time = ? AND extended_Label = ? ",(session['start_time'], session['extended_label']))
|
|
587
587
|
|
|
588
588
|
def db_set_todolist(todolist_id,lists,tasks):
|
|
589
589
|
# print('db_set_todolist params: \ntodolist_id: ',todolist_id,'lists: ',lists,'tasks: ',tasks)
|
|
@@ -638,7 +638,7 @@ def db_cleanup(widget = None):
|
|
|
638
638
|
# print("Active todolist ids",ids)
|
|
639
639
|
|
|
640
640
|
# Delete unlinked tasks
|
|
641
|
-
db_query('DELETE FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
641
|
+
# db_query('DELETE FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
642
642
|
# print(len(orphaned_tasks),"orphaned_tasks",orphaned_tasks)
|
|
643
643
|
# orphaned_tasks = db_query('SELECT id, extended_label, todolist FROM tasks WHERE todolist NOT IN (%s)' % ','.join('?'*len(ids)),ids)
|
|
644
644
|
# print(len(orphaned_tasks),"orphaned_tasks",orphaned_tasks)
|
nowfocus-0.2.0/README.md
DELETED
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
# NowFocus
|
|
2
|
-
|
|
3
|
-
A simple, performance-oriented, activity tracker that flexibly connects multiple to-do lists with multiple time trackers and displays your current task and time spent in the status bar.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## Features
|
|
7
|
-
|
|
8
|
-
- Unlimited flexible combinations of to-do lists and time tracking systems
|
|
9
|
-
- Flexibly nested lists
|
|
10
|
-
- Inactivity detection that automatically pauses time tracking
|
|
11
|
-
- Pomodoro timer
|
|
12
|
-
- Task prioritization
|
|
13
|
-
- Time targets: set a minimum or maximum time for any task or list of tasks and get reminded to follow though
|
|
14
|
-
- Randomness interrupt bell (optional) to keep you on track with tracking your time
|
|
15
|
-
- Fast, keyboard-driven, interface
|
|
16
|
-
- Offline to-do list cache
|
|
17
|
-
- Tested on Ubuntu and Linux Mint with Xorg and Wayland
|
|
18
|
-
|
|
19
|
-
### Currently Supported Todo Lists
|
|
20
|
-
|
|
21
|
-
- Simple text or markdown file with indentation based sub-lists
|
|
22
|
-
- Any to-do list that supports [CalDav todos](https://en.wikipedia.org/wiki/CalDAV)
|
|
23
|
-
- [todotxt format](http://todotxt.org/)
|
|
24
|
-
- [TaskWarrior](https://taskwarrior.org/)
|
|
25
|
-
- [Vikunja](https://www.vikunja.io)
|
|
26
|
-
- [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
|
|
27
|
-
|
|
28
|
-
### Currently Supported Time Trackers
|
|
29
|
-
|
|
30
|
-
- CSV file
|
|
31
|
-
- [ActivityWatch](https://www.activitywatch.net)
|
|
32
|
-
- [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
|
|
33
|
-
- [TimeWarrior](https://timewarrior.net)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<!-- ## Installation pipx
|
|
38
|
-
If you don't have pipx install
|
|
39
|
-
```
|
|
40
|
-
sudo apt install pipx
|
|
41
|
-
pipx ensurepath
|
|
42
|
-
``` -->
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## Installation
|
|
46
|
-
|
|
47
|
-
- Install dependencies:
|
|
48
|
-
```
|
|
49
|
-
sudo apt install gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf python3.12-venv pip libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
<!-- python3-gi python3-gi-cairo -->
|
|
53
|
-
|
|
54
|
-
- Set up a python [venv](https://docs.python.org/3/tutorial/venv.html)
|
|
55
|
-
```
|
|
56
|
-
python3 -m venv .venv/nowfocus
|
|
57
|
-
source .venv/nowfocus/bin/activate
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### Install with Pip
|
|
61
|
-
```
|
|
62
|
-
pip install nowfocus
|
|
63
|
-
```
|
|
64
|
-
- Run `python3 -m what-am-doing` and check for errors
|
|
65
|
-
|
|
66
|
-
- Add the following to your startup applications `bash -c "source .venv/nowfocus/bin/activate; python3 -m what-am-doing"`
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
### Install from Source
|
|
70
|
-
|
|
71
|
-
- Clone this repo into some out-of-the-way directory (referred to as `YOUR_INSTALL_PATH`)
|
|
72
|
-
- Change to `YOUR_INSTALL_PATH` directory with `cd /path/to/where/you/cloned/nowfocus`
|
|
73
|
-
|
|
74
|
-
- Install required python modules: `pip install -r requirements.txt`
|
|
75
|
-
- Run `python3 __main__.py` and check for errors
|
|
76
|
-
- Add the following to your startup applications: `bash -c "source .venv/nowfocus/bin/activate; python3 /YOUR_INSTALL_PATH/src/what-am-doing/__main__.py"`
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
## Usage
|
|
80
|
-
|
|
81
|
-
- Open settings and add your to-do list and time tracker details
|
|
82
|
-
|
|
83
|
-
## Build Flatpak
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
python3 -m build
|
|
87
|
-
# python3 flatpak-pip-generator --runtime=org.gnome.Sdk/x86_64/47 PACKAGE # run this for lots of stuff
|
|
88
|
-
flatpak run org.flatpak.Builder --force-clean --user --install --install-deps-from=flathub --repo=repo builddir APPID.yaml
|
|
89
|
-
flatpak run APPID
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## Keybindings
|
|
93
|
-
|
|
94
|
-
To set up a keybinding to open your tasks on Ubuntu or Linux Mint, open **Setting > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `/YOUR_INSTALL_PATH/src/what-am-doing/signal.sh`, and pick whatever key combo you'd like.
|
|
95
|
-
|
|
96
|
-
### Task Window Keybindings
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
- `F11` Toggle fullscreen
|
|
100
|
-
- `Esc` Close task window
|
|
101
|
-
- `Enter` Start top task (or make a new task with current search phrase if no results)
|
|
102
|
-
- `Ctrl + P` **Pause** current task
|
|
103
|
-
- `Ctrl + D` Pause current task and mark it **Done**
|
|
104
|
-
- `Ctrl + X` Cancel current task
|
|
105
|
-
- `Ctrl + N` **New** task
|
|
106
|
-
- `Ctrl + R` **Refresh** todolists
|
|
107
|
-
- `Ctrl + L` or `Ctrl + F` **Focus** the task search
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
<!-- ## Contributing
|
|
111
|
-
Package it for your operating system.
|
|
112
|
-
Write a connector for your favorite to-do list or time tracker -->
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/applications-engineering-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/checkbox-checked-symbolic (2).svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/document-open-recent-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/format-unordered-list-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/media-playback-start-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-about-symbolic-2.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-about-symbolic.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-keyboard-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-search-symbolic-2.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-search-symbolic.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-system-symbolic.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-time-symbolic.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/org.gnome.Settings-wacom-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/preferences-system-time-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-more-horizontal-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-sort-descending-symbolic.svg
RENAMED
|
File without changes
|
{nowfocus-0.2.0 → nowfocus-0.2.3}/src/nowfocus/icon/unused/view-tasks-unscheduled-symbolic.svg
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|