import sublime import sublime_plugin import datetime import os import sys from pathlib import Path from typing import List, Optional, Tuple class NewNoteCommand(sublime_plugin.WindowCommand): def run(self): # Get the current date formatted as YYYYMMDD and YYYY-MM-DD date_str_yyyymmdd = datetime.datetime.now().strftime("%Y%m%d") date_str_display = datetime.datetime.now().strftime("%Y-%m-%d") file_name = f"{date_str_yyyymmdd}.md" # Create the underline based on the length of date_str_display underline = '=' * len(date_str_display) # Get the project directory and look for a "Notes" or "notes" folder project_data = self.window.project_data() notes_path = None if project_data and 'folders' in project_data: for folder in project_data['folders']: folder_path = folder['path'] if os.path.basename(folder_path).lower() == "notes": notes_path = folder_path break if notes_path: year, month, day = date_str_display.split('-') file_path = os.path.join(notes_path, year, month, file_name) # Check if file already exists if os.path.exists(file_path): sublime.message_dialog(f"The file '{file_name}' already exists.") else: # Create the new file and write the date string with a line underneath with open(file_path, 'w') as file: file.write(f"{date_str_display}\n{underline}\n\n\n") # Open the file and set the cursor position new_view = self.window.open_file(file_path) self.set_cursor_position(new_view) else: sublime.message_dialog("No 'Notes' directory found in the project. Please add a 'Notes' folder.") def set_cursor_position(self, view): # Set the cursor position two lines beneath the underline def on_load(): view.run_command("move_to", {"to": "bof"}) for _ in range(3): view.run_command("move", {"by": "lines", "forward": True}) # Add an event listener for when the file is loaded if view.is_loading(): sublime.set_timeout_async(lambda: self.set_cursor_position(view), 100) else: on_load() def list_files(self, directory: str, ignore_extensions: Optional[List[str]] = None) -> List[Path]: if ignore_extensions is None: ignore_extensions = [] return [file for file in Path(directory).glob("*") if file.is_file() and file.suffix not in ignore_extensions] def parse_file_date (self, file_name: str) -> Tuple[str, str]: year = file_name[:4] month = file_name[4:6] return year, month