diff --git a/sources/PTYSession/PTYSession.m b/sources/PTYSession/PTYSession.m index 2045d88864..760c593340 100644 --- a/sources/PTYSession/PTYSession.m +++ b/sources/PTYSession/PTYSession.m @@ -17115,17 +17115,32 @@ - (VT100GridRange)screenRangeOfVisibleLines { - (void)screenSetPointerShape:(NSString *)pointerShape { NSDictionary *cursors = @{ - @"X_cursor": ^{ return [NSCursor arrowCursor]; }, + @"X_cursor": ^{ return [NSCursor operationNotAllowedCursor]; }, @"arrow": ^{ return[NSCursor arrowCursor]; }, @"based_arrow_down": ^{ return[NSCursor resizeDownCursor]; }, @"based_arrow_up": ^{ return[NSCursor resizeUpCursor]; }, @"cross": ^{ return[NSCursor crosshairCursor]; }, @"cross_reverse": ^{ return[NSCursor crosshairCursor]; }, @"crosshair": ^{ return[NSCursor crosshairCursor]; }, + @"fleur": ^{ return[NSCursor openHandCursor]; }, @"hand1": ^{ return[NSCursor pointingHandCursor]; }, @"hand2": ^{ return[NSCursor pointingHandCursor]; }, @"left_ptr": ^{ return[NSCursor arrowCursor]; }, @"left_side": ^{ return[NSCursor resizeLeftCursor]; }, + @"minus": ^{ + if (@available(macOS 15.0, *)) { + return [NSCursor zoomOutCursor]; + } else { + return [NSCursor crosshairCursor]; + } + }, + @"plus": ^{ + if (@available(macOS 15.0, *)) { + return [NSCursor zoomInCursor]; + } else { + return [NSCursor crosshairCursor]; + } + }, @"right_side": ^{ return[NSCursor resizeRightCursor]; }, @"sb_h_double_arrow": ^{ return[NSCursor resizeLeftRightCursor]; }, @"sb_left_arrow": ^{ return[NSCursor resizeLeftCursor]; }, @@ -17133,6 +17148,7 @@ - (void)screenSetPointerShape:(NSString *)pointerShape { @"sb_up_arrow": ^{ return[NSCursor resizeUpCursor]; }, @"sb_v_double_arrow": ^{ return[NSCursor resizeUpDownCursor]; }, @"tcross": ^{ return[NSCursor crosshairCursor]; }, + @"watch": ^{ return[NSCursor arrowCursor]; }, @"xterm": ^{ return [iTermMouseCursor mouseCursorOfType:iTermMouseCursorTypeIBeam]; }, }; NSCursor *(^f)(void) = cursors[pointerShape]; diff --git a/sources/TerminalView/PTYTextView+ARC.m b/sources/TerminalView/PTYTextView+ARC.m index d551c9ff27..66a7d84c64 100644 --- a/sources/TerminalView/PTYTextView+ARC.m +++ b/sources/TerminalView/PTYTextView+ARC.m @@ -731,7 +731,13 @@ - (BOOL)updateCursor:(NSEvent *)event action:(URLAction *)action { changed = [self setCursor:[NSCursor arrowCursor]]; } else if ([_mouseHandler mouseReportingAllowedForEvent:event] && [_mouseHandler terminalWantsMouseReports]) { - changed = [self setCursor:[iTermMouseCursor mouseCursorOfType:iTermMouseCursorTypeIBeamWithCircle]]; + // If the app explicitly requested a pointer shape via OSC 22, honor it + // even while mouse reporting is enabled: an app that sets pointer + // shapes is mouse-aware, and hover-driven shapes (e.g. Turbo Vision, + // vim mouse support) inherently require any-motion reporting. The + // IBeamWithCircle affordance remains the fallback when no shape was + // requested. + changed = [self setCursor:self.delegate.textViewDefaultPointer ?: [iTermMouseCursor mouseCursorOfType:iTermMouseCursorTypeIBeamWithCircle]]; } else if ([self contextMenu:_contextMenuHelper offscreenCommandLineForClickAt:event.locationInWindow]) { changed = [self setCursor:[NSCursor arrowCursor]]; } else if ([self mouseIsOverButtonInEvent:event]) {