Add text entry history/editing/auto-complete
...and import utc directly
This commit is contained in:
parent
5c111e96f1
commit
f908389c40
2 changed files with 30 additions and 15 deletions
|
@ -6,9 +6,17 @@ import prompt_window
|
|||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
from pytz import timezone
|
||||
from pytz import timezone, utc
|
||||
from prompt_toolkit import PromptSession
|
||||
from prompt_toolkit.history import FileHistory
|
||||
#from prompt_toolkit.auto_suggest import AutoSuggestFromHistory
|
||||
from prompt_toolkit.completion import WordCompleter
|
||||
|
||||
import pytz
|
||||
session = PromptSession(history=FileHistory(os.path.expanduser('~/.pomodoro_history')))
|
||||
# Move to a file:
|
||||
words = WordCompleter(['NCHFA', 'PECE', 'Housing Works', 'Internal'])
|
||||
#os.path.dirname(os.path.realpath(__file__))
|
||||
#completion_list = WordCompleter(history=FileHistory(os.path.dirname(os.path.realpath(__file__)) + '.auto_complete'))
|
||||
|
||||
WORK_MIN = 25 # Minutes for a work session
|
||||
SHORT_MIN = 5 # Minutes for a short break
|
||||
|
@ -20,14 +28,17 @@ GUI = True
|
|||
def pomodoro_prompt_plan(whatdid = ''):
|
||||
""" Ask about what task will be worked on (showing last thing worked on)
|
||||
"""
|
||||
text = "What're you gonna do?"
|
||||
text = "What're you gonna do? "
|
||||
# NOTE: If we can do system notifications that when clicked will focus the terminal
|
||||
# running pomodoro prompt, that might be even better than the pop-up GUI text entry.
|
||||
if GUI:
|
||||
whatnext = prompt_window.prompt(prompt=text, task=whatdid)
|
||||
else:
|
||||
print(f'\n{text}')
|
||||
whatnext = (input(f'({whatdid}): ' if whatdid else '').strip() or whatdid)
|
||||
whatnext = session.prompt(message = text,
|
||||
default = whatdid or '',
|
||||
vi_mode = True,
|
||||
completer = words,
|
||||
complete_while_typing = True).strip()
|
||||
# Pressing cancel returns None, but we want to just treat it as an empty string.
|
||||
if whatnext is None:
|
||||
whatnext = ''
|
||||
|
@ -36,12 +47,15 @@ def pomodoro_prompt_plan(whatdid = ''):
|
|||
def pomodoro_prompt_report(whatnext):
|
||||
""" Ask what task was completed, showing the last task claimed to be being worked on
|
||||
"""
|
||||
text = "What'd you do?"
|
||||
text = "What'd you do? "
|
||||
if GUI:
|
||||
whatdid = prompt_window.prompt(prompt=text, task=whatnext)
|
||||
else:
|
||||
print(f'\n{text}')
|
||||
whatdid = (input(f'({whatnext}): ' if whatnext else '').strip() or whatnext)
|
||||
whatdid = session.prompt(message = text,
|
||||
default = whatnext or '',
|
||||
vi_mode = True,
|
||||
completer = words,
|
||||
complete_while_typing = True).strip()
|
||||
# Pressing cancel returns None, but we want to just treat it as an empty string.
|
||||
if whatdid is None:
|
||||
whatdid = ''
|
||||
|
@ -73,7 +87,7 @@ def record_task(whatnext, whatdid, start, end=None):
|
|||
""" Record completed pomodoro to CSV
|
||||
"""
|
||||
if end is None:
|
||||
end = datetime.now(pytz.utc)
|
||||
end = datetime.now(utc)
|
||||
|
||||
filepath = prepare_file(start)
|
||||
if not os.path.isfile(filepath):
|
||||
|
@ -93,8 +107,8 @@ def str_minutes(time_diff):
|
|||
def countdown_to(until):
|
||||
""" Display a timer counting down to until
|
||||
"""
|
||||
while datetime.now(pytz.utc) <= until:
|
||||
to_go = until-datetime.now(pytz.utc)
|
||||
while datetime.now(utc) <= until:
|
||||
to_go = until-datetime.now(utc)
|
||||
print('\r', str_minutes(to_go), sep='', end='')
|
||||
time.sleep(1)
|
||||
|
||||
|
@ -135,11 +149,11 @@ def main():
|
|||
while True:
|
||||
whatnext = pomodoro_prompt_plan(whatdid)
|
||||
|
||||
start = datetime.now(pytz.utc)
|
||||
start = datetime.now(utc)
|
||||
end = start + timedelta(minutes=WORK_MIN)
|
||||
log_step('Start with plan: ' + whatnext, start)
|
||||
try:
|
||||
print('Working on: ' + whatnext)
|
||||
print('Working on: ' + (whatnext or "(...it must be a mystery)"))
|
||||
countdown_to(end)
|
||||
if not QUIET:
|
||||
bing()
|
||||
|
@ -151,7 +165,7 @@ def main():
|
|||
print('Break time!')
|
||||
# We're taking a break. Clear out task start/end times.
|
||||
start = None
|
||||
end = datetime.now(pytz.utc) + timedelta(minutes=SHORT_MIN)
|
||||
end = datetime.now(utc) + timedelta(minutes=SHORT_MIN)
|
||||
countdown_to(end)
|
||||
if not QUIET:
|
||||
bing()
|
||||
|
@ -160,7 +174,7 @@ def main():
|
|||
if start is None:
|
||||
quit_prompt()
|
||||
continue
|
||||
time_spent = datetime.now(pytz.utc) - start
|
||||
time_spent = datetime.now(utc) - start
|
||||
if time_spent < timedelta(minutes=INTERRUPTED_MIN):
|
||||
quit_prompt()
|
||||
continue
|
||||
|
|
|
@ -11,6 +11,7 @@ in pkgs.mkShell {
|
|||
pycairo
|
||||
pytz
|
||||
tzlocal
|
||||
prompt-toolkit # for text entry history/auto complete
|
||||
# For Qt:
|
||||
# pyside6
|
||||
# Using GTK:
|
||||
|
|
Loading…
Reference in a new issue