Add text entry history/editing/auto-complete

...and import utc directly
This commit is contained in:
Chris (wolcen) Thompson 2024-11-19 10:59:14 -05:00
parent 5c111e96f1
commit f908389c40
2 changed files with 30 additions and 15 deletions

View file

@ -6,9 +6,17 @@ import prompt_window
import time import time
from datetime import datetime, timedelta from datetime import datetime, timedelta
from pathlib import Path 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 WORK_MIN = 25 # Minutes for a work session
SHORT_MIN = 5 # Minutes for a short break SHORT_MIN = 5 # Minutes for a short break
@ -20,14 +28,17 @@ GUI = True
def pomodoro_prompt_plan(whatdid = ''): def pomodoro_prompt_plan(whatdid = ''):
""" Ask about what task will be worked on (showing last thing worked on) """ 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 # 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. # running pomodoro prompt, that might be even better than the pop-up GUI text entry.
if GUI: if GUI:
whatnext = prompt_window.prompt(prompt=text, task=whatdid) whatnext = prompt_window.prompt(prompt=text, task=whatdid)
else: else:
print(f'\n{text}') whatnext = session.prompt(message = text,
whatnext = (input(f'({whatdid}): ' if whatdid else '').strip() or whatdid) 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. # Pressing cancel returns None, but we want to just treat it as an empty string.
if whatnext is None: if whatnext is None:
whatnext = '' whatnext = ''
@ -36,12 +47,15 @@ def pomodoro_prompt_plan(whatdid = ''):
def pomodoro_prompt_report(whatnext): def pomodoro_prompt_report(whatnext):
""" Ask what task was completed, showing the last task claimed to be being worked on """ 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: if GUI:
whatdid = prompt_window.prompt(prompt=text, task=whatnext) whatdid = prompt_window.prompt(prompt=text, task=whatnext)
else: else:
print(f'\n{text}') whatdid = session.prompt(message = text,
whatdid = (input(f'({whatnext}): ' if whatnext else '').strip() or whatnext) 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. # Pressing cancel returns None, but we want to just treat it as an empty string.
if whatdid is None: if whatdid is None:
whatdid = '' whatdid = ''
@ -73,7 +87,7 @@ def record_task(whatnext, whatdid, start, end=None):
""" Record completed pomodoro to CSV """ Record completed pomodoro to CSV
""" """
if end is None: if end is None:
end = datetime.now(pytz.utc) end = datetime.now(utc)
filepath = prepare_file(start) filepath = prepare_file(start)
if not os.path.isfile(filepath): if not os.path.isfile(filepath):
@ -93,8 +107,8 @@ def str_minutes(time_diff):
def countdown_to(until): def countdown_to(until):
""" Display a timer counting down to until """ Display a timer counting down to until
""" """
while datetime.now(pytz.utc) <= until: while datetime.now(utc) <= until:
to_go = until-datetime.now(pytz.utc) to_go = until-datetime.now(utc)
print('\r', str_minutes(to_go), sep='', end='') print('\r', str_minutes(to_go), sep='', end='')
time.sleep(1) time.sleep(1)
@ -135,11 +149,11 @@ def main():
while True: while True:
whatnext = pomodoro_prompt_plan(whatdid) whatnext = pomodoro_prompt_plan(whatdid)
start = datetime.now(pytz.utc) start = datetime.now(utc)
end = start + timedelta(minutes=WORK_MIN) end = start + timedelta(minutes=WORK_MIN)
log_step('Start with plan: ' + whatnext, start) log_step('Start with plan: ' + whatnext, start)
try: try:
print('Working on: ' + whatnext) print('Working on: ' + (whatnext or "(...it must be a mystery)"))
countdown_to(end) countdown_to(end)
if not QUIET: if not QUIET:
bing() bing()
@ -151,7 +165,7 @@ def main():
print('Break time!') print('Break time!')
# We're taking a break. Clear out task start/end times. # We're taking a break. Clear out task start/end times.
start = None start = None
end = datetime.now(pytz.utc) + timedelta(minutes=SHORT_MIN) end = datetime.now(utc) + timedelta(minutes=SHORT_MIN)
countdown_to(end) countdown_to(end)
if not QUIET: if not QUIET:
bing() bing()
@ -160,7 +174,7 @@ def main():
if start is None: if start is None:
quit_prompt() quit_prompt()
continue continue
time_spent = datetime.now(pytz.utc) - start time_spent = datetime.now(utc) - start
if time_spent < timedelta(minutes=INTERRUPTED_MIN): if time_spent < timedelta(minutes=INTERRUPTED_MIN):
quit_prompt() quit_prompt()
continue continue

View file

@ -11,6 +11,7 @@ in pkgs.mkShell {
pycairo pycairo
pytz pytz
tzlocal tzlocal
prompt-toolkit # for text entry history/auto complete
# For Qt: # For Qt:
# pyside6 # pyside6
# Using GTK: # Using GTK: