@@ -563,25 +563,15 @@ extension NSTextView: EditorCounter.Source { }
563563
564564 savePanel. allowsOtherFileTypes = true
565565
566- // -> At least in macOS 26.2, the default filename is already set
567- if #unavailable( macOS 26 . 2 ) {
568- savePanel. allowedContentTypes = self . fileType
569- . flatMap { self . fileNameExtension ( forType: $0, saveOperation: . saveOperation) }
570- . flatMap { UTType ( filenameExtension: $0, conformingTo: . data) }
571- . map { [ $0] } ?? [ ]
572-
573- // avoid the Hide Extension option removes actual filename extension (2024-05, macOS 14)
574- savePanel. canSelectHiddenExtension = false
575- savePanel. isExtensionHidden = false
576- }
577-
578566 // workaround the issue that NSDocument cannot resolve the file extension
579567 // from a dynamic UTType, falling back to .txt (2026-03, macOS 26)
580- if let fileType, let type = UTType ( fileType) , type. isDynamic,
581- let fileExtension = type. preferredFilenameExtension
582- {
568+ if let type = self . fileType. flatMap ( UTType . init) {
583569 savePanel. allowedContentTypes. append ( type)
584- savePanel. nameFieldStringValue = savePanel. nameFieldStringValue. deletingPathExtension + " . \( fileExtension) "
570+
571+ // prioritize the user's preferred extension
572+ if self . fileURL == nil , let fileExtension = self . syntaxController. syntax. fileMap. extensions? . first {
573+ savePanel. nameFieldStringValue = savePanel. nameFieldStringValue. deletingPathExtension + " . \( fileExtension) "
574+ }
585575 }
586576
587577 // set accessory view
@@ -592,15 +582,6 @@ extension NSTextView: EditorCounter.Source { }
592582 accessoryView. sizingOptions = . intrinsicContentSize
593583 savePanel. accessoryView = accessoryView
594584
595- // let save panel accept any file extension
596- // -> Otherwise, the file extension for `.allowedContentTypes` is automatically added
597- // even when the user specifies another one (2023-09, macOS 14).
598- if #unavailable( macOS 26 . 2 ) {
599- DispatchQueue . main. async { [ weak savePanel] in
600- savePanel? . allowedContentTypes = [ ]
601- }
602- }
603-
604585 return true
605586 }
606587
0 commit comments