Skip to content

Commit e7a8be4

Browse files
committed
Prioritize user priffered file extension on save panel
1 parent 71f2afd commit e7a8be4

1 file changed

Lines changed: 6 additions & 25 deletions

File tree

‎CotEditor/Sources/Document/Document.swift‎

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)