Skip to content

Commit

Permalink
🔖 Release Loop 1.0.0-beta.8
Browse files Browse the repository at this point in the history
  • Loading branch information
MrKai77 authored Sep 5, 2023
2 parents 4c44de7 + c91104e commit 1a7101c
Show file tree
Hide file tree
Showing 37 changed files with 810 additions and 364 deletions.
70 changes: 45 additions & 25 deletions Loop.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@
A80397CF2A9327FA006D2796 /* NSApplication+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80397CE2A9327FA006D2796 /* NSApplication+Extensions.swift */; };
A80397D22A93287C006D2796 /* MenuBarExtraAccess in Frameworks */ = {isa = PBXBuildFile; productRef = A80397D12A93287C006D2796 /* MenuBarExtraAccess */; };
A80397D42A932993006D2796 /* MenubarIconView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80397D32A932993006D2796 /* MenubarIconView.swift */; };
A80900D42AA3F9F30085C63B /* BetaIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80900D22AA3F9F20085C63B /* BetaIndicator.swift */; };
A80900D52AA3F9F30085C63B /* VisualEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A80900D32AA3F9F20085C63B /* VisualEffectView.swift */; };
A82521EC29E234EB00139654 /* AboutViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82521EB29E234EB00139654 /* AboutViewController.swift */; };
A82521EE29E235AC00139654 /* AccessibilityAccessManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82521ED29E235AC00139654 /* AccessibilityAccessManager.swift */; };
A82521EE29E235AC00139654 /* PermissionsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82521ED29E235AC00139654 /* PermissionsManager.swift */; };
A8330ABD2A3AC0CA00673C8D /* Bundle+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8330ABC2A3AC0CA00673C8D /* Bundle+Extensions.swift */; };
A8330AC12A3AC13100673C8D /* Defaults+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8330AC02A3AC13100673C8D /* Defaults+Extensions.swift */; };
A8330AC52A3AC15900673C8D /* Notification+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8330AC42A3AC15900673C8D /* Notification+Extensions.swift */; };
Expand All @@ -26,14 +28,15 @@
A8504D2D2A85832F00C2EFDA /* SoftwareUpdater.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8504D2C2A85832F00C2EFDA /* SoftwareUpdater.swift */; };
A86949862A8F2BB70051AAAF /* CGKeyCode+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86949852A8F2BB60051AAAF /* CGKeyCode+Extensions.swift */; };
A86CB7332A3D22E7006A78F2 /* WindowEngine.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86CB7322A3D22E7006A78F2 /* WindowEngine.swift */; };
A87376F62AA288EB001890F4 /* Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87376F52AA288EB001890F4 /* Window.swift */; };
A8789F6729805B190040512E /* RadialMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8789F6629805B190040512E /* RadialMenuView.swift */; };
A8789F6929805B340040512E /* PreviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8789F6829805B340040512E /* PreviewView.swift */; };
A87D36982980A89D002B0D2F /* KeybindingSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A87D36972980A89D002B0D2F /* KeybindingSettingsView.swift */; };
A88266002980931C00BCB197 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88265FF2980931C00BCB197 /* SettingsView.swift */; };
A882660829809F6F00BCB197 /* GeneralSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A882660729809F6F00BCB197 /* GeneralSettingsView.swift */; };
A883642F298B7288005D6C19 /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A883642E298B7288005D6C19 /* ServiceManagement.framework */; };
A8878A252AA3B2C800850A66 /* WindowTransformAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8878A242AA3B2C800850A66 /* WindowTransformAnimation.swift */; };
A8A2ABE72A3FB0370067B5A9 /* KeybindMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A2ABE62A3FB0370067B5A9 /* KeybindMonitor.swift */; };
A8A2ABEB2A3FBFBA0067B5A9 /* VisualEffectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8A2ABEA2A3FBFBA0067B5A9 /* VisualEffectView.swift */; };
A8D5A7D62A91384D004EA5BB /* DirectionSelectorSquareSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D5A7D52A91384D004EA5BB /* DirectionSelectorSquareSegment.swift */; };
A8D5A7D82A913862004EA5BB /* DirectionSelectorCircleSegment.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D5A7D72A913862004EA5BB /* DirectionSelectorCircleSegment.swift */; };
A8D5A7DA2A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8D5A7D92A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift */; };
Expand All @@ -56,8 +59,10 @@
A80397CE2A9327FA006D2796 /* NSApplication+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSApplication+Extensions.swift"; sourceTree = "<group>"; };
A80397D32A932993006D2796 /* MenubarIconView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenubarIconView.swift; sourceTree = "<group>"; };
A80521312A84878200BF7E22 /* Config.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Config.xcconfig; sourceTree = "<group>"; };
A80900D22AA3F9F20085C63B /* BetaIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BetaIndicator.swift; sourceTree = "<group>"; };
A80900D32AA3F9F20085C63B /* VisualEffectView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VisualEffectView.swift; sourceTree = "<group>"; };
A82521EB29E234EB00139654 /* AboutViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutViewController.swift; sourceTree = "<group>"; };
A82521ED29E235AC00139654 /* AccessibilityAccessManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessibilityAccessManager.swift; sourceTree = "<group>"; };
A82521ED29E235AC00139654 /* PermissionsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PermissionsManager.swift; sourceTree = "<group>"; };
A8291D6D2A4513D200C5CB69 /* .swiftlint.yml */ = {isa = PBXFileReference; indentWidth = 2; lastKnownFileType = text.yaml; path = .swiftlint.yml; sourceTree = "<group>"; tabWidth = 2; };
A8330ABC2A3AC0CA00673C8D /* Bundle+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Bundle+Extensions.swift"; sourceTree = "<group>"; };
A8330AC02A3AC13100673C8D /* Defaults+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Defaults+Extensions.swift"; sourceTree = "<group>"; };
Expand All @@ -74,14 +79,15 @@
A86949852A8F2BB60051AAAF /* CGKeyCode+Extensions.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "CGKeyCode+Extensions.swift"; sourceTree = "<group>"; };
A86AFD7529888B29008F4892 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
A86CB7322A3D22E7006A78F2 /* WindowEngine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowEngine.swift; sourceTree = "<group>"; };
A87376F52AA288EB001890F4 /* Window.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Window.swift; sourceTree = "<group>"; };
A8789F6629805B190040512E /* RadialMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadialMenuView.swift; sourceTree = "<group>"; };
A8789F6829805B340040512E /* PreviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewView.swift; sourceTree = "<group>"; };
A87D36972980A89D002B0D2F /* KeybindingSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeybindingSettingsView.swift; sourceTree = "<group>"; };
A88265FF2980931C00BCB197 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
A882660729809F6F00BCB197 /* GeneralSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsView.swift; sourceTree = "<group>"; };
A883642E298B7288005D6C19 /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; };
A8878A242AA3B2C800850A66 /* WindowTransformAnimation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WindowTransformAnimation.swift; sourceTree = "<group>"; };
A8A2ABE62A3FB0370067B5A9 /* KeybindMonitor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeybindMonitor.swift; sourceTree = "<group>"; };
A8A2ABEA2A3FBFBA0067B5A9 /* VisualEffectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VisualEffectView.swift; sourceTree = "<group>"; };
A8D5A7D52A91384D004EA5BB /* DirectionSelectorSquareSegment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectionSelectorSquareSegment.swift; sourceTree = "<group>"; };
A8D5A7D72A913862004EA5BB /* DirectionSelectorCircleSegment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DirectionSelectorCircleSegment.swift; sourceTree = "<group>"; };
A8D5A7D92A913B4C004EA5BB /* RadialMenuDirectionSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadialMenuDirectionSelectorView.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -117,6 +123,17 @@
/* End PBXFrameworksBuildPhase section */

