nowfocus 0.2.12__py3-none-any.whl → 0.2.13__py3-none-any.whl

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/__main__.py CHANGED
@@ -442,8 +442,8 @@ class Application(Gtk.Application):
442
442
  def mark_done(self, w=None, task = None):
443
443
  ''' second (task) argument is required and must be a task object '''
444
444
 
445
- print("Mark Task done")
446
- print(task)
445
+ print("Mark Task done",task['label'])
446
+ # print(task)
447
447
 
448
448
  todolist_conf = conf.user['todolists'][task['todolist']]
449
449
 
@@ -510,8 +510,8 @@ class Application(Gtk.Application):
510
510
  # print("add ",utils.extended_label(task)," to recent tasks")
511
511
  i = Gtk.MenuItem.new_with_label(utils.extended_label(task))
512
512
  i.connect('activate',self.start_task,task)
513
- list_menus['recent'].prepend(i)
514
513
  try:
514
+ list_menus['recent'].prepend(i)
515
515
  list_menus['recent'].get_children()[11].destroy()
516
516
  except Exception as e:
517
517
  dbg("Exception trying to rotate recent tasks. probably are less than 11",l=2,s="recent")
@@ -8,16 +8,17 @@ def add_new_task(user_conf,list,task_label):
8
8
 
9
9
 
10
10
  with open(file_uri, 'r') as file:
11
- # read a list of lines into data
12
11
  data = file.readlines()
13
12
 
14
- # New Version
13
+ if list['id'] == user_conf['id']:
14
+ # Top level list, append to bottom
15
+ line_no = len(data) + 1
16
+ else:
17
+ line_no = get_line_no(list,data) + 1
15
18
 
16
- line_no = get_line_no(list,data) + 1
17
19
  new_line = list['data']['indent']+task_label+"\n"
18
20
 
19
21
  # # Old version without recorded indent
20
-
21
22
  # if list['id'] == user_conf['id']:
22
23
  # # Top level insert
23
24
  # new_line = task_label+"\n"
@@ -72,17 +73,15 @@ def get_line_no(i,lines):
72
73
  else:
73
74
 
74
75
  line_no = 0 #TODO: Improve, (better foreach with key)
75
- in_list = False
76
76
 
77
77
  for line in lines:
78
78
 
79
- # TODO: Find the list
79
+ # TODO: Find the list
80
80
  if line == i['data']['original_line']:
81
81
  return line_no
82
82
 
83
- line_no = line_no + 1
84
-
85
- throw("Line not found error Ha!")
83
+
84
+ utils.dbg("Line not found error",i,lines,s='txt',l=0)
86
85
 
87
86
  def task_id(task):
88
87
  ''' The task parameter must have at least "label", "todolist" and "parent_id" '''
@@ -128,18 +127,18 @@ def get_todos(user_conf):
128
127
  tasks = {}
129
128
  lists = {}
130
129
  lists[user_conf['id']] = {
131
- 'id':user_conf['id'],
132
- 'label':user_conf['label'],
133
- 'parent_id':'',
134
- 'parent_label':'',
135
- 'todolist':user_conf['id'],
136
- 'data':{
137
- 'line_no':0,
138
- 'original_line':'',
139
- 'accepts_tasks':True,
140
- 'indent':'',
141
- }
142
- }
130
+ 'id':user_conf['id'],
131
+ 'label':user_conf['label'],
132
+ 'parent_id':'',
133
+ 'parent_label':'',
134
+ 'todolist':user_conf['id'],
135
+ 'data':{
136
+ 'line_no':0,
137
+ 'original_line':'',
138
+ 'accepts_tasks':True,
139
+ 'indent':'',
140
+ }
141
+ }
143
142
 
144
143
  current_list = []
145
144
  current_list_label = []
@@ -205,6 +204,13 @@ def get_todos(user_conf):
205
204
 
206
205
 
207
206
  utils.dbg(line.rstrip(),s='txt',l=3)
207
+
208
+ # Get prioritized tasks (starting with a number)
209
+ if label.split()[0].isnumeric():
210
+ priority = float(label.split()[0])
211
+ label = label.removeprefix(label.split()[0]).strip()
212
+ else:
213
+ priority = '0'
208
214
 
