Skip to content
Snippets Groups Projects
Commit c1c79836 authored by George Nachman's avatar George Nachman
Browse files

Merge branch 'master' of https://github.com/gnachman/iTerm2

parents 427e8e50 ea39940f
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -630,7 +630,6 @@
1D6C4D5A122329F000E0AA3E /* ColorPresets.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1D6C4D59122329F000E0AA3E /* ColorPresets.plist */; };
1D6C50A71226EEFB00E0AA3E /* ProfileListView.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D6C50A51226EEFB00E0AA3E /* ProfileListView.h */; };
1D6ED85619AEA20D005A7799 /* URLAction.h in Headers */ = {isa = PBXBuildFile; fileRef = A6CFDAD0185D2587005DC94B /* URLAction.h */; };
1D6ED85719AEA20D005A7799 /* AsyncHostLookupController.h in Headers */ = {isa = PBXBuildFile; fileRef = A6CFDAD5185D53C2005DC94B /* AsyncHostLookupController.h */; };
1D6ED85819AEA20D005A7799 /* LineBufferPosition.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D78B55C183EE1C000014D49 /* LineBufferPosition.h */; };
1D6ED85919AEA20D005A7799 /* FindContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 1D53FD13181C4B4B00524D4F /* FindContext.h */; };
1D6ED85A19AEA20D005A7799 /* ProfilesTerminalPreferencesViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = A6A2698D1900F95D00437DA9 /* ProfilesTerminalPreferencesViewController.h */; };
Loading
Loading
@@ -2017,7 +2016,6 @@
A6C763011B45C52B00E3C992 /* TransferrableFileMenuItemViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = A68A30D9186D1429007F550F /* TransferrableFileMenuItemViewController.m */; };
A6C763021B45C52B00E3C992 /* VT100RemoteHost.m in Sources */ = {isa = PBXBuildFile; fileRef = A68A30DA186D1429007F550F /* VT100RemoteHost.m */; };
A6C763031B45C52B00E3C992 /* VT100WorkingDirectory.m in Sources */ = {isa = PBXBuildFile; fileRef = A68A30DB186D1429007F550F /* VT100WorkingDirectory.m */; };
A6C763051B45C52B00E3C992 /* AsyncHostLookupController.m in Sources */ = {isa = PBXBuildFile; fileRef = A6CFDAD6185D53C2005DC94B /* AsyncHostLookupController.m */; };
A6C763061B45C52B00E3C992 /* BackgroundThread.m in Sources */ = {isa = PBXBuildFile; fileRef = 1DA26ABF15007507004B5792 /* BackgroundThread.m */; };
A6C763071B45C52B00E3C992 /* CapturedOutput.m in Sources */ = {isa = PBXBuildFile; fileRef = A67F57D31B11882900B4F135 /* CapturedOutput.m */; };
A6C763091B45C52B00E3C992 /* iTermCommandHistoryCommandUseMO+Addtions.m in Sources */ = {isa = PBXBuildFile; fileRef = A6E7474C188C6394005355CF /* iTermCommandHistoryCommandUseMO+Addtions.m */; };
Loading
Loading
@@ -2317,7 +2315,6 @@
A6CEDA6119988A7300BB57EC /* LogoShadow.png in Resources */ = {isa = PBXBuildFile; fileRef = A6CEDA5E19988A7300BB57EC /* LogoShadow.png */; };
A6CEDA6219988A7300BB57EC /* LogoShadow.png in Resources */ = {isa = PBXBuildFile; fileRef = A6CEDA5E19988A7300BB57EC /* LogoShadow.png */; };
A6CFDAD2185D2587005DC94B /* URLAction.h in Headers */ = {isa = PBXBuildFile; fileRef = A6CFDAD0185D2587005DC94B /* URLAction.h */; };
A6CFDAD7185D53C2005DC94B /* AsyncHostLookupController.h in Headers */ = {isa = PBXBuildFile; fileRef = A6CFDAD5185D53C2005DC94B /* AsyncHostLookupController.h */; };
A6D22A431BC8BE6B004084E0 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A6D22A411BC8BE6B004084E0 /* Model.xcdatamodeld */; };
A6D22A441BC8BE6B004084E0 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A6D22A411BC8BE6B004084E0 /* Model.xcdatamodeld */; };
A6D22A451BC8BE6B004084E0 /* Model.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = A6D22A411BC8BE6B004084E0 /* Model.xcdatamodeld */; };
Loading
Loading
@@ -3837,8 +3834,6 @@
A6CEDA5E19988A7300BB57EC /* LogoShadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = LogoShadow.png; path = images/LogoParts/LogoShadow.png; sourceTree = "<group>"; };
A6CFDAD0185D2587005DC94B /* URLAction.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = URLAction.h; sourceTree = "<group>"; tabWidth = 4; };
A6CFDAD1185D2587005DC94B /* URLAction.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = URLAction.m; sourceTree = "<group>"; tabWidth = 4; };
A6CFDAD5185D53C2005DC94B /* AsyncHostLookupController.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = AsyncHostLookupController.h; sourceTree = "<group>"; tabWidth = 4; };
A6CFDAD6185D53C2005DC94B /* AsyncHostLookupController.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = AsyncHostLookupController.m; sourceTree = "<group>"; tabWidth = 4; };
A6D22A421BC8BE6B004084E0 /* Model.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Model.xcdatamodel; sourceTree = "<group>"; };
A6D22B431BC9D368004084E0 /* iTermShellHistoryTest.m */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.objc; path = iTermShellHistoryTest.m; sourceTree = "<group>"; };
A6DF401A1897607E00F05947 /* NSTextField+iTerm.h */ = {isa = PBXFileReference; fileEncoding = 4; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = "NSTextField+iTerm.h"; sourceTree = "<group>"; tabWidth = 4; };
Loading
Loading
@@ -4202,7 +4197,6 @@
A66DB8341C8E4CBB00233E88 /* iTermOpenQuicklyCommands.h */,
A6E7138C18F26A91008D94DD /* AppearancePreferencesViewController.h */,
1D2560A813EE60E4006B35CD /* ArrangementPreviewView.h */,
A6CFDAD5185D53C2005DC94B /* AsyncHostLookupController.h */,
1DE214DF128212EE004E3ADF /* Autocomplete.h */,
1DA26ABE15007507004B5792 /* BackgroundThread.h */,
1D9DCC0C142D7F5F0016228A /* BellTrigger.h */,
Loading
Loading
@@ -5630,7 +5624,6 @@
A6E761631D39D216005C0E5C /* iTermMutableAttributedStringBuilder.m */,
539325EE1DD66EF100CABCEF /* iTermPreciseTimer.h */,
539325EF1DD66EF100CABCEF /* iTermPreciseTimer.m */,
A6CFDAD6185D53C2005DC94B /* AsyncHostLookupController.m */,
1DA26ABF15007507004B5792 /* BackgroundThread.m */,
A67F57D31B11882900B4F135 /* CapturedOutput.m */,
1D53FD14181C4B4B00524D4F /* FindContext.m */,
Loading
Loading
@@ -6134,7 +6127,6 @@
buildActionMask = 2147483647;
files = (
1D6ED85619AEA20D005A7799 /* URLAction.h in Headers */,
1D6ED85719AEA20D005A7799 /* AsyncHostLookupController.h in Headers */,
1D6ED85819AEA20D005A7799 /* LineBufferPosition.h in Headers */,
1D6ED85919AEA20D005A7799 /* FindContext.h in Headers */,
1D6ED85A19AEA20D005A7799 /* ProfilesTerminalPreferencesViewController.h in Headers */,
Loading
Loading
@@ -6478,7 +6470,6 @@
buildActionMask = 2147483647;
files = (
A6CFDAD2185D2587005DC94B /* URLAction.h in Headers */,
A6CFDAD7185D53C2005DC94B /* AsyncHostLookupController.h in Headers */,
1D78B55E183EE1C000014D49 /* LineBufferPosition.h in Headers */,
A65B72781B2BF2D200F947A7 /* iTermProfilesPanel.h in Headers */,
1D53FD15181C4B4B00524D4F /* FindContext.h in Headers */,
Loading
Loading
@@ -8485,7 +8476,6 @@
A6C7637C1B45C52B00E3C992 /* ProfilesColorsPreferencesViewController.m in Sources */,
A6C763E21B45C6DD00E3C992 /* PSMTabDragWindow.m in Sources */,
A6936B5A1D2F5D1A00521B04 /* iTermHotkeyPreferencesModel.m in Sources */,
A6C763051B45C52B00E3C992 /* AsyncHostLookupController.m in Sources */,
A6C763DA1B45C6DD00E3C992 /* NSWindow+PSM.m in Sources */,
A6C763121B45C52B00E3C992 /* iTermImageInfo.m in Sources */,
A6C7636E1B45C52B00E3C992 /* iTermPreferences.m in Sources */,
//
// AsyncHostLookupController.h
// iTerm
//
// Created by George Nachman on 12/14/13.
//
//
#import <Foundation/Foundation.h>
// Verify whether host names are valid. Runs in a separate thread and provides asynchronous results.
// Caches very aggressively.
@interface AsyncHostLookupController : NSObject
+ (instancetype)sharedInstance;
// Calls back to completion indicating whether |host| is an extant hostname. The BOOL is YES if the
// hostname resolves. |host| is passed as the second argument to completion. Does not block.
- (void)getAddressForHost:(NSString *)host
completion:(void (^)(BOOL, NSString*))completion;
// Cancels the lookup for |hostname|.
- (void)cancelRequestForHostname:(NSString *)hostname;
@end
//
// AsyncHostLookupController.m
// iTerm
//
// Created by George Nachman on 12/14/13.
//
//
#import "AsyncHostLookupController.h"
#import "DebugLogging.h"
#import "iTermAdvancedSettingsModel.h"
#include <netdb.h>
@implementation AsyncHostLookupController {
// Created at initialization and used to perform blocking gethostbyname calls.
dispatch_queue_t _queue;
// Set of hostnames waiting to be looked up. If a hostname is removed from
// this set then it won't be looked up when its turn comes around.
NSMutableSet *_pending;
// Maps hostname -> @YES or @NO, indicating if it resolved.
NSMutableDictionary *_cache;
}
+ (instancetype)sharedInstance {
static AsyncHostLookupController *instance;
static dispatch_once_t once;
dispatch_once(&once, ^{
instance = [[self alloc] init];
});
return instance;
}
- (instancetype)init {
self = [super init];
if (self) {
_queue = dispatch_queue_create("AsyncHostLookupControllerQueue", NULL);
_pending = [[NSMutableSet alloc] init];
_cache = [[NSMutableDictionary alloc] init];
}
return self;
}
- (void)dealloc {
// The logic for cleaning up the dispatch queue isn't written, so just make sure the singleton
// never gets dealloced.
assert(false);
[super dealloc];
}
- (void)getAddressForHost:(NSString *)hostname
completion:(void (^)(BOOL, NSString *))completion {
if (![iTermAdvancedSettingsModel performDNSLookups]) {
completion(YES, hostname);
return;
}
NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];
@synchronized(self) {
if ([_pending containsObject:hostname]) {
DLog(@"Already pending %@", hostname);
return;
}
NSNumber *okNumber = _cache[hostname];
if (okNumber) {
completion([okNumber boolValue], hostname);
return;
}
[_pending addObject:hostname];
}
dispatch_async(_queue, ^() {
@synchronized(self) {
if (![_pending containsObject:hostname]) {
DLog(@"Abort nslookup for %@", hostname);
return;
}
}
BOOL shouldCache;
BOOL ok = [self hostnameHasAddress:[hostname UTF8String] shouldCache:&shouldCache];
if (shouldCache) {
@synchronized(self) {
_cache[hostname] = @(ok);
}
}
dispatch_async(dispatch_get_main_queue(), ^() {
@synchronized(self) {
if (![_pending containsObject:hostname]) {
DLog(@"Finished nslookup but don't call block for %@", hostname);
return;
}
[_pending removeObject:hostname];
}
DLog(@"Host %@: %@", hostname, ok ? @"OK" : @"Unknown");
completion(ok, hostname);
});
});
DLog(@"Blocked main thread for %f sec", [NSDate timeIntervalSinceReferenceDate] - start);
}
- (void)cancelRequestForHostname:(NSString *)hostname {
@synchronized(self) {
[_pending removeObject:hostname];
}
}
- (BOOL)hostnameHasAddress:(const char *)hostname shouldCache:(BOOL *)shouldCache {
struct addrinfo *servinfo;
int status = getaddrinfo(hostname, NULL, NULL, &servinfo);
if (status == 0) {
freeaddrinfo(servinfo);
}
// Don't cache temporary failures
*shouldCache = (status != EAI_AGAIN);
return status == 0;
}
@end
#import "PTYTextView.h"
 
#import "AsyncHostLookupController.h"
#import "charmaps.h"
#import "FileTransferManager.h"
#import "FontSizeEstimator.h"
Loading
Loading
@@ -96,10 +95,6 @@ static const NSUInteger kDragPaneModifiers = (NSAlternateKeyMask | NSCommandKeyM
static const NSUInteger kRectangularSelectionModifiers = (NSCommandKeyMask | NSAlternateKeyMask);
static const NSUInteger kRectangularSelectionModifierMask = (kRectangularSelectionModifiers | NSControlKeyMask);
 
// Notifications posted when hostname lookups finish. Notifications are used to
// avoid dangling references.
static NSString *const kHostnameLookupFailed = @"kHostnameLookupFailed";
static NSString *const kHostnameLookupSucceeded = @"kHostnameLookupSucceeded";
static PTYTextView *gCurrentKeyEventTextView; // See comment in -keyDown:
 
// Minimum distance that the mouse must move before a cmd+drag will be
Loading
Loading
@@ -119,9 +114,6 @@ static const int kDragThreshold = 3;
NSMenuDelegate,
NSPopoverDelegate>
 
// Set the hostname this view is currently waiting for AsyncHostLookupController to finish looking
// up.
@property(nonatomic, copy) NSString *currentUnderlineHostname;
@property(nonatomic, retain) iTermSelection *selection;
@property(nonatomic, retain) iTermSemanticHistoryController *semanticHistoryController;
@property(nonatomic, retain) iTermFindCursorView *findCursorView;
Loading
Loading
@@ -309,14 +301,6 @@ static const int kDragThreshold = 3;
selector:@selector(_pointerSettingsChanged:)
name:kPointerPrefsChangedNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(hostnameLookupFailed:)
name:kHostnameLookupFailed
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(hostnameLookupSucceeded:)
name:kHostnameLookupSucceeded
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(imageDidLoad:)
name:iTermImageDidLoad
Loading
Loading
@@ -400,10 +384,6 @@ static const int kDragThreshold = 3;
[threeFingerTapGestureRecognizer_ disconnectTarget];
[threeFingerTapGestureRecognizer_ release];
 
if (self.currentUnderlineHostname) {
[[AsyncHostLookupController sharedInstance] cancelRequestForHostname:self.currentUnderlineHostname];
}
[_currentUnderlineHostname release];
_indicatorsHelper.delegate = nil;
[_indicatorsHelper release];
_selectionScrollHelper.delegate = nil;
Loading
Loading
@@ -1115,7 +1095,6 @@ static const int kDragThreshold = 3;
// Draw the cursor filled in when we're inactive if there's a popup open or key focus was stolen.
_drawingHelper.shouldDrawFilledInCursor = ([self.delegate textViewShouldDrawFilledInCursor] || _keyFocusStolenCount);
_drawingHelper.isFrontTextView = (self == [[iTermController sharedInstance] frontTextView]);
_drawingHelper.haveUnderlinedHostname = (self.currentUnderlineHostname != nil);
_drawingHelper.transparencyAlpha = [self transparencyAlpha];
_drawingHelper.now = [NSDate timeIntervalSinceReferenceDate];
_drawingHelper.drawMarkIndicators = [_delegate textViewShouldShowMarkIndicators];
Loading
Loading
@@ -1772,10 +1751,6 @@ static const int kDragThreshold = 3;
}
_drawingHelper.underlinedRange =
VT100GridAbsWindowedRangeMake(VT100GridAbsCoordRangeMake(-1, -1, -1, -1), 0, 0);
if (self.currentUnderlineHostname) {
[[AsyncHostLookupController sharedInstance] cancelRequestForHostname:self.currentUnderlineHostname];
}
self.currentUnderlineHostname = nil;
[self setNeedsDisplay:YES]; // It would be better to just display the underlined/formerly underlined area.
}
 
Loading
Loading
@@ -1809,29 +1784,9 @@ static const int kDragThreshold = 3;
 
if (action.actionType == kURLActionOpenURL) {
NSURL *url = [NSURL URLWithUserSuppliedString:action.string];
if (![url.host isEqualToString:self.currentUnderlineHostname]) {
if (self.currentUnderlineHostname) {
[[AsyncHostLookupController sharedInstance] cancelRequestForHostname:self.currentUnderlineHostname];
}
if (url && url.host) {
self.currentUnderlineHostname = url.host;
[[AsyncHostLookupController sharedInstance] getAddressForHost:url.host
completion:^(BOOL ok, NSString *hostname) {
if (!ok) {
[[NSNotificationCenter defaultCenter] postNotificationName:kHostnameLookupFailed
object:hostname];
} else {
[[NSNotificationCenter defaultCenter] postNotificationName:kHostnameLookupSucceeded
object:hostname];
}
}];
}
if (url && url.host) {
[self setNeedsDisplay:YES];
}
} else {
if (self.currentUnderlineHostname) {
[[AsyncHostLookupController sharedInstance] cancelRequestForHostname:self.currentUnderlineHostname];
}
self.currentUnderlineHostname = nil;
}
} else {
[self removeUnderline];
Loading
Loading
@@ -6188,23 +6143,6 @@ static double EuclideanDistance(NSPoint p1, NSPoint p2) {
}];
}
 
