1
0
mirror of https://github.com/nicoverbruggen/phpmon.git synced 2025-11-09 21:20:07 +01:00

👌 Fix launching apps with spaces in name, add window position (#68)

This commit is contained in:
2021-12-10 17:30:57 +01:00
parent a9f140fabc
commit 3faa251216
5 changed files with 25 additions and 11 deletions

View File

@@ -777,7 +777,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 110; CURRENT_PROJECT_VERSION = 120;
DEVELOPMENT_TEAM = 8M54J5J787; DEVELOPMENT_TEAM = 8M54J5J787;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = phpmon/Info.plist; INFOPLIST_FILE = phpmon/Info.plist;
@@ -786,7 +786,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = "4.1-beta5"; MARKETING_VERSION = "4.1-rc1";
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";
@@ -802,7 +802,7 @@
CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic; CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES; COMBINE_HIDPI_IMAGES = YES;
CURRENT_PROJECT_VERSION = 110; CURRENT_PROJECT_VERSION = 120;
DEVELOPMENT_TEAM = 8M54J5J787; DEVELOPMENT_TEAM = 8M54J5J787;
ENABLE_HARDENED_RUNTIME = YES; ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = phpmon/Info.plist; INFOPLIST_FILE = phpmon/Info.plist;
@@ -811,7 +811,7 @@
"@executable_path/../Frameworks", "@executable_path/../Frameworks",
); );
MACOSX_DEPLOYMENT_TARGET = 11.0; MACOSX_DEPLOYMENT_TARGET = 11.0;
MARKETING_VERSION = "4.1-beta5"; MARKETING_VERSION = "4.1-rc1";
PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon; PRODUCT_BUNDLE_IDENTIFIER = com.nicoverbruggen.phpmon;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = ""; PROVISIONING_PROFILE_SPECIFIER = "";

View File

@@ -15,7 +15,7 @@ import Foundation
class Application { class Application {
enum AppType { enum AppType {
case editor, browser, gitgui, terminal case editor, browser, git_gui, terminal
} }
/// Name of the app. Used for display purposes and to determine `name.app` exists. /// Name of the app. Used for display purposes and to determine `name.app` exists.
@@ -24,25 +24,25 @@ class Application {
/// Application type. Depending on the type, a different action might occur. /// Application type. Depending on the type, a different action might occur.
let type: AppType let type: AppType
/// Initializer. /// Initializer. Used to detect a specific app of a specific type.
init(_ name: String, _ type: AppType) { init(_ name: String, _ type: AppType) {
self.name = name self.name = name
self.type = type self.type = type
} }
/** /**
Attempt to open a specific directory in the editor of choice. Attempt to open a specific directory in the app of choice.
This will open the editor if it isn't open yet. (This will open the app if it isn't open yet.)
*/ */
@objc public func openDirectory(file: String) { @objc public func openDirectory(file: String) {
return Shell.run("/usr/bin/open -a \(self.name) \(file)") return Shell.run("/usr/bin/open -a \"\(name)\" \(file)")
} }
/** Checks if the app is installed. */ /** Checks if the app is installed. */
func isInstalled() -> Bool { func isInstalled() -> Bool {
// If this script does not complain, the app exists! // If this script does not complain, the app exists!
return Shell.user.execute( return Shell.user.execute(
"/usr/bin/open -Ra \"\(self.name)\"", "/usr/bin/open -Ra \"\(name)\"",
requiresPath: false, requiresPath: false,
waitUntilExit: true waitUntilExit: true
).task.terminationStatus == 0 ).task.terminationStatus == 0
@@ -56,7 +56,7 @@ class Application {
Application("PhpStorm", .editor), Application("PhpStorm", .editor),
Application("Visual Studio Code", .editor), Application("Visual Studio Code", .editor),
Application("Sublime Text", .editor), Application("Sublime Text", .editor),
Application("Sublime Merge", .gitgui), Application("Sublime Merge", .git_gui),
Application("iTerm", .terminal) Application("iTerm", .terminal)
].filter { ].filter {
return $0.isInstalled() return $0.isInstalled()

View File

@@ -25,6 +25,18 @@ class PMWindowController: NSWindowController, NSWindowDelegate {
App.shared.register(window: windowName) App.shared.register(window: windowName)
} }
public func positionWindowInTopLeftCorner() {
guard let frame = NSScreen.main?.frame else { return }
guard let window = self.window else { return }
window.setFrame(NSRect(
x: frame.size.width - window.frame.size.width - 20,
y: frame.size.height - window.frame.size.height - 40,
width: window.frame.width,
height: window.frame.height
), display: true)
}
func windowWillClose(_ notification: Notification) { func windowWillClose(_ notification: Notification) {
App.shared.remove(window: windowName) App.shared.remove(window: windowName)
} }

View File

@@ -57,6 +57,7 @@ class PrefsVC: NSViewController {
windowController.window!.delegate = delegate windowController.window!.delegate = delegate
windowController.window!.styleMask = [.titled, .closable, .miniaturizable] windowController.window!.styleMask = [.titled, .closable, .miniaturizable]
windowController.window!.delegate = windowController windowController.window!.delegate = windowController
windowController.positionWindowInTopLeftCorner()
App.shared.preferencesWindowController = windowController App.shared.preferencesWindowController = windowController
} }

View File

@@ -56,6 +56,7 @@ class SiteListVC: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
] ]
windowController.window!.minSize = NSSize(width: 550, height: 200) windowController.window!.minSize = NSSize(width: 550, height: 200)
windowController.window!.delegate = windowController windowController.window!.delegate = windowController
windowController.positionWindowInTopLeftCorner()
App.shared.siteListWindowController = windowController App.shared.siteListWindowController = windowController
} }