Skip to content

Commit 40c1a1e

Browse files
committed
Add CloseIdleTabsCommand
1 parent f873f33 commit 40c1a1e

3 files changed

Lines changed: 41 additions & 1 deletion

File tree

Copilot for Xcode.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
C89E75C32A46FB32000DD64F /* AppDelegate+Menu.swift in Sources */ = {isa = PBXBuildFile; fileRef = C89E75C22A46FB32000DD64F /* AppDelegate+Menu.swift */; };
4444
C8C8B60929AFA35F00034BEE /* CopilotForXcodeExtensionService.app in Embed XPCService */ = {isa = PBXBuildFile; fileRef = C861E60E2994F6070056CB02 /* CopilotForXcodeExtensionService.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
4545
C8DCF00029CE11D500FDDDD7 /* ChatWithSelection.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DCEFFF29CE11D500FDDDD7 /* ChatWithSelection.swift */; };
46+
C8DD9CB12BC673F80036641C /* CloseIdleTabsCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8DD9CB02BC673F80036641C /* CloseIdleTabsCommand.swift */; };
4647
C8F1032B2A7A39D700D28F4F /* launchAgent.plist in Copy Launch Agent */ = {isa = PBXBuildFile; fileRef = C8F103292A7A365000D28F4F /* launchAgent.plist */; };
4748
/* End PBXBuildFile section */
4849

@@ -197,6 +198,7 @@
197198
C89E75C22A46FB32000DD64F /* AppDelegate+Menu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AppDelegate+Menu.swift"; sourceTree = "<group>"; };
198199
C8CD828229B88006008D044D /* TestPlan.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = TestPlan.xctestplan; sourceTree = "<group>"; };
199200
C8DCEFFF29CE11D500FDDDD7 /* ChatWithSelection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatWithSelection.swift; sourceTree = "<group>"; };
201+
C8DD9CB02BC673F80036641C /* CloseIdleTabsCommand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CloseIdleTabsCommand.swift; sourceTree = "<group>"; };
200202
C8F103292A7A365000D28F4F /* launchAgent.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = launchAgent.plist; sourceTree = "<group>"; };
201203
/* End PBXFileReference section */
202204

@@ -264,6 +266,7 @@
264266
C800DBB0294C624D00B04CAC /* PrefetchSuggestionsCommand.swift */,
265267
C8758E6F29F04BFF00D29C1C /* CustomCommand.swift */,
266268
C8DCEFFF29CE11D500FDDDD7 /* ChatWithSelection.swift */,
269+
C8DD9CB02BC673F80036641C /* CloseIdleTabsCommand.swift */,
267270
C861A6A229E5503F005C41A3 /* PromptToCodeCommand.swift */,
268271
C81458972939EFDC00135263 /* Info.plist */,
269272
C81458982939EFDC00135263 /* EditorExtension.entitlements */,
@@ -525,6 +528,7 @@
525528
files = (
526529
C8DCF00029CE11D500FDDDD7 /* ChatWithSelection.swift in Sources */,
527530
C81458942939EFDC00135263 /* SourceEditorExtension.swift in Sources */,
531+
C8DD9CB12BC673F80036641C /* CloseIdleTabsCommand.swift in Sources */,
528532
C8758E7029F04BFF00D29C1C /* CustomCommand.swift in Sources */,
529533
C8758E7229F04CF100D29C1C /* SeparatorCommand.swift in Sources */,
530534
C861A6A329E5503F005C41A3 /* PromptToCodeCommand.swift in Sources */,
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import Client
2+
import Foundation
3+
import SuggestionModel
4+
import XcodeKit
5+
6+
class CloseIdleTabsCommand: NSObject, XCSourceEditorCommand, CommandType {
7+
var name: String { "Close Idle Tabs" }
8+
9+
func perform(
10+
with invocation: XCSourceEditorCommandInvocation,
11+
completionHandler: @escaping (Error?) -> Void
12+
) {
13+
completionHandler(nil)
14+
Task {
15+
let service = try getService()
16+
_ = try await service.postNotification(name: "CloseIdleTabsOfXcodeWindow")
17+
}
18+
}
19+
}
20+

EditorExtension/SourceEditorExtension.swift

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ import Foundation
33
import Preferences
44
import XcodeKit
55

6+
#if canImport(PreferencesPlus)
7+
import PreferencesPlus
8+
#endif
9+
610
class SourceEditorExtension: NSObject, XCSourceEditorExtension {
711
var builtin: [[XCSourceEditorCommandDefinitionKey: Any]] {
812
[
@@ -17,6 +21,18 @@ class SourceEditorExtension: NSObject, XCSourceEditorExtension {
1721
].map(makeCommandDefinition)
1822
}
1923

24+
var optional: [[XCSourceEditorCommandDefinitionKey: Any]] {
25+
var all = [[XCSourceEditorCommandDefinitionKey: Any]]()
26+
27+
#if canImport(PreferencesPlus)
28+
if UserDefaults.shared.value(for: \.enableCloseIdleTabCommandInXcodeMenu) {
29+
all.append(CloseIdleTabsCommand().makeCommandDefinition())
30+
}
31+
#endif
32+
33+
return all
34+
}
35+
2036
var internalUse: [[XCSourceEditorCommandDefinitionKey: Any]] {
2137
[
2238
SeparatorCommand().named("------"),
@@ -34,7 +50,7 @@ class SourceEditorExtension: NSObject, XCSourceEditorExtension {
3450
}
3551

3652
var commandDefinitions: [[XCSourceEditorCommandDefinitionKey: Any]] {
37-
return builtin + custom + internalUse
53+
return builtin + optional + custom + internalUse
3854
}
3955

4056
func extensionDidFinishLaunching() {

0 commit comments

Comments
 (0)