Post

Replies

Boosts

Views

Activity

Reply to Virtualization.Framework support for VZFileHandleNetworkDeviceAttachment
I did setup it succesfully with socketpair() like below: let socket_vector = Array<Int32>(unsafeUninitializedCapacity: 2) { buffer, initializedCount in guard Darwin.socketpair(AF_UNIX, SOCK_DGRAM, 0, buffer.baseAddress) == 0 else { assertionFailure(String(cString: Darwin.strerror(errno)!)) initializedCount = 0 return } initializedCount = 2 } for socket_descriptor in socket_vector { let virtioSocketNet = VZVirtioNetworkDeviceConfiguration() let fh = FileHandle(fileDescriptor: socket_descriptor) virtioSocketNet.attachment = VZFileHandleNetworkDeviceAttachment(fileHandle: fh) config.networkDevices += [virtioSocketNet] } I struggle to send/receive anything with it. Does anyone happen to have a working netcat/socat command that successfully sends anything? I use Linux as a guest system, and interfaces register as enp0s2, enp0s3
Aug ’22
Reply to TextKit2: Strange behaviour in directional text selection navigation
I'm sure it's a bug, the TextEdit app in macOS 12.0.1 maintains selection properly for the very same RTF file. The NSAttributedString itself looks ok at first glance: There's another interesting and unexpected (at least to me) behavior when setting the NSTextContentStorage.attributedString directly, the cursor (nor selection) is available at all and NSTextView is not editable let docURL = Bundle.main.url(forResource: "Text", withExtension: "rtf")! let attributedString = try! NSAttributedString(rtf: Data(contentsOf: docURL), documentAttributes: nil) try! textContentStorage.attributedString = attributedString
Topic: App & System Services SubTopic: Core OS Tags:
Nov ’21
Reply to Text with line numbers in TextKit 2
I don't know if this is recommended, however since nobody picked up this questions, this is what I do: I assume you use NSRulerView as an NSScrollView.verticalRulerView property. What I do, is override drawHashMarksAndLabels(in:) and use CoreText to draw numbers in the positions from NSTextLayoutManager class LineNumberRulerView: NSRulerView { private weak var textView: NSTextView? init(textView: NSTextView) { self.textView = textView super.init(scrollView: textView.enclosingScrollView!, orientation: .verticalRuler) clientView = textView.enclosingScrollView!.documentView NotificationCenter.default.addObserver(forName: NSView.frameDidChangeNotification, object: textView, queue: nil) { [weak self] _ in self?.needsDisplay = true } NotificationCenter.default.addObserver(forName: NSText.didChangeNotification, object: textView, queue: nil) { [weak self] _ in self?.needsDisplay = true } } public override func drawHashMarksAndLabels(in rect: NSRect) { guard let context = NSGraphicsContext.current?.cgContext, let textView = textView, let textLayoutManager = textView.textLayoutManager else { return } let relativePoint = self.convert(NSZeroPoint, from: textView) context.saveGState() context.textMatrix = CGAffineTransform(scaleX: 1, y: isFlipped ? -1 : 1) let attributes: [NSAttributedString.Key: Any] = [ .font: textView.font!, .foregroundColor: NSColor.secondaryLabelColor ] var lineNum = 1 textLayoutManager.enumerateTextLayoutFragments(from: nil, options: .ensuresLayout) { fragment in let fragmentFrame = fragment.layoutFragmentFrame for (subLineIdx, textLineFragment) in fragment.textLineFragments.enumerated() where subLineIdx == 0 { let locationForFirstCharacter = textLineFragment.locationForCharacter(at: 0) let ctline = CTLineCreateWithAttributedString(CFAttributedStringCreate(nil, "\(lineNum)" as CFString, attributes as CFDictionary)) context.textPosition = fragmentFrame.origin.applying(.init(translationX: 4, y: locationForFirstCharacter.y + relativePoint.y)) CTLineDraw(ctline, context) } lineNum += 1 return true } context.restoreGState() } }
Topic: App & System Services SubTopic: General Tags:
Nov ’21
Reply to Textkit2 NSTextView get cursor coordinate
Use NSTextView.textSelections, then use NSTextLayoutManager to get the position of a first selection NSTextRange and frame let selectionTextLocation = textSelections.flatMap(\.textRanges)[0].location next find a frame textLayoutManager.enumerateSegments(in: NSTextRange(location: selectionTextLocation), type: .standard, options: .upstreamAffinity) { _, segmentFrame, baselinePosition, _ in // use segmentFrame and baselinePosition to calculate insertion point location in NSTextContainer }
Topic: UI Frameworks SubTopic: General Tags:
Nov ’21
Reply to Can signalEnumerator work with anything but working set container?
I tested this with the sample app provided by Apple from https://developer.apple.com/documentation/fileprovider/macos_support/syncing_files_on_macos and as soon as I modify it to signal anything else than workingSet, signaling stop working. I tried to signal using fileproviderctl CLI tool, and the effect is the same. only working set container is triggered This problem is reported with number FB9673209
Topic: App & System Services SubTopic: Core OS Tags:
Oct ’21
Reply to Can NSTextView work with custom NSTextContentManager implementation? (TextKit2)
I don't think NSTextView / UITextView ever gets support for NSTextContentManager. That's one of the reasons I created STTextView, which is a custom TextKit 2 based text view implementation, you may want find useful in that regard.
Topic: UI Frameworks SubTopic: AppKit Tags:
Replies
Boosts
Views
Activity
Nov ’23
Reply to Where to find ShapeEdit sample code?
2023 is not the year of ShapeEdit. again
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
Jun ’23
Reply to Virtualization.Framework support for VZFileHandleNetworkDeviceAttachment
I did setup it succesfully with socketpair() like below: let socket_vector = Array<Int32>(unsafeUninitializedCapacity: 2) { buffer, initializedCount in guard Darwin.socketpair(AF_UNIX, SOCK_DGRAM, 0, buffer.baseAddress) == 0 else { assertionFailure(String(cString: Darwin.strerror(errno)!)) initializedCount = 0 return } initializedCount = 2 } for socket_descriptor in socket_vector { let virtioSocketNet = VZVirtioNetworkDeviceConfiguration() let fh = FileHandle(fileDescriptor: socket_descriptor) virtioSocketNet.attachment = VZFileHandleNetworkDeviceAttachment(fileHandle: fh) config.networkDevices += [virtioSocketNet] } I struggle to send/receive anything with it. Does anyone happen to have a working netcat/socat command that successfully sends anything? I use Linux as a guest system, and interfaces register as enp0s2, enp0s3
Replies
Boosts
Views
Activity
Aug ’22
Reply to Storyboard custom instantiated window controller
(deleted)
Topic: Programming Languages SubTopic: Swift Tags:
Replies
Boosts
Views
Activity
Jul ’22
Reply to TextKit2: Strange behaviour in directional text selection navigation
I'm sure it's a bug, the TextEdit app in macOS 12.0.1 maintains selection properly for the very same RTF file. The NSAttributedString itself looks ok at first glance: There's another interesting and unexpected (at least to me) behavior when setting the NSTextContentStorage.attributedString directly, the cursor (nor selection) is available at all and NSTextView is not editable let docURL = Bundle.main.url(forResource: "Text", withExtension: "rtf")! let attributedString = try! NSAttributedString(rtf: Data(contentsOf: docURL), documentAttributes: nil) try! textContentStorage.attributedString = attributedString
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Nov ’21
Reply to Text with line numbers in TextKit 2
I don't know if this is recommended, however since nobody picked up this questions, this is what I do: I assume you use NSRulerView as an NSScrollView.verticalRulerView property. What I do, is override drawHashMarksAndLabels(in:) and use CoreText to draw numbers in the positions from NSTextLayoutManager class LineNumberRulerView: NSRulerView { private weak var textView: NSTextView? init(textView: NSTextView) { self.textView = textView super.init(scrollView: textView.enclosingScrollView!, orientation: .verticalRuler) clientView = textView.enclosingScrollView!.documentView NotificationCenter.default.addObserver(forName: NSView.frameDidChangeNotification, object: textView, queue: nil) { [weak self] _ in self?.needsDisplay = true } NotificationCenter.default.addObserver(forName: NSText.didChangeNotification, object: textView, queue: nil) { [weak self] _ in self?.needsDisplay = true } } public override func drawHashMarksAndLabels(in rect: NSRect) { guard let context = NSGraphicsContext.current?.cgContext, let textView = textView, let textLayoutManager = textView.textLayoutManager else { return } let relativePoint = self.convert(NSZeroPoint, from: textView) context.saveGState() context.textMatrix = CGAffineTransform(scaleX: 1, y: isFlipped ? -1 : 1) let attributes: [NSAttributedString.Key: Any] = [ .font: textView.font!, .foregroundColor: NSColor.secondaryLabelColor ] var lineNum = 1 textLayoutManager.enumerateTextLayoutFragments(from: nil, options: .ensuresLayout) { fragment in let fragmentFrame = fragment.layoutFragmentFrame for (subLineIdx, textLineFragment) in fragment.textLineFragments.enumerated() where subLineIdx == 0 { let locationForFirstCharacter = textLineFragment.locationForCharacter(at: 0) let ctline = CTLineCreateWithAttributedString(CFAttributedStringCreate(nil, "\(lineNum)" as CFString, attributes as CFDictionary)) context.textPosition = fragmentFrame.origin.applying(.init(translationX: 4, y: locationForFirstCharacter.y + relativePoint.y)) CTLineDraw(ctline, context) } lineNum += 1 return true } context.restoreGState() } }
Topic: App & System Services SubTopic: General Tags:
Replies
Boosts
Views
Activity
Nov ’21
Reply to Textkit2 NSTextView get cursor coordinate
Use NSTextView.textSelections, then use NSTextLayoutManager to get the position of a first selection NSTextRange and frame let selectionTextLocation = textSelections.flatMap(\.textRanges)[0].location next find a frame textLayoutManager.enumerateSegments(in: NSTextRange(location: selectionTextLocation), type: .standard, options: .upstreamAffinity) { _, segmentFrame, baselinePosition, _ in // use segmentFrame and baselinePosition to calculate insertion point location in NSTextContainer }
Topic: UI Frameworks SubTopic: General Tags:
Replies
Boosts
Views
Activity
Nov ’21
Reply to AKAuthenticationError Code=-7089 when trying to setup sharing web credentials on macOS
It's still documented as available in macOS 12. How it can be "works as designed" and not supported at the same time? Reported as FB9728793
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Oct ’21
Reply to Can signalEnumerator work with anything but working set container?
I tested this with the sample app provided by Apple from https://developer.apple.com/documentation/fileprovider/macos_support/syncing_files_on_macos and as soon as I modify it to signal anything else than workingSet, signaling stop working. I tried to signal using fileproviderctl CLI tool, and the effect is the same. only working set container is triggered This problem is reported with number FB9673209
Topic: App & System Services SubTopic: Core OS Tags:
Replies
Boosts
Views
Activity
Oct ’21
Reply to Where to find ShapeEdit sample code?
maybe this year? who knows 🤞🤞
Topic: UI Frameworks SubTopic: SwiftUI Tags:
Replies
Boosts
Views
Activity
May ’21