Skip to content

Commit 784ee2e

Browse files
committed
Respond to Key Commands, Ignore Empty Clipboard
1 parent c753a67 commit 784ee2e

File tree

5 files changed

+38
-9
lines changed

5 files changed

+38
-9
lines changed

CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView/ProjectNavigatorMenu.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ final class ProjectNavigatorMenu: NSMenu {
6666
action: #selector(newFileFromClipboard),
6767
key: "v"
6868
)
69-
newFileFromClipboard.keyEquivalentModifierMask = [.command, .control]
69+
newFileFromClipboard.keyEquivalentModifierMask = [.command]
7070
let newFolder = menuItem("New Folder", action: #selector(newFolder))
7171

7272
let rename = menuItem("Rename", action: #selector(renameFile))

CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView/ProjectNavigatorMenuActions.swift

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -121,20 +121,16 @@ extension ProjectNavigatorMenu {
121121
guard let item else { return }
122122
do {
123123
let clipBoardContent = NSPasteboard.general.string(forType: .string)?.data(using: .utf8)
124-
if let newFile = try workspace?
124+
if let clipBoardContent, !clipBoardContent.isEmpty, let newFile = try workspace?
125125
.workspaceFileManager?
126126
.addFile(
127127
fileName: "untitled",
128128
toFile: item,
129-
useExtension: "",
130129
contents: clipBoardContent
131130
) {
132131
workspace?.listenerModel.highlightedFileItem = newFile
133132
workspace?.editorManager?.openTab(item: newFile)
134-
}
135-
/// To resolve racing condition
136-
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
137-
self.renameFile()
133+
renameFile()
138134
}
139135
} catch {
140136
let alert = NSAlert(error: error)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//
2+
// ProjectNavigatorNSOutlineView.swift
3+
// CodeEdit
4+
//
5+
// Created by Khan Winter on 6/10/25.
6+
//
7+
8+
import AppKit
9+
10+
final class ProjectNavigatorNSOutlineView: NSOutlineView, NSMenuItemValidation {
11+
override func performKeyEquivalent(with event: NSEvent) -> Bool {
12+
if event.charactersIgnoringModifiers == "v"
13+
&& event.modifierFlags.intersection(.deviceIndependentFlagsMask) == .command {
14+
guard let menu = menu as? ProjectNavigatorMenu else {
15+
return super.performKeyEquivalent(with: event)
16+
}
17+
menu.delegate?.menuNeedsUpdate?(menu)
18+
for fileItem in selectedRowIndexes.compactMap({ item(atRow: $0) as? CEWorkspaceFile }) {
19+
menu.item = fileItem
20+
menu.newFileFromClipboard()
21+
}
22+
return true
23+
}
24+
return super.performKeyEquivalent(with: event)
25+
}
26+
27+
func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
28+
if menuItem.action == #selector(ProjectNavigatorMenu.newFileFromClipboard) {
29+
return !selectedRowIndexes.isEmpty
30+
}
31+
return false
32+
}
33+
}

CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView/ProjectNavigatorViewController+NSMenuDelegate.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ extension ProjectNavigatorViewController: NSMenuDelegate {
1818
let row = outlineView.clickedRow
1919
guard let menu = menu as? ProjectNavigatorMenu else { return }
2020

21+
menu.workspace = workspace
2122
if row == -1 {
2223
menu.item = nil
2324
} else {
2425
if let item = outlineView.item(atRow: row) as? CEWorkspaceFile {
2526
menu.item = item
26-
menu.workspace = workspace
2727
} else {
2828
menu.item = nil
2929
}

CodeEdit/Features/NavigatorArea/ProjectNavigator/OutlineView/ProjectNavigatorViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ final class ProjectNavigatorViewController: NSViewController {
7474
self.scrollView.hasVerticalScroller = true
7575
self.view = scrollView
7676

77-
self.outlineView = NSOutlineView()
77+
self.outlineView = ProjectNavigatorNSOutlineView()
7878
self.outlineView.dataSource = self
7979
self.outlineView.delegate = self
8080
self.outlineView.autosaveExpandedItems = true

0 commit comments

Comments
 (0)