Arrow
.arrow
I-beam
.iBeam
I-beam, vertical
.iBeamCursorForVerticalLayout
Pointing hand
.pointingHand
Crosshair
.crosshair
Contextual menu
.contextualMenu
Hover a card — your own pointer takes that shape. “The text cursor with bits at the top and bottom” is the I-beam.
Pointer (Cursor)
/ NSCursor · NSCursor.iBeam /
also called cursor, mouse pointer, mouse cursor
Every shape the Mac pointer takes has a real name. “The text cursor with little bits at the top and bottom” is the I-beam; the hand over a link is the pointing hand; the no-entry sign while dragging is operation not allowed. AppKit sets them through NSCursor, and views claim screen regions with cursor rects — when a pointer gets stuck in the wrong shape, a stale cursor rect is usually the culprit. (The rainbow “beach ball” is not an NSCursor: the system shows it when an app stops responding.)
Prompt — paste into your agent
Set the macOS pointer with NSCursor — e.g. NSCursor.iBeam.set() — or claim a region with NSView.addCursorRect(_:cursor:) inside resetCursorRects() (SwiftUI: View.pointerStyle(_:), macOS 15+). If the pointer stays stuck as the I-beam after the mouse leaves a text view, the stale cursor rect is the bug: call window.invalidateCursorRects(for: view) so the rects rebuild.
In code
The exact names this thing goes by in code — each row is one framework’s word for it. Use the row that matches your project (or paste it into your prompt).
| AppKit | NSCursor | |
| AppKit | NSCursor.iBeam | the text-editing pointer |
| AppKit | NSView.addCursorRect(_:cursor:) | claim a region; called from resetCursorRects() |
| SwiftUI | View.pointerStyle(_:) | macOS 15+ |
| CSS | cursor: text | the same shapes on the web: pointer, grab, not-allowed… |