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