Skip to content

Commit 3a01285

Browse files
committed
add support to edit reminders
1 parent 97b619f commit 3a01285

File tree

6 files changed

+84
-8
lines changed

6 files changed

+84
-8
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@
22

33
All notable changes to this project will be documented in this file.
44

5+
## [0.2.2] - 14.04.2025
6+
7+
### Added
8+
9+
- Added support for editing Apple Reminders title and due date.
10+
11+
### Changed
12+
13+
- Small changes and updates to the README file.
14+
- Refactored codebase and applied minor output improvements.
15+
516
## [0.2.1] - 11.04.2025
617

718
### Added
@@ -63,6 +74,7 @@ Initial release with core Apple Notes functionality:
6374
- Move notes between folders
6475
- List all folders and subfolders
6576

77+
[0.2.2]: https://github.com/antoniorodr/memo/releases/tag/v0.2.2
6678
[0.2.1]: https://github.com/antoniorodr/memo/releases/tag/v0.2.1
6779
[0.2.0]: https://github.com/antoniorodr/memo/releases/tag/v0.2.0
6880
[0.1.2]: https://github.com/antoniorodr/memo/releases/tag/v0.1.2

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
## :sparkles: Features
5656

5757
:heavy_check_mark: View your notes and reminders directly from the terminal\
58-
:heavy_check_mark: Edit your notes right from the terminal\
58+
:heavy_check_mark: Edit your notes and reminders right from the terminal\
5959
:heavy_check_mark: Add new notes and reminders effortlessly through the terminal\
6060
:heavy_check_mark: Move notes to another folder effortlessly through the terminal\
6161
:heavy_check_mark: Mark reminders as completed from the terminal

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ build-backend = "setuptools.build_meta"
55
[project]
66
name = "memo"
77
authors = [{ name = "Antonio Rodriguez", email = "[email protected]" }]
8-
version = "0.2.1"
8+
version = "0.2.2"
99
description = "CLI app to manage your Apple Notes and Apple reminders"
1010
readme = "README.md"
1111
license = "MIT"

src/memo/memo.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import click
22
import datetime
33
from memo_helpers.get_memo import get_note, get_reminder
4-
from memo_helpers.edit_memo import edit_note
4+
from memo_helpers.edit_memo import edit_note, edit_reminder
55
from memo_helpers.add_memo import add_note, add_reminder
66
from memo_helpers.delete_memo import (
77
delete_note,
@@ -15,7 +15,8 @@
1515
from memo_helpers.validation_memo import selection_notes_validation
1616
from memo_helpers.search_memo import fuzzy_notes
1717

18-
# TODO: Add funcionality to reminders: Edit reminders (title, due date, etc)
18+
# TODO: Check if notes can be imported and exported.
19+
# TODO: Check if its possible to fetch .localized names from the folders.
1920

2021

2122
@click.group(invoke_without_command=False)
@@ -146,7 +147,13 @@ def notes(folder, edit, add, delete, move, flist, search, remove):
146147
is_flag=True,
147148
help="Delete a reminder.",
148149
)
149-
def rem(complete, add, delete):
150+
@click.option(
151+
"--edit",
152+
"-e",
153+
is_flag=True,
154+
help="Edit a reminder.",
155+
)
156+
def rem(complete, add, delete, edit):
150157
if add:
151158
add_reminder()
152159
else:
@@ -191,3 +198,11 @@ def rem(complete, add, delete):
191198
if delete:
192199
reminder_id = pick_reminder(reminders_map, reminders_list_filter, "delete")
193200
delete_reminder(reminder_id)
201+
if edit:
202+
reminder_id = pick_reminder(reminders_map, reminders_list_filter, "edit")
203+
part_to_edit = (
204+
click.prompt("\nEnter the part to edit ('title' or 'due date')")
205+
.strip()
206+
.lower()
207+
)
208+
edit_reminder(reminder_id, part_to_edit)

src/memo_helpers/edit_memo.py

Lines changed: 51 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import tempfile
44
import mistune
55
import os
6+
import datetime
67
from memo_helpers.id_search_memo import id_search_memo
78
from memo_helpers.md_converter import md_converter
89

@@ -30,7 +31,7 @@ def edit_note(note_id):
3031
edited_md = file.read().strip()
3132

3233
if edited_md == original_md:
33-
click.echo("\nNo changes made.")
34+
click.secho("\nNo changes made.", fg="yellow")
3435
return
3536

3637
edited_html = mistune.markdown(edited_md)
@@ -42,4 +43,52 @@ def edit_note(note_id):
4243
end tell
4344
"""
4445
subprocess.run(["osascript", "-e", update_script])
45-
click.echo("\nNote updated.")
46+
click.secho("\nNote updated.", fg="green")
47+
48+
49+
def edit_reminder(reminder_id, part_to_edit):
50+
if part_to_edit == "title":
51+
new_title = click.prompt("\nEnter the new title")
52+
script = f"""
53+
tell application "Reminders"
54+
set selectedReminder to first reminder whose id is "{reminder_id}"
55+
set name of selectedReminder to "{new_title}"
56+
end tell
57+
"""
58+
result = subprocess.run(
59+
["osascript", "-e", script], capture_output=True, text=True
60+
)
61+
if result.returncode == 0:
62+
click.secho("\nReminder title updated.", fg="green")
63+
else:
64+
click.secho("\nError: Could not update reminder title.", fg="red")
65+
if part_to_edit == "due date":
66+
new_date = click.prompt("\nEnter the new date (YYYY-MM-DD)")
67+
new_time = click.prompt("\nEnter the new time (HH:MM)")
68+
datetime_str = f"{new_date} {new_time}"
69+
due_dt = datetime.datetime.strptime(datetime_str, "%Y-%m-%d %H:%M")
70+
year = due_dt.year
71+
month = due_dt.month
72+
day = due_dt.day
73+
hour = due_dt.hour
74+
minute = due_dt.minute
75+
76+
script = f"""
77+
tell application "Reminders"
78+
set selectedReminder to first reminder whose id is "{reminder_id}"
79+
set dueDate to current date
80+
set year of dueDate to {year}
81+
set month of dueDate to {month}
82+
set day of dueDate to {day}
83+
set time of dueDate to ({hour} * hours + {minute} * minutes)
84+
set due date of selectedReminder to dueDate
85+
end tell
86+
"""
87+
88+
result = subprocess.run(
89+
["osascript", "-e", script], capture_output=True, text=True
90+
)
91+
if result.returncode == 0:
92+
click.secho("\nReminder date updated.", fg="green")
93+
else:
94+
click.secho("\nError: Could not update reminder date.", fg="red")

src/memo_helpers/get_memo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def get_reminder():
7676
except ValueError:
7777
due_datetime = None
7878
else:
79-
due_datetime = None
79+
due_datetime = datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")
8080

8181
reminders_map[i + 1] = (reminder_id, title, due_datetime)
8282

0 commit comments

Comments
 (0)