209
215
  task_id = file_uri+":"+"/".join(current_list_label)+":"+label
210
216
 
@@ -222,6 +228,7 @@ def get_todos(user_conf):
222
228
  'parent_label':str(parent_label),
223
229
  'todolist':user_conf['id'],
224
230
  'status': status,
231
+ 'priority': priority,
225
232
  'data':{
226
233
  'line_no':line_no,
227
234
  'original_line':line,
@@ -229,11 +236,7 @@ def get_todos(user_conf):
229
236
  }
230
237
  }
231
238
 
232
- # Get prioritized tasks (starting with a number)
233
- # if label[0].isdigit()
234
- if label.split()[0].isnumeric():
235
- tasks[task_id]['priority'] = float(label.split()[0])
236
- tasks[task_id]['label'] = label.removeprefix(label.split()[0]).strip()
239
+
237
240
 
238
241
  prev_indent = indent
239
242
  prev_label = label
nowfocus/task_window.py CHANGED
@@ -292,13 +292,13 @@ class TaskWindow(Gtk.Window):
292
292
  pause_button.connect("clicked", self.recreate_header)
293
293
 
294
294
  pause_button.connect("clicked", self.refresh_search_cache)
295
- pause_button.set_property("tooltip-text", "Pause Task (Ctrl + P)")
295
+ pause_button.set_property("tooltip-text", "Pause Task (Control S)")
296
296
  pause_button.set_relief(Gtk.ReliefStyle.NONE)
297
297
  self.header.add(pause_button)
298
298
 
299
299
  done_button = Gtk.Button()
300
300
  done_button.set_image(Gtk.Image.new_from_file(os.path.abspath('icon/mark-done.png')))
301
- done_button.set_property("tooltip-text", "Mark Task Done (Ctrl + D)")
301
+ done_button.set_property("tooltip-text", "Mark Task Done (Control D)")
302
302
  done_button.connect("clicked", self.app.stop_task,'mark_done')
303
303
  done_button.connect("clicked", self.recreate_header)
304
304
  done_button.connect("clicked", self.refresh_search_cache) # doesn't work, probably because it happens before stop_task
@@ -310,14 +310,17 @@ class TaskWindow(Gtk.Window):
310
310
  cancel_button.set_image(Gtk.Image.new_from_file(os.path.abspath('icon/cancel.png')))
311
311
  cancel_button.connect("clicked", self.app.stop_task,"cancel")
312
312
  cancel_button.connect("clicked", self.recreate_header)
313
- cancel_button.set_property("tooltip-text", "Discard timer (Ctrl + X)")
313
+ cancel_button.set_property("tooltip-text", "Discard timer (Control Q)")
314
314
  cancel_button.set_relief(Gtk.ReliefStyle.NONE)
315
315
  self.header.add(cancel_button)
316
316
 
317
- key, mod = Gtk.accelerator_parse('<Control>p')
317
+ key, mod = Gtk.accelerator_parse('<Control>p') # for backward compatibility
318
+ pause_button.add_accelerator("clicked", self.accel_group, key, mod, Gtk.AccelFlags.VISIBLE)
319
+
320
+ key, mod = Gtk.accelerator_parse('<Control>S')
318
321
  pause_button.add_accelerator("clicked", self.accel_group, key, mod, Gtk.AccelFlags.VISIBLE)
319
322
 
320
- key, mod = Gtk.accelerator_parse('<Control>x')
323
+ key, mod = Gtk.accelerator_parse('<Control>q')
321
324
  cancel_button.add_accelerator("clicked", self.accel_group, key, mod, Gtk.AccelFlags.VISIBLE)
322
325
 
323
326
  key, mod = Gtk.accelerator_parse('<Control>d')
@@ -415,6 +418,10 @@ class TaskWindow(Gtk.Window):
415
418
 
416
419
  # button_context = self.shown_tasks[t['id']].get_style_context().add_class("large")
417
420
  extended_label = GLib.markup_escape_text(t['extended_label'],)
421
+
422
+ # Truncate excessively long task labels
423
+ if len(extended_label) > 110:
424
+ extended_label = extended_label[:110]+"..."
418
425
 
419
426
  if len(search_str) > 1:
420
427
 
@@ -612,7 +619,6 @@ class TaskWindow(Gtk.Window):
612
619
  # utils.dbg("key_press",key,s="taskwindow",l=1)
613
620
  # utils.dbg("key_press event.state",event.state,s="taskwindow",l=1)
614
621
  # utils.dbg("key_press_event",event,s="taskwindow",l=1)
615
- # utils.dbg("ModifierType is CONTROL_MASK",Gdk.ModifierType.CONTROL_MASK,s="taskwindow",l=3)
616
622
 
617
623
  if (event.state & Gdk.ModifierType.CONTROL_MASK) or key == 'Control_L':
618
624
  self.modifyer_keys['control'] = True
nowfocus/utils.py CHANGED
@@ -1185,10 +1185,13 @@ def add_todos_to_menu(target_menu = None, menu_tasks = None, list_menus = None,
1185
1185
  list_menus[l['parent_id']].append(list_menu_items[list_id])
1186
1186
 
1187
1187
 
1188
-
1189
1188
  for id, t in tasks.items():
1190
1189
  if t['status'] == 1:
1191
1190
 
1191
+ # Truncate excessively long task labels
1192
+ if len(t['label']) > 60:
1193
+ t['label'] = t['label'][:60]+"..."
1194
+
1192
1195
  menu_tasks[t['id']] = Gtk.MenuItem.new_with_label(str(t['label']))
1193
1196
  menu_tasks[t['id']].connect("activate", activate_callback, t)
1194
1197
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nowfocus
3
- Version: 0.2.12
3
+ Version: 0.2.13
4
4
  Summary: nowfocus: the open source task-tracking self-control panel.
5
5
  Author: GitFr33
6
6
  Project-URL: Homepage, https://gitlab.com/GitFr33/nowfocus
@@ -47,43 +47,50 @@ Dynamic: license-file
47
47
 
48
48
  <div align="center"><img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/nowfocus.svg" width="60" align="center">
49
49
 
50
- # *nowfocus* <br> Open-source task timer for linux
50
+ # *nowfocus* <br> Open-source task timer for Linux
51
51
 
52
52
  **Avoid multifailing. Master your to-do lists. Track your time.**
53
53
 
54
54
  </div>
55
55
 
56
- nowfocus is a clean, keyboard-driven project time tracker built 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.
56
+ nowfocus is a clean, keyboard-driven time management dashboard that flexibly connects multiple to-do lists with multiple time trackers and displays your current task and time spent in the status bar.
57
57
 
58
58
  ## Features
59
- - Unlimited flexible combinations of to-do lists and time tracking systems
60
- - Infinitely nestable lists
59
+
60
+ - Unlimited, flexible combinations of to-do lists and time tracking apps
61
61
  - Inactivity detection that automatically pauses time tracking
62
- - Pomodoro timer
63
62
  - Task prioritization
63
+ - Infinitely nestable lists
64
+ - Pomodoro timer
64
65
  - Time targets: set a minimum or maximum time for any task or list of tasks and get reminded to follow though
65
66
  - Randomness interrupt bell (optional) to keep you on track with tracking your time
66
67
  - Keyboard-driven interface
67
68
  - Offline to-do list cache
68
- - CLI
69
+ - CLI interface
69
70
  - Run a command (or launch an application) when a task is started
71
+ - Not built with Electron ♥
72
+ - Follows system dark-mode
73
+ - Lightening fast task search
70
74
 
71
-
72
- <img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-42-56.webp" width="500">
73
- <img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-46-14.webp" width="400">
74
- <img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-53-22.webp" width="400">
75
+ <table><tr><td>
76
+ <a href="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/darkmode.webp"><img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/darkmode.webp" height="200"></a></td><td>
77
+ <a href="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-42-56.webp"><img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-42-56.webp" height="200"></a></td><td>
78
+ <a href="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-46-14.webp"><img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-46-14.webp" height="200"></a></td><td>
79
+ <a href="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-53-22.webp"><img src="https://gitlab.com/GitFr33/nowfocus/-/raw/main/docs/Screenshot-25-09-23-11-53-22.webp" height="200"></a></td></tr></table>
75
80
 
76
81
  <br>
77
82
 
78
83
  ### Currently Supported To-do List Backends
79
84
 
80
- - Simple text file with indentation based sub-lists
81
- - Any to-do list that supports [CalDav todos](https://en.wikipedia.org/wiki/CalDAV)
82
- - [todotxt format](http://todotxt.org/)
85
+ - [Trello](https://www.trello.com)
83
86
  - [TaskWarrior](https://taskwarrior.org/)
87
+ - [todo.txt format](http://todotxt.org/)
84
88
  - [Vikunja](https://www.vikunja.io)
85
89
  - [Photosynthesis Timetracker](https://github.com/Photosynthesis/Timetracker/)
86
- - [Trello](https://www.trello.com)
90
+ - Simple text file with indentation based sub-lists
91
+ - Any to-do list that supports [CalDav todos](https://en.wikipedia.org/wiki/CalDAV)
92
+
93
+
87
94
 
88
95
  ### Currently Supported Time Tracker Backends
89
96
 
@@ -96,35 +103,43 @@ nowfocus is a clean, keyboard-driven project time tracker built with python + GT
96
103
  ## Installation
97
104
 
98
105
  1. Run the following in terminal to install and setup:
99
- ```
100
- # Install dependencies
101
- sudo apt install pipx gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
106
+ ```
107
+ # Install dependencies
108
+ sudo apt install pipx gir1.2-appindicator3-0.1 meson libdbus-glib-1-dev patchelf libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev
109
+
110
+ # note gir1.2-ayatanaappindicator3-0.1 can be substituted for gir1.2-appindicator3-0.1
102
111
 
103
- # note gir1.2-ayatanaappindicator3-0.1 can be substituted for gir1.2-appindicator3-0.1
112
+ # Set up pipx
113
+ pipx ensurepath
104
114
 
105
- # Set up pipx
106
- pipx ensurepath
115
+ # At this point you may need to source your .bashrc (or open a new terminal)
107
116
 
108
- # At this point you may need to restart your terminal window
117
+ # Install nowfocus
118
+ pipx install nowfocus
109
119
 
110
- # Install nowfocus
111
- pipx install nowfocus
120
+ # Enter application directory
121
+ cd ~/.local/share/pipx/venvs/nowfocus/lib/python3.12/site-packages/nowfocus/desktop-extras
112
122
 
113
- # Enter application directory
114
- cd ~/.local/share/pipx/venvs/nowfocus/lib/python3.12/site-packages/nowfocus/desktop-extras
123
+ # Copy desktop file and icon to /usr/share
124
+ sudo cp nowfocus.desktop /usr/share/applications/nowfocus.desktop
125
+ sudo cp nowfocus.svg /usr/share/icons/hicolor/scalable/apps/nowfocus.svg
115
126
 
116
- # Copy .desktop and icon to /usr/share
117
- sudo cp nowfocus.desktop /usr/share/applications/nowfocus.desktop
118
- sudo cp nowfocus.svg /usr/share/icons/hicolor/scalable/apps/nowfocus.svg
127
+ # and now Focus!
128
+ nowfocus
119
129
 
120
- # and now Focus!
121
- nowfocus
130
+ ```
122
131
 
123
- ```
132
+ 2. Set up a keybinding (on Ubuntu or Linux Mint), open **Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the keystroke to Ctrl + Space (or the combination of your choice) set the **command** to:
133
+ ```
134
+ bash -c "echo 'open_task_window' > /tmp/nowfocus-pipe"
135
+ ```
124
136
 
125
- 2. Set up a keybinding (on Ubuntu or Linux Mint), open **Settings > Keyboard > Keyboard Shortcuts > Custom Shortcuts**, set the **command** to `nowfocus`, and pick whatever key combo you'd like.
126
137
 
127
- 3. Add the following command to your startup applications: `nowfocus --force`
138
+
139
+ 3. Add the following command to your startup applications:
140
+ ```
141
+ nowfocus --force
142
+ ```
128
143
 
129
144
 
130
145
 
@@ -142,9 +157,9 @@ Open nowfocus **Settings** from the indicator menu or tasks window and connect y
142
157
  - `Shift Enter` or `Shift Click` Transfer current session time to selected task (or top task if none selected)
143
158
  - `Control Enter` or `Control Click` show opetions menu for selected (or top) task
144
159
  - `Alt Enter` or `Alt Click` Open todolist for selected (or top) task
145
- - `Ctrl + P` **Pause** current task
146
- - `Ctrl + D` Pause current task and mark it **Done**
147
- - `Ctrl + X` Cancel current task
160
+ - `Conrol + S` Pause and **save** current session
161
+ - `Conrol + D` Pause current session and mark task **Done**
162
+ - `Conrol + Q` **Quit** and discard current session
148
163
  - `Ctrl + N` **New** task
149
164
  - `Ctrl + R` **Refresh** todolists
150
165
  - `Ctrl + L` or `Ctrl + F` **Focus** the task search
@@ -168,3 +183,5 @@ Open nowfocus **Settings** from the indicator menu or tasks window and connect y
168
183
  - Change to `YOUR_INSTALL_PATH` directory with `cd YOUR_INSTALL_PATH/nowfocus`
169
184
  - build python module with `python3 -m build` (this should be done in a venv and will require some dependecies...)
170
185
  - pipx install -e --force YOUR_INSTALL_PATH/monotask/
186
+
187
+ <!--built with python + GTK -->
@@ -1,5 +1,5 @@
1
1
  nowfocus/__init__.py,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
2
- nowfocus/__main__.py,sha256=LMqVVjXaZD31F84U6Ie7B0lYZaz54z2afRFanoBIphY,32504
2
+ nowfocus/__main__.py,sha256=AHKig3rl3KnRK4chw4WcZxFTh7vu8CDXxBbl-ugDlJE,32524
3
3
  nowfocus/conf.py,sha256=MZx8gPREKsrzOsTdf_LAaFB8ysMF-jMC5YQZpH6AU3E,6954
4
4
  nowfocus/example-todo.txt,sha256=HRaNcPB1k8cksTtJS1GPqMjOdOY3gAUTWiSL0_ip0q8,265
5
5
  nowfocus/new_task_dialog.py,sha256=3dEkQ4Ef7Gky4BGTx59U0qNfJCdMUrGrzx8HNTGbov8,4337
@@ -8,8 +8,8 @@ nowfocus/session_options.py,sha256=QVwJA53U7qZsbLe-OFr6UuFeaquco_yps_CRXsQ2_q4,5
8
8
  nowfocus/sessions.csv,sha256=kYpr06yQg_J86NQ4AiYw4RnQchcw3ouPKVYa1lYDUNo,39
9
9
  nowfocus/settings.py,sha256=c6Z5FSVvSEx9fm8mQkdRo1TLfxFJEJdCMiqGyElv4bs,36873
10
10
  nowfocus/styles.css,sha256=m_7YXkDD7wljw5sFrv-CEJVImRpe92ER6kMa5rCICVo,489
11
- nowfocus/task_window.py,sha256=jVyjruCE2uhxumOccmKCjOG9PqGvoDnch_Ctbbf6-no,26081
12
- nowfocus/utils.py,sha256=z4eQPKoiRunLnJyorSUCzNqbetvAjeQIZd3fHJmA3ko,46953
11
+ nowfocus/task_window.py,sha256=aCPbiC2qXXSFrM93JWsiEVHNuIPEvldFWt98DPaD1vI,26345
12
+ nowfocus/utils.py,sha256=eTNNO27W3mWzNntIFqJ7NlCRPPd3Ud33MxiNPfbNBH8,47095
13
13
  nowfocus/connectors/activitywatch.py,sha256=QbkOmjIOiVwccWc2xhhePd0Abww5vEiVpCNjeqOyYGg,921
14
14
  nowfocus/connectors/caldav.py,sha256=PeM_9yJC8W17L8Y5AyS75o6GfzTrPoMYKIvetND8T78,5089
15
15
  nowfocus/connectors/csv.py,sha256=FwMpHM5lPIT90HKBCQUncpaW7zqFjlHjMwKR0-XWg-4,821
@@ -19,7 +19,7 @@ nowfocus/connectors/timewarrior.py,sha256=0Hra0GVPYdRqGtG_TbH3gzfUl192hH1DO2_WrD
19
19
  nowfocus/connectors/todo_template.py,sha256=R37fA2LXo8_LpWIgqozytI5RqIUjGggFHup25xTykII,1572
20
20
  nowfocus/connectors/todotxt.py,sha256=AKkHe_kv7iyk9rbXL1VwCN-ZyCluGlWP4wBcLn_Wnz4,3669
21
21
  nowfocus/connectors/trello.py,sha256=VqwnvHGXXcljmdf6kRZcE6sfeBQYhped_KVBEBOzWXM,6072
22
- nowfocus/connectors/txt.py,sha256=z_UAoJW-pZTRflgXeq5w9BAA0V8IMCGiRfYiOfLc7dQ,7847
22
+ nowfocus/connectors/txt.py,sha256=ybYRagybuI3AjaeJO0QFjTlGntriFqJ3aq2aN2sDOGs,7777
23
23
  nowfocus/connectors/vikunja.py,sha256=jOEQGGMu9tJJXlcJwtbsqLkCTqbsSlnja-QoyBrJ9eM,10856
24
24
  nowfocus/desktop-extras/nowfocus.desktop,sha256=0kWsx0ZfvPbubGG1uuFSHxxYUw2GV9Ly_rtlboM1mak,294
25
25
  nowfocus/desktop-extras/nowfocus.png,sha256=P5rn6-0EAJa2WXf4SJoaNtLRUfiV3LdsOroPKsR6GfA,15148
@@ -49,9 +49,9 @@ nowfocus/icon/settings.svg,sha256=fgkGJouPPtZLxZn2nr_5pEp9MdhRSRaW9mtdxhJHDuQ,39
49
49
  nowfocus/sound/bell-xylophone-g.mp3,sha256=1OBcRWvD87AGNcq1uZFR8HqG0nanJykImERfVDVxHD4,53891
50
50
  nowfocus/sound/dinner-bell.mp3,sha256=hjjO0xqA4uXpYw9KLwwlBnrVfRhVq1K5OXzwlMXhRn4,113620
51
51
  nowfocus/sound/xylophone-chord.mp3,sha256=gwgBSqhMt5PMzT5N03Z6TvDgipQZfnkEz_o81Rq5Z1U,131806
52
- nowfocus-0.2.12.dist-info/licenses/LICENSE,sha256=fSJzoHs1EOCwEd7FIyokFeGEma7NKmTVEdHkCr5OIV4,35127
53
- nowfocus-0.2.12.dist-info/METADATA,sha256=UKr9IoBZagnBMTFo2McdL67DIUgPBWQz1OH2XmlZtlc,6139
54
- nowfocus-0.2.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
55
- nowfocus-0.2.12.dist-info/entry_points.txt,sha256=RbYY19-irSoNVglNeNnL9D36cHft7aKsaEGEYoSH3pA,51
56
- nowfocus-0.2.12.dist-info/top_level.txt,sha256=3uLd9BwmfarZwqVUxkSJuVwJ8qHzjThte8rt_UYG7tE,9
57
- nowfocus-0.2.12.dist-info/RECORD,,
52
+ nowfocus-0.2.13.dist-info/licenses/LICENSE,sha256=fSJzoHs1EOCwEd7FIyokFeGEma7NKmTVEdHkCr5OIV4,35127
53
+ nowfocus-0.2.13.dist-info/METADATA,sha256=Xg2xQ1ivQml4HdpkgBbOqzoRisB_1nmzkzfLmn2jiys,7023
54
+ nowfocus-0.2.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
55
+ nowfocus-0.2.13.dist-info/entry_points.txt,sha256=RbYY19-irSoNVglNeNnL9D36cHft7aKsaEGEYoSH3pA,51
56
+ nowfocus-0.2.13.dist-info/top_level.txt,sha256=3uLd9BwmfarZwqVUxkSJuVwJ8qHzjThte8rt_UYG7tE,9
57
+ nowfocus-0.2.13.dist-info/RECORD,,