Skip to content

Commit

Permalink
Merge ae3ace1 into d63e973
Browse files Browse the repository at this point in the history
  • Loading branch information
mmaxim committed May 15, 2016
2 parents d63e973 + ae3ace1 commit 9df56c7
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 22 deletions.
63 changes: 41 additions & 22 deletions sources/PTYTextView.m
Original file line number Diff line number Diff line change
Expand Up @@ -1577,7 +1577,7 @@ - (void)rightMouseDragged:(NSEvent *)event
[super rightMouseDragged:event];
}

- (BOOL)scrollWheelShouldSendArrowForEvent:(NSEvent *)event at:(NSPoint)point {
- (BOOL)scrollWheelShouldSendDataForEvent:(NSEvent *)event at:(NSPoint)point {
NSRect liveRect = [self liveRect];
if (!NSPointInRect(point, liveRect)) {
return NO;
Expand All @@ -1591,43 +1591,62 @@ - (BOOL)scrollWheelShouldSendArrowForEvent:(NSEvent *)event at:(NSPoint)point {
return NO;
}
BOOL alternateMouseScroll = [iTermAdvancedSettingsModel alternateMouseScroll];
NSString *alternateMouseScrollEscapeUp = [iTermAdvancedSettingsModel alternateMouseScrollEscapeUp];
NSString *alternateMouseScrollEscapeDown = [iTermAdvancedSettingsModel alternateMouseScrollEscapeDown];
BOOL showingAlternateScreen = [self.dataSource showingAlternateScreen];
if (!alternateMouseScroll && showingAlternateScreen) {
[_altScreenMouseScrollInferer scrollWheel:event];
}
if (!alternateMouseScroll) {
if (!showingAlternateScreen) {
return NO;
}
if (!showingAlternateScreen) {

if (alternateMouseScroll || alternateMouseScrollEscapeUp.length ||
alternateMouseScrollEscapeDown.length) {
return YES;
} else {
[_altScreenMouseScrollInferer scrollWheel:event];
return NO;
}
return YES;
}

- (NSData *) dataToSendForScrollEvent:(NSEvent *)event deltaY:(CGFloat*)deltaY {

BOOL use_arrows = [iTermAdvancedSettingsModel alternateMouseScroll];
NSString *e_up = [iTermAdvancedSettingsModel alternateMouseScrollEscapeUp];
NSString *e_down = [iTermAdvancedSettingsModel alternateMouseScrollEscapeDown];

PTYScrollView *scrollView = (PTYScrollView *)self.enclosingScrollView;
*deltaY = [scrollView accumulateVerticalScrollFromEvent:event];
bool down = (*deltaY < 0);

if (use_arrows) {
return (down) ? [_dataSource.terminal.output keyArrowDown:event.modifierFlags] :
[_dataSource.terminal.output keyArrowUp:event.modifierFlags];
} else if (!down && e_up.length) {
return [ [ e_up stringByExpandingVimSpecialCharacters ] dataUsingEncoding:_delegate.textViewEncoding];
} else if (down && e_down.length) {
return [ [ e_down stringByExpandingVimSpecialCharacters ] dataUsingEncoding:_delegate.textViewEncoding];
} else {
return nil;
}
}

- (void)scrollWheel:(NSEvent *)event {
DLog(@"scrollWheel:%@", event);

NSPoint point = [self convertPoint:[event locationInWindow] fromView:nil];
if ([self scrollWheelShouldSendDataForEvent:event at:point]) {
DLog(@"Scroll wheel sending data");

if ([self scrollWheelShouldSendArrowForEvent:event at:point]) {
DLog(@"Scroll wheel sending arrow key");

PTYScrollView *scrollView = (PTYScrollView *)self.enclosingScrollView;
CGFloat deltaY = [scrollView accumulateVerticalScrollFromEvent:event];

NSData *arrowKeyData = nil;
if (deltaY > 0) {
arrowKeyData = [_dataSource.terminal.output keyArrowUp:event.modifierFlags];
} else if (deltaY < 0) {
arrowKeyData = [_dataSource.terminal.output keyArrowDown:event.modifierFlags];
}
if (arrowKeyData) {
CGFloat deltaY = 0;
NSData *payload = [ self dataToSendForScrollEvent:event deltaY:&deltaY];
if (payload) {
for (int i = 0; i < ceil(fabs(deltaY)); i++) {
[_delegate writeTask:arrowKeyData];
[_delegate writeTask:payload];
}
return;
}
} else if (![self reportMouseEvent:event]) {
}

if (![self reportMouseEvent:event]) {
[super scrollWheel:event];
}
}
Expand Down
2 changes: 2 additions & 0 deletions sources/iTermAdvancedSettingsModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
+ (int)minCompactTabWidth;
+ (int)optimumTabWidth;
+ (BOOL)alternateMouseScroll;
+ (NSString *)alternateMouseScrollEscapeUp;
+ (NSString *)alternateMouseScrollEscapeDown;
+ (BOOL)traditionalVisualBell;
+ (double)hotkeyTermAnimationDuration;
+ (BOOL)hotkeyWindowFloatsAboveOtherWindows;
Expand Down
6 changes: 6 additions & 0 deletions sources/iTermAdvancedSettingsModel.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ + (NSString *)name { \
DEFINE_BOOL(allowDragOfTabIntoNewWindow, YES, @"Tabs: Allow a tab to be dragged and dropped outside any existing tab bar to create a new window.");

#pragma mark Mouse
DEFINE_STRING(alternateMouseScrollEscapeUp, @"",
@"Mouse: Scroll wheel sends the specified escape sequence in alternate screen mode (up)\n"
@"The sequence should use Vim syntax for the input format, such as \\e for escape.");
DEFINE_STRING(alternateMouseScrollEscapeDown, @"",
@"Mouse: Scroll wheel sends the specified escape sequence in alternate screen mode (down)\n"
@"The sequence should use Vim syntax for the input format, such as \\e for escape.");
DEFINE_BOOL(alternateMouseScroll, NO, @"Mouse: Scroll wheel sends arrow keys when in alternate screen mode.");
DEFINE_BOOL(pinchToChangeFontSizeDisabled, NO, @"Mouse: Disable changing font size in response to a pinch gesture.");
DEFINE_BOOL(useSystemCursorWhenPossible, NO, @"Mouse: Use system cursor icons when possible.");
Expand Down

0 comments on commit 9df56c7

Please sign in to comment.