diff --git a/src/AppDelegate.swift b/src/AppDelegate.swift index 16f9e82..5b9f79f 100644 --- a/src/AppDelegate.swift +++ b/src/AppDelegate.swift @@ -186,13 +186,26 @@ class AppDelegate: NSObject, NSApplicationDelegate { @objc private func saveNoteAs() { let panel = NSSavePanel() panel.allowedContentTypes = [UTType(filenameExtension: "md")!] - panel.nameFieldStringValue = "note.md" + panel.nameFieldStringValue = defaultFilename() panel.beginSheetModal(for: window) { [weak self] response in guard response == .OK, let url = panel.url else { return } self?.appState.saveNoteToFile(url) } } + private func defaultFilename() -> String { + let firstLine = appState.documentText + .components(separatedBy: "\n").first? + .trimmingCharacters(in: .whitespaces) ?? "" + let stripped = firstLine.replacingOccurrences( + of: "^#+\\s*", with: "", options: .regularExpression + ) + let trimmed = stripped.trimmingCharacters(in: .whitespaces) + guard !trimmed.isEmpty, trimmed != "Untitled" else { return "note.md" } + let sanitized = trimmed.map { "/:\\\\".contains($0) ? "-" : String($0) }.joined() + return sanitized.prefix(80) + ".md" + } + @objc private func openSettings() { SettingsWindowController.show() }