/* Begin PBXGroup section */
A80900D12AA3F9F20085C63B /* Extras */ = {
isa = PBXGroup;
children = (
A8E6D2002A416494005751D4 /* LoopTriggerKeys.swift */,
A8504D2C2A85832F00C2EFDA /* SoftwareUpdater.swift */,
A80900D22AA3F9F20085C63B /* BetaIndicator.swift */,
A80900D32AA3F9F20085C63B /* VisualEffectView.swift */,
);
path = Extras;
sourceTree = "<group>";
};
A82521EA29E2349700139654 /* About Window */ = {
isa = PBXGroup;
children = (
Expand All @@ -126,20 +143,15 @@
path = "About Window";
sourceTree = "<group>";
};
A8330ABB2A3AC05200673C8D /* Helpers */ = {
A8330ABB2A3AC05200673C8D /* Managers */ = {
isa = PBXGroup;
children = (
A86CB7322A3D22E7006A78F2 /* WindowEngine.swift */,
A848D8A62A8C2F3F00060834 /* LoopManager.swift */,
A8A2ABE62A3FB0370067B5A9 /* KeybindMonitor.swift */,
A82521ED29E235AC00139654 /* AccessibilityAccessManager.swift */,
A82521ED29E235AC00139654 /* PermissionsManager.swift */,
A8EF1F08299C87DF00633440 /* IconManager.swift */,
A8330AD32A3AC27600673C8D /* WindowDirection.swift */,
A8E6D2002A416494005751D4 /* LoopTriggerKeys.swift */,
A8504D2C2A85832F00C2EFDA /* SoftwareUpdater.swift */,
A8A2ABEA2A3FBFBA0067B5A9 /* VisualEffectView.swift */,
A848D8A62A8C2F3F00060834 /* LoopManager.swift */,
);
path = Helpers;
path = Managers;
sourceTree = "<group>";
};
A8330AD52A3AC29C00673C8D /* Extensions */ = {
Expand All @@ -160,6 +172,17 @@
path = Extensions;
sourceTree = "<group>";
};
A864F4662AA65EC200579738 /* Window */ = {
isa = PBXGroup;
children = (
A86CB7322A3D22E7006A78F2 /* WindowEngine.swift */,
A87376F52AA288EB001890F4 /* Window.swift */,
A8878A242AA3B2C800850A66 /* WindowTransformAnimation.swift */,
A8330AD32A3AC27600673C8D /* WindowDirection.swift */,
);
path = Window;
sourceTree = "<group>";
};
A88265FA29808DED00BCB197 /* Preview Window */ = {
isa = PBXGroup;
children = (
Expand All @@ -185,21 +208,13 @@
isa = PBXGroup;
children = (
A88265FF2980931C00BCB197 /* SettingsView.swift */,
A882660429809F4E00BCB197 /* Views */,
);
path = Settings;
sourceTree = "<group>";
};
A882660429809F4E00BCB197 /* Views */ = {
isa = PBXGroup;
children = (
A882660729809F6F00BCB197 /* GeneralSettingsView.swift */,
A8DCC9872981B9E100D41065 /* RadialMenuSettingsView.swift */,
A8DCC9892981F43F00D41065 /* PreviewSettingsView.swift */,
A87D36972980A89D002B0D2F /* KeybindingSettingsView.swift */,
A8F0636C2985AF1F0010C33D /* MoreSettingsView.swift */,
);
path = Views;
path = Settings;
sourceTree = "<group>";
};
A883642D298B7288005D6C19 /* Frameworks */ = {
Expand Down Expand Up @@ -236,11 +251,13 @@
A80521312A84878200BF7E22 /* Config.xcconfig */,
A8E59C38297F5E9A0064D4BA /* LoopApp.swift */,
A80397D32A932993006D2796 /* MenubarIconView.swift */,
A8330ABB2A3AC05200673C8D /* Helpers */,
A864F4662AA65EC200579738 /* Window */,
A8330ABB2A3AC05200673C8D /* Managers */,
A82521EA29E2349700139654 /* About Window */,
A88265FB29808E0D00BCB197 /* Radial Menu */,
A88265FA29808DED00BCB197 /* Preview Window */,
A88265FC298092B500BCB197 /* Settings */,
A80900D12AA3F9F20085C63B /* Extras */,
A8330AD52A3AC29C00673C8D /* Extensions */,
A8E59C3C297F5E9B0064D4BA /* Assets.xcassets */,
A8F063712985B2730010C33D /* Info.plist */,
Expand Down Expand Up @@ -368,17 +385,20 @@
A82521EC29E234EB00139654 /* AboutViewController.swift in Sources */,
A8E6D2012A416494005751D4 /* LoopTriggerKeys.swift in Sources */,
A8789F6729805B190040512E /* RadialMenuView.swift in Sources */,
A8A2ABEB2A3FBFBA0067B5A9 /* VisualEffectView.swift in Sources */,
A8330ABD2A3AC0CA00673C8D /* Bundle+Extensions.swift in Sources */,
A8DCC9882981B9E100D41065 /* RadialMenuSettingsView.swift in Sources */,
A8F0636D2985AF1F0010C33D /* MoreSettingsView.swift in Sources */,
A8330ACD2A3AC1D100673C8D /* CGPoint+Extensions.swift in Sources */,
A8330AC72A3AC19500673C8D /* NSScreen+Extensions.swift in Sources */,
A80900D52AA3F9F30085C63B /* VisualEffectView.swift in Sources */,
A87D36982980A89D002B0D2F /* KeybindingSettingsView.swift in Sources */,
A8330AC12A3AC13100673C8D /* Defaults+Extensions.swift in Sources */,
A80900D42AA3F9F30085C63B /* BetaIndicator.swift in Sources */,
A8E1575F298654960005761C /* AboutView.swift in Sources */,
A8DCC98A2981F43F00D41065 /* PreviewSettingsView.swift in Sources */,
A87376F62AA288EB001890F4 /* Window.swift in Sources */,
A8330AC52A3AC15900673C8D /* Notification+Extensions.swift in Sources */,
A8878A252AA3B2C800850A66 /* WindowTransformAnimation.swift in Sources */,
A8D5A7D82A913862004EA5BB /* DirectionSelectorCircleSegment.swift in Sources */,
A83667C82A3D7D910001D630 /* AXUIElement+Extensions.swift in Sources */,
A8330AD42A3AC27600673C8D /* WindowDirection.swift in Sources */,
Expand All @@ -392,7 +412,7 @@
A8330ACB2A3AC1C000673C8D /* Angle+Extensions.swift in Sources */,
A8504D2D2A85832F00C2EFDA /* SoftwareUpdater.swift in Sources */,
A8330ACF2A3AC1E900673C8D /* View+Extensions.swift in Sources */,
A82521EE29E235AC00139654 /* AccessibilityAccessManager.swift in Sources */,
A82521EE29E235AC00139654 /* PermissionsManager.swift in Sources */,
A8E59C4A297F98670064D4BA /* RadialMenuController.swift in Sources */,
A86949862A8F2BB70051AAAF /* CGKeyCode+Extensions.swift in Sources */,
A80397D42A932993006D2796 /* MenubarIconView.swift in Sources */,
Expand Down
19 changes: 19 additions & 0 deletions Loop.xcodeproj/xcshareddata/xcschemes/Loop.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,25 @@
</ActionContent>
</ExecutionAction>
</PreActions>
<PostActions>
<ExecutionAction
ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction">
<ActionContent
title = "Run Script"
scriptText = "$SRCROOT/assets/reset_build_number.sh&#10;"
shellToInvoke = "/bin/bash">
<EnvironmentBuildable>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "A8E59C34297F5E9A0064D4BA"
BuildableName = "Loop.app"
BlueprintName = "Loop"
ReferencedContainer = "container:Loop.xcodeproj">
</BuildableReference>
</EnvironmentBuildable>
</ActionContent>
</ExecutionAction>
</PostActions>
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
Expand Down
5 changes: 1 addition & 4 deletions Loop/Config.xcconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,5 @@
// Created by Kai Azim on 2023-08-09.
//

// Using other tools to set Loop's build number and marketing version didn't work well, so I
// resorted to using this config file to edit their values. There is a script in the resources
// folder that will auto-update the build number based on the number of commits.
VERSION = 1.0.0
VERSION = 0.0.0
BUILD_NUMBER = 0
24 changes: 18 additions & 6 deletions Loop/Extensions/AXUIElement+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,7 @@
import SwiftUI

extension AXUIElement {
func setAttributeValue(attribute: String, value: CFTypeRef) -> Bool {
let error = AXUIElementSetAttributeValue(self, attribute as CFString, value)
return error == .success
}

func copyAttributeValue(attribute: String) -> CFTypeRef? {
func getValue(attribute: String) -> CFTypeRef? {
var ref: CFTypeRef?
let error = AXUIElementCopyAttributeValue(self, attribute as CFString, &ref)
if error == .success {
Expand All @@ -22,6 +17,16 @@ extension AXUIElement {
return .none
}

func setValue(attribute: String, value: CFTypeRef) -> Bool {
let error = AXUIElementSetAttributeValue(self, attribute as CFString, value)
return error == .success
}

func performAction(_ action: String) {
AXUIElementPerformAction(self, action as CFString)
}

// Only used when experimenting
func getAttributeNames() -> [String]? {
var ref: CFArray?
let error = AXUIElementCopyAttributeNames(self, &ref)
Expand All @@ -30,4 +35,11 @@ extension AXUIElement {
}
return nil
}

func getElementAtPosition(_ position: CGPoint) -> AXUIElement? {
var element: AXUIElement?
let result = AXUIElementCopyElementAtPosition(self, Float(position.x), Float(position.y), &element)
guard result == .success else { return nil }
return element
}
}
18 changes: 18 additions & 0 deletions Loop/Extensions/CGKeyCode+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,12 @@ extension CGKeyCode {
static let kVK_DownArrow: CGKeyCode = 0x7D
static let kVK_UpArrow: CGKeyCode = 0x7E

// When the globe key is being pressed
static let kVK_LeftArrow_Globe: CGKeyCode = 0x73
static let kVK_RightArrow_Globe: CGKeyCode = 0x77
static let kVK_DownArrow_Globe: CGKeyCode = 0x79
static let kVK_UpArrow_Globe: CGKeyCode = 0x74

// ISO keyboards only
static let kVK_ISO_Section: CGKeyCode = 0x0A

Expand All @@ -151,6 +157,18 @@ extension CGKeyCode {
static let kVK_JIS_Eisu: CGKeyCode = 0x66
static let kVK_JIS_Kana: CGKeyCode = 0x68

// Some keycodes seem to alter when a modifier key (ex. the globe key) is being pressed.
var baseKey: CGKeyCode {
switch self {
case .kVK_ANSI_KeypadEnter: CGKeyCode.kVK_Return
case .kVK_LeftArrow_Globe: CGKeyCode.kVK_LeftArrow
case .kVK_RightArrow_Globe: CGKeyCode.kVK_RightArrow
case .kVK_DownArrow_Globe: CGKeyCode.kVK_DownArrow
case .kVK_UpArrow_Globe: CGKeyCode.kVK_UpArrow
default: self
}
}

var isModifier: Bool {
return (.kVK_RightCommand ... .kVK_Function).contains(self)
}
Expand Down
4 changes: 4 additions & 0 deletions Loop/Extensions/Defaults+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,8 @@ extension Defaults.Keys {
"rightThird",
default: [[.kVK_ANSI_L]]
)

// BETA
static let animateWindowResizes = Key<Bool>("animateWindowResizes", default: false)
static let windowPadding = Key<CGFloat>("windowPadding", default: 0)
}
Loading

0 comments on commit 1a7101c

Please sign in to comment.