- (void)hostnameLookupFailed:(NSNotification *)notification {
if ([[notification object] isEqualToString:self.currentUnderlineHostname]) {
self.currentUnderlineHostname = nil;
[self removeUnderline];
_drawingHelper.underlinedRange =
VT100GridAbsWindowedRangeMake(VT100GridAbsCoordRangeMake(-1, -1, -1, -1), 0, 0);
[self setNeedsDisplay:YES];
}
}
- (void)hostnameLookupSucceeded:(NSNotification *)notification {
if ([[notification object] isEqualToString:self.currentUnderlineHostname]) {
self.currentUnderlineHostname = nil;
[self setNeedsDisplay:YES];
}
}
- (void)imageDidLoad:(NSNotification *)notification {
if ([self imageIsVisible:notification.object]) {
[self setNeedsDisplay:YES];
Loading
Loading
Loading
Loading
@@ -161,7 +161,6 @@
+ (BOOL)useColorfgbgFallback;
+ (BOOL)promptForPasteWhenNotAtPrompt;
+ (void)setPromptForPasteWhenNotAtPrompt:(BOOL)value;
+ (BOOL)performDNSLookups;
+ (BOOL)zeroWidthSpaceAdvancesCursor;
+ (BOOL)darkThemeHasBlackTitlebar;
+ (BOOL)fontChangeAffectsBroadcastingSessions;
Loading
Loading
Loading
Loading
@@ -182,7 +182,6 @@ DEFINE_BOOL(ignoreHardNewlinesInURLs, NO, @"Semantic History: Ignore hard newlin
DEFINE_STRING(URLCharacterSet, @".?\\/:;%=&_-,+~#@!*'(())|[]", @"Semantic History: Non-alphanumeric characters considered part of a URL for Semantic History.\nLetters and numbers are always considered part of the URL. These non-alphanumeric characters are used in addition for the purposes of figuring out where a URL begins and ends.");
DEFINE_INT(maxSemanticHistoryPrefixOrSuffix, 2000, @"Semantic History: Maximum number of bytes of text before and after click location to take into account.\nThis also limits the size of the \\3 and \\4 substitutions.");
DEFINE_STRING(pathsToIgnore, @"", @"Semantic History: Paths to ignore for Semantic History.\nSeparate paths with a comma. Any file under one of these paths will not be openable with Semantic History.");
DEFINE_BOOL(performDNSLookups, NO, @"Semantic History: Perform DNS lookups to check if URLs are valid?\nWhen enabled, the name under the mouse will be resolved with DNS to determine if it is a clickable link.");
DEFINE_BOOL(showYellowMarkForJobStoppedBySignal, YES, @"Semantic History: Use a yellow for a Shell Integration prompt mark when the job is stopped by a signal.");
 
#pragma mark - Debugging
Loading
Loading
Loading
Loading
@@ -71,9 +71,7 @@
BOOL hasModifierActivation = [iTermProfilePreferences boolForKey:KEY_HOTKEY_ACTIVATE_WITH_MODIFIER inProfile:profile];
iTermHotKeyModifierActivation modifierActivation = [iTermProfilePreferences unsignedIntegerForKey:KEY_HOTKEY_MODIFIER_ACTIVATION inProfile:profile];
NSArray<iTermShortcut *> *shortcuts = [[iTermShortcut shortcutsForProfile:profile] filteredArrayUsingBlock:^BOOL(iTermShortcut *anObject) {
return anObject.isAssigned;
}];
NSArray<iTermShortcut *> *shortcuts = [iTermShortcut shortcutsForProfile:profile];
if (!shortcuts.count) {
DLog(@"None of the shortcuts in profile %@ are assigned", profile[KEY_NAME]);
 
Loading
Loading
Loading
Loading
@@ -39,7 +39,7 @@ extern CGFloat kShortcutPreferredHeight;
// Takes a dictionary like the one produced by -[iTermShortcut dictionaryValue].
+ (instancetype)shortcutWithDictionary:(NSDictionary *)dictionary;
 
// Returns all shortcuts for a profile.
// Returns assigned shortcuts for a profile.
+ (NSArray<iTermShortcut *> *)shortcutsForProfile:(Profile *)profile;
 
// Returns the shortcut for a keydown event.
Loading
Loading
Loading
Loading
@@ -94,7 +94,9 @@ const NSEventModifierFlags kHotKeyModifierMask = (NSCommandKeyMask |
[result addObjectsFromArray:[additional mapWithBlock:^id(NSDictionary *anObject) {
return [self shortcutWithDictionary:anObject];
}]];
return result;
return [result filteredArrayUsingBlock:^BOOL(iTermShortcut *anObject) {
return anObject.isAssigned;
}];
}
 
+ (instancetype)shortcutWithDictionary:(NSDictionary *)dictionary {
Loading
Loading
Loading
Loading
@@ -159,9 +159,6 @@
// TODO: This might be the same as textViewIsActiveSession.
@property(nonatomic, assign) BOOL isFrontTextView;
 
// Is there an underlined hostname?
@property(nonatomic, assign) BOOL haveUnderlinedHostname;
// Background transparency level. Should be 1 if transparency is off for this view.
@property(nonatomic, assign) double transparencyAlpha;
 
Loading
Loading
Loading
Loading
@@ -110,7 +110,6 @@ typedef struct iTermTextColorContext {
NSColor *backgroundColor;
NSColor *previousBackgroundColor;
CGFloat minimumContrast;
BOOL haveUnderlinedHostname;
NSColor *previousForegroundColor;
} iTermTextColorContext;
 
Loading
Loading
@@ -1555,7 +1554,7 @@ static NSColor *iTermTextDrawingHelperGetTextColor(screen_char_t *c,
// Black-on-yellow search result.
rawColor = [NSColor colorWithCalibratedRed:0 green:0 blue:0 alpha:1];
context->havePreviousCharacterAttributes = NO;
} else if (inUnderlinedRange && !context->haveUnderlinedHostname) {
} else if (inUnderlinedRange) {
// Blue link text.
rawColor = [context->colorMap colorForKey:kColorMapLink];
context->havePreviousCharacterAttributes = NO;
Loading
Loading
@@ -1865,7 +1864,6 @@ static BOOL iTermTextDrawingHelperIsCharacterDrawable(screen_char_t *c,
.havePreviousCharacterAttributes = NO,
.backgroundColor = backgroundColor,
.minimumContrast = _minimumContrast,
.haveUnderlinedHostname = _haveUnderlinedHostname,
.previousForegroundColor = nil,
};
NSDictionary *previousImageAttributes = nil;
Loading
Loading
Loading
Loading
@@ -28,7 +28,8 @@ set -x
# todo: git pull origin master
rm -rf build/Nightly/iTerm2.app
make clean || die "Make clean failed"
security unlock-keychain -p "$ITERM_KEYCHAIN_PASSWORD" "$ITERM_KEYCHAIN"
#security unlock-keychain -p "$ITERM_KEYCHAIN_PASSWORD" "$ITERM_KEYCHAIN"
security unlock-keychain -p "$ITERM_KEYCHAIN_PASSWORD"
make Nightly || die "Nightly build failed"
tools/sign.sh
COMPACTDATE=$(date +"%Y%m%d")-nightly
Loading
Loading
3.1.0
3.1.%(extra)s
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment