tclock 0.1.2__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.
- tclock-0.1.2/LICENSE +24 -0
- tclock-0.1.2/PKG-INFO +194 -0
- tclock-0.1.2/README.md +167 -0
- tclock-0.1.2/pyproject.toml +80 -0
- tclock-0.1.2/pyproject.toml.orig +62 -0
- tclock-0.1.2/src/tclock/__init__.py +10 -0
- tclock-0.1.2/src/tclock/app.tcss +55 -0
- tclock-0.1.2/src/tclock/cli.py +215 -0
- tclock-0.1.2/src/tclock/config.py +119 -0
- tclock-0.1.2/src/tclock/font.py +76 -0
- tclock-0.1.2/src/tclock/modes/__init__.py +20 -0
- tclock-0.1.2/src/tclock/modes/base.py +75 -0
- tclock-0.1.2/src/tclock/modes/clock.py +39 -0
- tclock-0.1.2/src/tclock/modes/countdown.py +41 -0
- tclock-0.1.2/src/tclock/modes/stopwatch.py +33 -0
- tclock-0.1.2/src/tclock/modes/timer.py +99 -0
- tclock-0.1.2/src/tclock/parsing.py +94 -0
- tclock-0.1.2/src/tclock/py.typed +0 -0
- tclock-0.1.2/src/tclock/resolve.py +163 -0
- tclock-0.1.2/src/tclock/timefmt.py +37 -0
- tclock-0.1.2/src/tclock/ui.py +230 -0
tclock-0.1.2/LICENSE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Eivind Teig
|
|
4
|
+
|
|
5
|
+
This project is a Python port of clock-tui, Copyright (c) 2022 Race604
|
|
6
|
+
(https://github.com/race604/clock-tui), also released under the MIT License.
|
|
7
|
+
|
|
8
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
9
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
10
|
+
in the Software without restriction, including without limitation the rights
|
|
11
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
12
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
13
|
+
furnished to do so, subject to the following conditions:
|
|
14
|
+
|
|
15
|
+
The above copyright notice and this permission notice shall be included in all
|
|
16
|
+
copies or substantial portions of the Software.
|
|
17
|
+
|
|
18
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
19
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
20
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
21
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
22
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
23
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
24
|
+
SOFTWARE.
|
tclock-0.1.2/PKG-INFO
ADDED
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: tclock
|
|
3
|
+
Version: 0.1.2
|
|
4
|
+
Summary: A clock, timer, stopwatch and countdown for your terminal, built with Textual
|
|
5
|
+
Keywords: clock,timer,stopwatch,countdown,tui,textual,terminal
|
|
6
|
+
Author: Eivind Teig
|
|
7
|
+
Author-email: Eivind Teig <eivind.teig@gmail.com>
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Intended Audience :: End Users/Desktop
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Topic :: Utilities
|
|
17
|
+
Requires-Dist: textual>=8.0
|
|
18
|
+
Requires-Dist: typer>=0.15
|
|
19
|
+
Requires-Dist: platformdirs>=4.0
|
|
20
|
+
Requires-Dist: tzdata ; sys_platform == 'win32'
|
|
21
|
+
Requires-Python: >=3.14
|
|
22
|
+
Project-URL: Homepage, https://github.com/eivl/tclock
|
|
23
|
+
Project-URL: Repository, https://github.com/eivl/tclock
|
|
24
|
+
Project-URL: Issues, https://github.com/eivl/tclock/issues
|
|
25
|
+
Project-URL: Original, https://github.com/race604/clock-tui
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
28
|
+
# tclock
|
|
29
|
+
|
|
30
|
+
A clock, timer, stopwatch and countdown for your terminal, drawn with big block digits.
|
|
31
|
+
Built with [Textual](https://textual.textualize.io/). A Python port of
|
|
32
|
+
[race604/clock-tui](https://github.com/race604/clock-tui).
|
|
33
|
+
|
|
34
|
+
Works on Linux, macOS and Windows. Requires Python 3.14 or newer.
|
|
35
|
+
|
|
36
|
+
## Install
|
|
37
|
+
|
|
38
|
+
```shell
|
|
39
|
+
uv tool install tclock
|
|
40
|
+
# or
|
|
41
|
+
pipx install tclock
|
|
42
|
+
# or
|
|
43
|
+
pip install tclock
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Usage
|
|
47
|
+
|
|
48
|
+
```shell
|
|
49
|
+
tclock # clock (default mode)
|
|
50
|
+
tclock clock -z Asia/Tokyo -D # another timezone, no date line
|
|
51
|
+
tclock timer -d 25m -d 5m -t Work -t Break -r
|
|
52
|
+
tclock stopwatch
|
|
53
|
+
tclock countdown -t 2027-01-01 -T "New year"
|
|
54
|
+
tclock -c '#e63946' -s 2 # colour and size apply to every mode
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Keys while running:
|
|
58
|
+
|
|
59
|
+
| Key | Action |
|
|
60
|
+
|------------------|----------------------------------------|
|
|
61
|
+
| `q`, `Ctrl+C` | quit |
|
|
62
|
+
| `Space` | pause / resume (timer and stopwatch) |
|
|
63
|
+
| `c` | switch to clock |
|
|
64
|
+
| `w` | switch to stopwatch |
|
|
65
|
+
| `t` | switch to timer (defaults from config) |
|
|
66
|
+
| `?` | show / hide the key overlay |
|
|
67
|
+
|
|
68
|
+
A key bar with the same bindings appears along the bottom whenever you touch the keyboard
|
|
69
|
+
or mouse and fades out after a few seconds, so the clock stays clean at rest.
|
|
70
|
+
|
|
71
|
+
Run `tclock --help` or `tclock <mode> --help` for every flag.
|
|
72
|
+
|
|
73
|
+
### Clock
|
|
74
|
+
|
|
75
|
+
`tclock clock [-z TZ] [-D] [-S] [-m]` shows the current time. `-z` takes an IANA zone such
|
|
76
|
+
as `Europe/Oslo`. `-D` hides the date, `-S` hides seconds, `-m` shows tenths of a second.
|
|
77
|
+
|
|
78
|
+
### Timer
|
|
79
|
+
|
|
80
|
+
`tclock timer -d 5m` counts down five minutes. Durations are a number plus `s`, `m`, `h`
|
|
81
|
+
or `d`. Repeat `-d` to run several durations in sequence and `-t` to title each of them.
|
|
82
|
+
`-r` repeats the sequence, `-P` starts paused, `-Q` quits when time is up, `-M` hides
|
|
83
|
+
tenths.
|
|
84
|
+
|
|
85
|
+
`-e` runs a shell command when the timer ends and shows its result in the footer:
|
|
86
|
+
|
|
87
|
+
```shell
|
|
88
|
+
tclock timer -d 25m -e 'notify-send tclock "Time is up"' # Linux
|
|
89
|
+
tclock timer -d 25m -e 'osascript -e "display notification \"Time is up\""' # macOS
|
|
90
|
+
tclock timer -d 25m -e 'msg * Time is up' # Windows
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
When the timer runs out the screen flashes green until you quit or switch mode.
|
|
94
|
+
|
|
95
|
+
### Stopwatch
|
|
96
|
+
|
|
97
|
+
`tclock stopwatch` counts up. Press `Space` to pause. The final time is printed to the
|
|
98
|
+
terminal after you quit.
|
|
99
|
+
|
|
100
|
+
### Countdown
|
|
101
|
+
|
|
102
|
+
`tclock countdown -t WHEN [-T TITLE] [-c] [-r] [-m]` shows the time until `WHEN`, which
|
|
103
|
+
can be `20:00`, `20:00:00` (today), `2027-01-01` (midnight), `2026-12-25 20:00:00` (local
|
|
104
|
+
time) or RFC 3339 such as `2026-12-25T20:00:00-04:00`. `-c` keeps counting (negative)
|
|
105
|
+
after the moment has passed instead of blinking `0:00`; `-r` counts up since the moment.
|
|
106
|
+
|
|
107
|
+
## Configuration
|
|
108
|
+
|
|
109
|
+
tclock reads an optional TOML file:
|
|
110
|
+
|
|
111
|
+
| OS | Path |
|
|
112
|
+
|---------|-------------------------------------------------------------|
|
|
113
|
+
| Linux | `~/.config/tclock/config.toml` (honours `$XDG_CONFIG_HOME`) |
|
|
114
|
+
| macOS | `~/Library/Application Support/tclock/config.toml` |
|
|
115
|
+
| Windows | `%APPDATA%\tclock\config.toml` |
|
|
116
|
+
|
|
117
|
+
Command-line flags override the file; the file overrides built-in defaults. Every key is
|
|
118
|
+
optional. The full schema, with the built-in defaults:
|
|
119
|
+
|
|
120
|
+
```toml
|
|
121
|
+
[default]
|
|
122
|
+
mode = "clock" # clock, timer, stopwatch or countdown when no mode is given
|
|
123
|
+
color = "green"
|
|
124
|
+
size = 1
|
|
125
|
+
|
|
126
|
+
[clock]
|
|
127
|
+
show_date = true
|
|
128
|
+
show_seconds = true
|
|
129
|
+
show_millis = false
|
|
130
|
+
# timezone = "Europe/Oslo"
|
|
131
|
+
|
|
132
|
+
[timer]
|
|
133
|
+
durations = ["25m", "5m"]
|
|
134
|
+
titles = []
|
|
135
|
+
repeat = false
|
|
136
|
+
show_millis = true
|
|
137
|
+
start_paused = false
|
|
138
|
+
auto_quit = false
|
|
139
|
+
execute = [] # joined with spaces into one shell command
|
|
140
|
+
|
|
141
|
+
[countdown]
|
|
142
|
+
# time = "2027-01-01"
|
|
143
|
+
# title = "New year"
|
|
144
|
+
show_millis = false
|
|
145
|
+
continue_on_zero = false
|
|
146
|
+
reverse = false
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
A broken file or a wrong value produces a warning on stderr and the default is used.
|
|
150
|
+
|
|
151
|
+
## Differences from the Rust clock-tui
|
|
152
|
+
|
|
153
|
+
- Flags that took several values now repeat instead: `-d 25m -d 5m`, `-t Work -t Break`.
|
|
154
|
+
- `--execute` takes one quoted shell string instead of a list of words.
|
|
155
|
+
- The config file lives in the platform-native location listed above rather than always
|
|
156
|
+
in `~/.config/tclock/`.
|
|
157
|
+
- `tclock timer` without `-d` uses the `[timer] durations` from the config file
|
|
158
|
+
(`25m`, `5m` by default) instead of a fixed `5m`.
|
|
159
|
+
- `tclock countdown` without `--time` falls back to `[countdown] time` in the config file.
|
|
160
|
+
- `Ctrl+C` quits. In the Rust binary it switches to clock mode, because its key matcher
|
|
161
|
+
ignores the Ctrl modifier (so `Ctrl+Q`, `Ctrl+W` and `Ctrl+T` also act like the plain
|
|
162
|
+
letters there).
|
|
163
|
+
- Mode keys work from every mode. In the Rust binary a widget, once created, stays in a
|
|
164
|
+
fixed priority order (clock > timer > stopwatch > countdown), so e.g. `t` from the
|
|
165
|
+
clock has no visible effect and `w` from a timer keeps showing the timer.
|
|
166
|
+
- The `?` help overlay and the auto-hiding key bar are additions.
|
|
167
|
+
|
|
168
|
+
## Development
|
|
169
|
+
|
|
170
|
+
```shell
|
|
171
|
+
uv sync
|
|
172
|
+
uv run pytest
|
|
173
|
+
uv run ruff check . && uv run ruff format --check . && uv run mypy src
|
|
174
|
+
uv run tclock
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Releasing
|
|
178
|
+
|
|
179
|
+
Releases are automated with GitHub Actions:
|
|
180
|
+
|
|
181
|
+
1. In the Actions tab run **Release** and choose `patch`, `minor`, `major`, `rc` or
|
|
182
|
+
`stable`. The workflow runs `uv version --bump`, commits `chore: release vX.Y.Z` to
|
|
183
|
+
`main` and pushes the tag `vX.Y.Z`.
|
|
184
|
+
2. The tag triggers **Publish**, which builds the sdist and wheel and uploads them to PyPI
|
|
185
|
+
with [trusted publishing](https://docs.pypi.org/trusted-publishers/).
|
|
186
|
+
|
|
187
|
+
One-time setup: on pypi.org add a trusted publisher for this repository with workflow
|
|
188
|
+
`publish.yml` and environment `pypi`, and create a `pypi` environment in the GitHub repo
|
|
189
|
+
settings. If `main` is branch-protected, give the Release workflow a token that may push
|
|
190
|
+
to it (a PAT stored as a secret, or a ruleset bypass for GitHub Actions).
|
|
191
|
+
|
|
192
|
+
## License
|
|
193
|
+
|
|
194
|
+
MIT. Original clock-tui by Race604, also MIT.
|
tclock-0.1.2/README.md
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# tclock
|
|
2
|
+
|
|
3
|
+
A clock, timer, stopwatch and countdown for your terminal, drawn with big block digits.
|
|
4
|
+
Built with [Textual](https://textual.textualize.io/). A Python port of
|
|
5
|
+
[race604/clock-tui](https://github.com/race604/clock-tui).
|
|
6
|
+
|
|
7
|
+
Works on Linux, macOS and Windows. Requires Python 3.14 or newer.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```shell
|
|
12
|
+
uv tool install tclock
|
|
13
|
+
# or
|
|
14
|
+
pipx install tclock
|
|
15
|
+
# or
|
|
16
|
+
pip install tclock
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Usage
|
|
20
|
+
|
|
21
|
+
```shell
|
|
22
|
+
tclock # clock (default mode)
|
|
23
|
+
tclock clock -z Asia/Tokyo -D # another timezone, no date line
|
|
24
|
+
tclock timer -d 25m -d 5m -t Work -t Break -r
|
|
25
|
+
tclock stopwatch
|
|
26
|
+
tclock countdown -t 2027-01-01 -T "New year"
|
|
27
|
+
tclock -c '#e63946' -s 2 # colour and size apply to every mode
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Keys while running:
|
|
31
|
+
|
|
32
|
+
| Key | Action |
|
|
33
|
+
|------------------|----------------------------------------|
|
|
34
|
+
| `q`, `Ctrl+C` | quit |
|
|
35
|
+
| `Space` | pause / resume (timer and stopwatch) |
|
|
36
|
+
| `c` | switch to clock |
|
|
37
|
+
| `w` | switch to stopwatch |
|
|
38
|
+
| `t` | switch to timer (defaults from config) |
|
|
39
|
+
| `?` | show / hide the key overlay |
|
|
40
|
+
|
|
41
|
+
A key bar with the same bindings appears along the bottom whenever you touch the keyboard
|
|
42
|
+
or mouse and fades out after a few seconds, so the clock stays clean at rest.
|
|
43
|
+
|
|
44
|
+
Run `tclock --help` or `tclock <mode> --help` for every flag.
|
|
45
|
+
|
|
46
|
+
### Clock
|
|
47
|
+
|
|
48
|
+
`tclock clock [-z TZ] [-D] [-S] [-m]` shows the current time. `-z` takes an IANA zone such
|
|
49
|
+
as `Europe/Oslo`. `-D` hides the date, `-S` hides seconds, `-m` shows tenths of a second.
|
|
50
|
+
|
|
51
|
+
### Timer
|
|
52
|
+
|
|
53
|
+
`tclock timer -d 5m` counts down five minutes. Durations are a number plus `s`, `m`, `h`
|
|
54
|
+
or `d`. Repeat `-d` to run several durations in sequence and `-t` to title each of them.
|
|
55
|
+
`-r` repeats the sequence, `-P` starts paused, `-Q` quits when time is up, `-M` hides
|
|
56
|
+
tenths.
|
|
57
|
+
|
|
58
|
+
`-e` runs a shell command when the timer ends and shows its result in the footer:
|
|
59
|
+
|
|
60
|
+
```shell
|
|
61
|
+
tclock timer -d 25m -e 'notify-send tclock "Time is up"' # Linux
|
|
62
|
+
tclock timer -d 25m -e 'osascript -e "display notification \"Time is up\""' # macOS
|
|
63
|
+
tclock timer -d 25m -e 'msg * Time is up' # Windows
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
When the timer runs out the screen flashes green until you quit or switch mode.
|
|
67
|
+
|
|
68
|
+
### Stopwatch
|
|
69
|
+
|
|
70
|
+
`tclock stopwatch` counts up. Press `Space` to pause. The final time is printed to the
|
|
71
|
+
terminal after you quit.
|
|
72
|
+
|
|
73
|
+
### Countdown
|
|
74
|
+
|
|
75
|
+
`tclock countdown -t WHEN [-T TITLE] [-c] [-r] [-m]` shows the time until `WHEN`, which
|
|
76
|
+
can be `20:00`, `20:00:00` (today), `2027-01-01` (midnight), `2026-12-25 20:00:00` (local
|
|
77
|
+
time) or RFC 3339 such as `2026-12-25T20:00:00-04:00`. `-c` keeps counting (negative)
|
|
78
|
+
after the moment has passed instead of blinking `0:00`; `-r` counts up since the moment.
|
|
79
|
+
|
|
80
|
+
## Configuration
|
|
81
|
+
|
|
82
|
+
tclock reads an optional TOML file:
|
|
83
|
+
|
|
84
|
+
| OS | Path |
|
|
85
|
+
|---------|-------------------------------------------------------------|
|
|
86
|
+
| Linux | `~/.config/tclock/config.toml` (honours `$XDG_CONFIG_HOME`) |
|
|
87
|
+
| macOS | `~/Library/Application Support/tclock/config.toml` |
|
|
88
|
+
| Windows | `%APPDATA%\tclock\config.toml` |
|
|
89
|
+
|
|
90
|
+
Command-line flags override the file; the file overrides built-in defaults. Every key is
|
|
91
|
+
optional. The full schema, with the built-in defaults:
|
|
92
|
+
|
|
93
|
+
```toml
|
|
94
|
+
[default]
|
|
95
|
+
mode = "clock" # clock, timer, stopwatch or countdown when no mode is given
|
|
96
|
+
color = "green"
|
|
97
|
+
size = 1
|
|
98
|
+
|
|
99
|
+
[clock]
|
|
100
|
+
show_date = true
|
|
101
|
+
show_seconds = true
|
|
102
|
+
show_millis = false
|
|
103
|
+
# timezone = "Europe/Oslo"
|
|
104
|
+
|
|
105
|
+
[timer]
|
|
106
|
+
durations = ["25m", "5m"]
|
|
107
|
+
titles = []
|
|
108
|
+
repeat = false
|
|
109
|
+
show_millis = true
|
|
110
|
+
start_paused = false
|
|
111
|
+
auto_quit = false
|
|
112
|
+
execute = [] # joined with spaces into one shell command
|
|
113
|
+
|
|
114
|
+
[countdown]
|
|
115
|
+
# time = "2027-01-01"
|
|
116
|
+
# title = "New year"
|
|
117
|
+
show_millis = false
|
|
118
|
+
continue_on_zero = false
|
|
119
|
+
reverse = false
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
A broken file or a wrong value produces a warning on stderr and the default is used.
|
|
123
|
+
|
|
124
|
+
## Differences from the Rust clock-tui
|
|
125
|
+
|
|
126
|
+
- Flags that took several values now repeat instead: `-d 25m -d 5m`, `-t Work -t Break`.
|
|
127
|
+
- `--execute` takes one quoted shell string instead of a list of words.
|
|
128
|
+
- The config file lives in the platform-native location listed above rather than always
|
|
129
|
+
in `~/.config/tclock/`.
|
|
130
|
+
- `tclock timer` without `-d` uses the `[timer] durations` from the config file
|
|
131
|
+
(`25m`, `5m` by default) instead of a fixed `5m`.
|
|
132
|
+
- `tclock countdown` without `--time` falls back to `[countdown] time` in the config file.
|
|
133
|
+
- `Ctrl+C` quits. In the Rust binary it switches to clock mode, because its key matcher
|
|
134
|
+
ignores the Ctrl modifier (so `Ctrl+Q`, `Ctrl+W` and `Ctrl+T` also act like the plain
|
|
135
|
+
letters there).
|
|
136
|
+
- Mode keys work from every mode. In the Rust binary a widget, once created, stays in a
|
|
137
|
+
fixed priority order (clock > timer > stopwatch > countdown), so e.g. `t` from the
|
|
138
|
+
clock has no visible effect and `w` from a timer keeps showing the timer.
|
|
139
|
+
- The `?` help overlay and the auto-hiding key bar are additions.
|
|
140
|
+
|
|
141
|
+
## Development
|
|
142
|
+
|
|
143
|
+
```shell
|
|
144
|
+
uv sync
|
|
145
|
+
uv run pytest
|
|
146
|
+
uv run ruff check . && uv run ruff format --check . && uv run mypy src
|
|
147
|
+
uv run tclock
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Releasing
|
|
151
|
+
|
|
152
|
+
Releases are automated with GitHub Actions:
|
|
153
|
+
|
|
154
|
+
1. In the Actions tab run **Release** and choose `patch`, `minor`, `major`, `rc` or
|
|
155
|
+
`stable`. The workflow runs `uv version --bump`, commits `chore: release vX.Y.Z` to
|
|
156
|
+
`main` and pushes the tag `vX.Y.Z`.
|
|
157
|
+
2. The tag triggers **Publish**, which builds the sdist and wheel and uploads them to PyPI
|
|
158
|
+
with [trusted publishing](https://docs.pypi.org/trusted-publishers/).
|
|
159
|
+
|
|
160
|
+
One-time setup: on pypi.org add a trusted publisher for this repository with workflow
|
|
161
|
+
`publish.yml` and environment `pypi`, and create a `pypi` environment in the GitHub repo
|
|
162
|
+
settings. If `main` is branch-protected, give the Release workflow a token that may push
|
|
163
|
+
to it (a PAT stored as a secret, or a ruleset bypass for GitHub Actions).
|
|
164
|
+
|
|
165
|
+
## License
|
|
166
|
+
|
|
167
|
+
MIT. Original clock-tui by Race604, also MIT.
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "tclock"
|
|
3
|
+
version = "0.1.2"
|
|
4
|
+
description = "A clock, timer, stopwatch and countdown for your terminal, built with Textual"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = "MIT"
|
|
7
|
+
license-files = ["LICENSE"]
|
|
8
|
+
requires-python = ">=3.14"
|
|
9
|
+
keywords = [
|
|
10
|
+
"clock",
|
|
11
|
+
"timer",
|
|
12
|
+
"stopwatch",
|
|
13
|
+
"countdown",
|
|
14
|
+
"tui",
|
|
15
|
+
"textual",
|
|
16
|
+
"terminal",
|
|
17
|
+
]
|
|
18
|
+
classifiers = [
|
|
19
|
+
"Development Status :: 4 - Beta",
|
|
20
|
+
"Environment :: Console",
|
|
21
|
+
"Intended Audience :: End Users/Desktop",
|
|
22
|
+
"Operating System :: OS Independent",
|
|
23
|
+
"Programming Language :: Python :: 3",
|
|
24
|
+
"Programming Language :: Python :: 3.14",
|
|
25
|
+
"Topic :: Utilities",
|
|
26
|
+
]
|
|
27
|
+
dependencies = [
|
|
28
|
+
"textual>=8.0",
|
|
29
|
+
"typer>=0.15",
|
|
30
|
+
"platformdirs>=4.0",
|
|
31
|
+
"tzdata; sys_platform == 'win32'",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
[[project.authors]]
|
|
35
|
+
name = "Eivind Teig"
|
|
36
|
+
email = "eivind.teig@gmail.com"
|
|
37
|
+
|
|
38
|
+
[project.urls]
|
|
39
|
+
Homepage = "https://github.com/eivl/tclock"
|
|
40
|
+
Repository = "https://github.com/eivl/tclock"
|
|
41
|
+
Issues = "https://github.com/eivl/tclock/issues"
|
|
42
|
+
Original = "https://github.com/race604/clock-tui"
|
|
43
|
+
|
|
44
|
+
[project.scripts]
|
|
45
|
+
tclock = "tclock.cli:main"
|
|
46
|
+
|
|
47
|
+
[dependency-groups]
|
|
48
|
+
dev = [
|
|
49
|
+
"pytest>=8.0",
|
|
50
|
+
"pytest-asyncio>=0.24",
|
|
51
|
+
"ruff>=0.6",
|
|
52
|
+
"mypy>=1.11",
|
|
53
|
+
]
|
|
54
|
+
|
|
55
|
+
[build-system]
|
|
56
|
+
requires = ["uv_build>=0.12.5,<0.13.0"]
|
|
57
|
+
build-backend = "uv_build"
|
|
58
|
+
|
|
59
|
+
[tool.pytest.ini_options]
|
|
60
|
+
asyncio_mode = "auto"
|
|
61
|
+
testpaths = ["tests"]
|
|
62
|
+
|
|
63
|
+
[tool.ruff]
|
|
64
|
+
line-length = 100
|
|
65
|
+
target-version = "py314"
|
|
66
|
+
extend-exclude = ["docs"]
|
|
67
|
+
|
|
68
|
+
[tool.ruff.lint]
|
|
69
|
+
select = [
|
|
70
|
+
"E",
|
|
71
|
+
"F",
|
|
72
|
+
"I",
|
|
73
|
+
"UP",
|
|
74
|
+
"B",
|
|
75
|
+
"SIM",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
[tool.mypy]
|
|
79
|
+
python_version = "3.14"
|
|
80
|
+
strict = true
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "tclock"
|
|
3
|
+
version = "0.1.2"
|
|
4
|
+
description = "A clock, timer, stopwatch and countdown for your terminal, built with Textual"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = "MIT"
|
|
7
|
+
license-files = ["LICENSE"]
|
|
8
|
+
authors = [{ name = "Eivind Teig", email = "eivind.teig@gmail.com" }]
|
|
9
|
+
requires-python = ">=3.14"
|
|
10
|
+
keywords = ["clock", "timer", "stopwatch", "countdown", "tui", "textual", "terminal"]
|
|
11
|
+
classifiers = [
|
|
12
|
+
"Development Status :: 4 - Beta",
|
|
13
|
+
"Environment :: Console",
|
|
14
|
+
"Intended Audience :: End Users/Desktop",
|
|
15
|
+
"Operating System :: OS Independent",
|
|
16
|
+
"Programming Language :: Python :: 3",
|
|
17
|
+
"Programming Language :: Python :: 3.14",
|
|
18
|
+
"Topic :: Utilities",
|
|
19
|
+
]
|
|
20
|
+
dependencies = [
|
|
21
|
+
"textual>=8.0",
|
|
22
|
+
"typer>=0.15",
|
|
23
|
+
"platformdirs>=4.0",
|
|
24
|
+
"tzdata; sys_platform == 'win32'",
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
[project.urls]
|
|
28
|
+
Homepage = "https://github.com/eivl/tclock"
|
|
29
|
+
Repository = "https://github.com/eivl/tclock"
|
|
30
|
+
Issues = "https://github.com/eivl/tclock/issues"
|
|
31
|
+
Original = "https://github.com/race604/clock-tui"
|
|
32
|
+
|
|
33
|
+
[project.scripts]
|
|
34
|
+
tclock = "tclock.cli:main"
|
|
35
|
+
|
|
36
|
+
[dependency-groups]
|
|
37
|
+
dev = [
|
|
38
|
+
"pytest>=8.0",
|
|
39
|
+
"pytest-asyncio>=0.24",
|
|
40
|
+
"ruff>=0.6",
|
|
41
|
+
"mypy>=1.11",
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
[build-system]
|
|
45
|
+
requires = ["uv_build>=0.12.5,<0.13.0"]
|
|
46
|
+
build-backend = "uv_build"
|
|
47
|
+
|
|
48
|
+
[tool.pytest.ini_options]
|
|
49
|
+
asyncio_mode = "auto"
|
|
50
|
+
testpaths = ["tests"]
|
|
51
|
+
|
|
52
|
+
[tool.ruff]
|
|
53
|
+
line-length = 100
|
|
54
|
+
target-version = "py314"
|
|
55
|
+
extend-exclude = ["docs"]
|
|
56
|
+
|
|
57
|
+
[tool.ruff.lint]
|
|
58
|
+
select = ["E", "F", "I", "UP", "B", "SIM"]
|
|
59
|
+
|
|
60
|
+
[tool.mypy]
|
|
61
|
+
python_version = "3.14"
|
|
62
|
+
strict = true
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"""tclock: a clock, timer, stopwatch and countdown for the terminal."""
|
|
2
|
+
|
|
3
|
+
from importlib.metadata import PackageNotFoundError, version
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
__version__ = version("tclock")
|
|
7
|
+
except PackageNotFoundError: # running from a checkout that is not installed
|
|
8
|
+
__version__ = "0.0.0"
|
|
9
|
+
|
|
10
|
+
__all__ = ["__version__"]
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
Screen {
|
|
2
|
+
align: center middle;
|
|
3
|
+
overflow: hidden hidden;
|
|
4
|
+
layers: base keybar;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
Screen.-flash {
|
|
8
|
+
background: ansi_green;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
Screen.-flash Label {
|
|
12
|
+
color: ansi_black;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
#body {
|
|
16
|
+
height: auto;
|
|
17
|
+
overflow: hidden hidden;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
#header, #footer {
|
|
21
|
+
width: 100%;
|
|
22
|
+
text-align: center;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
#header {
|
|
26
|
+
margin-bottom: 1;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
#footer {
|
|
30
|
+
margin-top: 1;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/* The key bar sits on its own layer so showing it never moves the digits. */
|
|
34
|
+
#keybar {
|
|
35
|
+
layer: keybar;
|
|
36
|
+
dock: bottom;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
HelpScreen {
|
|
40
|
+
align: center middle;
|
|
41
|
+
background: $background 60%;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
HelpScreen > #help {
|
|
45
|
+
width: auto;
|
|
46
|
+
height: auto;
|
|
47
|
+
padding: 1 2;
|
|
48
|
+
border: round $primary;
|
|
49
|
+
border-title-align: center;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
HelpScreen #help-keys {
|
|
53
|
+
width: auto;
|
|
54
|
+
height: auto;
|
|
55
|
+
}
|