Find Cursor Line # in a NSTextView

I need to find the linenumber the insertion point in on in an NSTextView
this code here works except for one situation :frowning:

fileprivate func cursorPosition(textView:NSTextView) -> Int {
	let layoutManager       = textView.layoutManager
	var lineNum             = 0
	var index               = 0
	var lineRange           = NSRange()
	let numberOfGlyphs      = layoutManager!.numberOfGlyphs
	let insertionPointIndex = textView.selectedRanges.first?.rangeValue.location

	while index < numberOfGlyphs {
		lineNum  += 1
		layoutManager!.lineFragmentRect(forGlyphAt: index, effectiveRange: &lineRange)
		if lineRange.contains(insertionPointIndex!) { break }
		index = NSMaxRange(lineRange)
	}
	return lineNum
}

The problem is if the caret in in the 1st postion of the LAST line, and that line is blank
then it reports the previous line. As the cursor is ā€œtechnicallyā€ past the last character in the file, but none of the metrics above seem to be able to indicate that

Added this code before the RETURN

if numberOfGlyphs == insertionPointIndex && numberOfGlyphs>0 {
    let lastChar = layoutManager!.cgGlyph(at: insertionPointIndex!-1)
    if lastChar == 65535 { lineNum+=1 }
}

yer welcome for the hint :slight_smile:

I said THANK YOU on the forum didnā€™t I???
If not, then THANK YOU! :sunglasses:

On discord I think you did

Its still and odd edge case that youd think would be easier to detect than this but it is what it is :man_shrugging:

I agreeā€¦ but at least our back and forth earlier today lead to a solutionā€¦ so Thanks again.

This is all going toward improvements in the Morpho UI