Showing preview only (810K chars total). Download the full file or copy to clipboard to get everything.
Repository: Ji4n1ng/OpenInTerminal
Branch: master
Commit: bee2c57aeb8e
Files: 168
Total size: 756.1 KB
Directory structure:
gitextract_lq_yxf02/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report_issue_template.md
│ │ └── feature_request_issue_template.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── LICENSE
├── OpenInEditor-Lite/
│ ├── OpenInEditor-Lite/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Error.swift
│ │ ├── Info.plist
│ │ ├── OpenInEditor-Lite.entitlements
│ │ ├── OpenInEditor_Lite.entitlements
│ │ ├── de.lproj/
│ │ │ └── Localizable.strings
│ │ ├── en.lproj/
│ │ │ └── Localizable.strings
│ │ ├── es.lproj/
│ │ │ └── Localizable.strings
│ │ ├── fr.lproj/
│ │ │ └── Localizable.strings
│ │ ├── it.lproj/
│ │ │ └── Localizable.strings
│ │ ├── ko.lproj/
│ │ │ └── Localizable.strings
│ │ ├── main.swift
│ │ ├── ru.lproj/
│ │ │ └── Localizable.strings
│ │ ├── tr.lproj/
│ │ │ └── Localizable.strings
│ │ └── zh-Hans.lproj/
│ │ └── Localizable.strings
│ └── OpenInEditor-Lite.xcodeproj/
│ ├── project.pbxproj
│ └── xcshareddata/
│ └── xcschemes/
│ └── OpenInEditor-Lite.xcscheme
├── OpenInTerminal/
│ ├── AppDelegate.swift
│ ├── Assets.xcassets/
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── StatusBarIcon.imageset/
│ │ │ └── Contents.json
│ │ ├── ToolbarCustomize.imageset/
│ │ │ └── Contents.json
│ │ └── logo.imageset/
│ │ └── Contents.json
│ ├── Constants.swift
│ ├── Error.swift
│ ├── Icons.xcassets/
│ │ ├── Alacritty.imageset/
│ │ │ └── Contents.json
│ │ ├── Android Studio.imageset/
│ │ │ └── Contents.json
│ │ ├── AppCode.imageset/
│ │ │ └── Contents.json
│ │ ├── Atom.imageset/
│ │ │ └── Contents.json
│ │ ├── BBEdit.imageset/
│ │ │ └── Contents.json
│ │ ├── CLion.imageset/
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── CotEditor.imageset/
│ │ │ └── Contents.json
│ │ ├── Cursor.imageset/
│ │ │ └── Contents.json
│ │ ├── Fleet.imageset/
│ │ │ └── Contents.json
│ │ ├── Fork.imageset/
│ │ │ └── Contents.json
│ │ ├── Ghostty.imageset/
│ │ │ └── Contents.json
│ │ ├── GitHub Desktop.imageset/
│ │ │ └── Contents.json
│ │ ├── GoLand.imageset/
│ │ │ └── Contents.json
│ │ ├── IntelliJ IDEA.imageset/
│ │ │ └── Contents.json
│ │ ├── MacVim.imageset/
│ │ │ └── Contents.json
│ │ ├── Nova.imageset/
│ │ │ └── Contents.json
│ │ ├── PhpStorm.imageset/
│ │ │ └── Contents.json
│ │ ├── PyCharm.imageset/
│ │ │ └── Contents.json
│ │ ├── RubyMine.imageset/
│ │ │ └── Contents.json
│ │ ├── Sublime Text.imageset/
│ │ │ └── Contents.json
│ │ ├── Tabby.imageset/
│ │ │ └── Contents.json
│ │ ├── Terminal.imageset/
│ │ │ └── Contents.json
│ │ ├── TextEdit.imageset/
│ │ │ └── Contents.json
│ │ ├── TextMate.imageset/
│ │ │ └── Contents.json
│ │ ├── Typora.imageset/
│ │ │ └── Contents.json
│ │ ├── VSCodium.imageset/
│ │ │ └── Contents.json
│ │ ├── Visual Studio Code - Insiders.imageset/
│ │ │ └── Contents.json
│ │ ├── Visual Studio Code.imageset/
│ │ │ └── Contents.json
│ │ ├── Warp.imageset/
│ │ │ └── Contents.json
│ │ ├── WebStorm.imageset/
│ │ │ └── Contents.json
│ │ ├── WezTerm.imageset/
│ │ │ └── Contents.json
│ │ ├── Xcode.imageset/
│ │ │ └── Contents.json
│ │ ├── Zed.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_color_editor.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_color_path.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_color_terminal.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_editor.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_path.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_terminal.imageset/
│ │ │ └── Contents.json
│ │ ├── hyper.imageset/
│ │ │ └── Contents.json
│ │ ├── iTerm.imageset/
│ │ │ └── Contents.json
│ │ ├── kitty.imageset/
│ │ │ └── Contents.json
│ │ └── neovim.imageset/
│ │ └── Contents.json
│ ├── Info.plist
│ ├── MainMenu.xib
│ ├── Notifier/
│ │ ├── LaunchNotifier.swift
│ │ ├── Notifier.swift
│ │ └── OpenNotifier.swift
│ ├── OpenInTerminal.entitlements
│ ├── PreferencesWindow/
│ │ ├── AboutPreferencesViewController.swift
│ │ ├── AdvancedPreferencesViewController.swift
│ │ ├── Base.lproj/
│ │ │ └── Preferences.storyboard
│ │ ├── CustomInputViewController.swift
│ │ ├── CustomPreferencesViewController.swift
│ │ ├── GeneralPreferencesViewController.swift
│ │ ├── PreferencesViewController.swift
│ │ ├── PreferencesWindowController.swift
│ │ ├── de.lproj/
│ │ │ └── Preferences.strings
│ │ ├── en.lproj/
│ │ │ └── Preferences.strings
│ │ ├── es.lproj/
│ │ │ └── Preferences.strings
│ │ ├── fr.lproj/
│ │ │ └── Preferences.strings
│ │ ├── it.lproj/
│ │ │ └── Preferences.strings
│ │ ├── ko.lproj/
│ │ │ └── Preferences.strings
│ │ ├── mul.lproj/
│ │ │ └── Preferences.xcstrings
│ │ ├── ru.lproj/
│ │ │ └── Preferences.strings
│ │ ├── tr.lproj/
│ │ │ └── Preferences.strings
│ │ └── zh-Hans.lproj/
│ │ └── Preferences.strings
│ ├── ScriptGenerator.swift
│ ├── StatusMenuController.swift
│ ├── de.lproj/
│ │ └── Localizable.strings
│ ├── en.lproj/
│ │ └── Localizable.strings
│ ├── es.lproj/
│ │ └── Localizable.strings
│ ├── fr.lproj/
│ │ └── Localizable.strings
│ ├── it.lproj/
│ │ └── Localizable.strings
│ ├── ko.lproj/
│ │ └── Localizable.strings
│ ├── ru.lproj/
│ │ └── Localizable.strings
│ ├── tr.lproj/
│ │ └── Localizable.strings
│ └── zh-Hans.lproj/
│ └── Localizable.strings
├── OpenInTerminal-Lite/
│ ├── OpenInTerminal-Lite/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Error.swift
│ │ ├── Info.plist
│ │ ├── OpenInTerminal-Lite.entitlements
│ │ ├── OpenInTerminal_Lite.entitlements
│ │ ├── de.lproj/
│ │ │ └── Localizable.strings
│ │ ├── en.lproj/
│ │ │ └── Localizable.strings
│ │ ├── es.lproj/
│ │ │ └── Localizable.strings
│ │ ├── fr.lproj/
│ │ │ └── Localizable.strings
│ │ ├── it.lproj/
│ │ │ └── Localizable.strings
│ │ ├── ko.lproj/
│ │ │ └── Localizable.strings
│ │ ├── main.swift
│ │ ├── ru.lproj/
│ │ │ └── Localizable.strings
│ │ ├── tr.lproj/
│ │ │ └── Localizable.strings
│ │ └── zh-Hans.lproj/
│ │ └── Localizable.strings
│ └── OpenInTerminal-Lite.xcodeproj/
│ ├── project.pbxproj
│ └── xcshareddata/
│ └── xcschemes/
│ └── OpenInTerminal-Lite.xcscheme
├── OpenInTerminal.xcodeproj/
│ └── project.pbxproj
├── OpenInTerminalCore/
│ ├── App.swift
│ ├── AppManager.swift
│ ├── Constants.swift
│ ├── Defaults.swift
│ ├── DefaultsManager.swift
│ ├── Error.swift
│ ├── Extensions/
│ │ ├── ArrayExtensions.swift
│ │ └── PathExtensions.swift
│ ├── FinderManager.swift
│ ├── Info.plist
│ ├── Log.swift
│ ├── OpenInTerminalCore.h
│ ├── ScriptManager.swift
│ ├── ScriptingBridge/
│ │ ├── Finder.swift
│ │ └── Terminal.swift
│ └── SupportedApps.swift
├── OpenInTerminalFinderExtension/
│ ├── FinderAssets.xcassets/
│ │ ├── Contents.json
│ │ └── Icon.imageset/
│ │ └── Contents.json
│ ├── FinderSync.swift
│ ├── Info.plist
│ └── OpenInTerminalFinderExtension.entitlements
├── OpenInTerminalHelper/
│ ├── AppDelegate.swift
│ ├── Assets.xcassets/
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj/
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── OpenInTerminalHelper.entitlements
├── README.md
└── Resources/
├── README-Config-zh.md
├── README-Config.md
├── README-Lite-de.md
├── README-Lite-zh.md
├── README-Lite.md
├── README-de.md
├── README-tr.md
└── README-zh.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
*.h linguist-language=Swift
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: Ji4n1ng
#patreon: # Replace with a single Patreon username
#open_collective: # Replace with a single Open Collective username
#ko_fi: # Replace with a single Ko-fi username
#tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
#community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
#liberapay: # Replace with a single Liberapay username
#issuehunt: # Replace with a single IssueHunt username
#otechie: # Replace with a single Otechie username
#lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
#custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report_issue_template.md
================================================
---
name: 'Bug report'
labels: bug
about: 'Report a bug'
---
## What is the issue?
## How does one reproduce the issue?
## Screenshots
## Debug information (Logs, OS, Hardware, Version, etc.)
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request_issue_template.md
================================================
---
name: 'Feature request'
labels: enhancement
about: 'Request a new feature'
---
## Summarize this feature
## Why should this feature be included?
## Additional information
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Summary of this pull request
## Does this solve an existing issue? If so, add a link to it
## Steps to test this feature
## Screenshots
## Additional info
================================================
FILE: .gitignore
================================================
# Created by https://www.gitignore.io/api/macos,xcode,swift
# Edit at https://www.gitignore.io/?templates=macos,xcode,swift
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### Swift ###
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## Build generated
build/
DerivedData/
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata/
## Other
*.moved-aside
*.xccheckout
*.xcscmblueprint
## Obj-C/Swift specific
*.hmap
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
.build/
# CocoaPods
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
Pods/
# Add this line if you want to avoid checking in source code from the Xcode workspace
*.xcworkspace
# Carthage
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
Carthage/Build
# fastlane
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode
iOSInjectionProject/
### Xcode ###
# Xcode
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
### Xcode Patch ###
*.xcodeproj/*
!*.xcodeproj/project.pbxproj
!*.xcodeproj/xcshareddata/
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
**/xcshareddata/WorkspaceSettings.xcsettings
# End of https://www.gitignore.io/api/macos,xcode,swift
n
================================================
FILE: .travis.yml
================================================
language: objective-c
matrix:
include:
- osx_image: xcode11
branches:
only:
- master
#- develop
env:
global:
- LC_CTYPE=en_US.UTF-8
before_install:
- gem install cocoapods # Since Travis is not always on latest version
- gem install xcpretty -N
- pod install
script:
- set -o pipefail
- xcodebuild clean build -workspace OpenInTerminal.xcworkspace -scheme OpenInTerminal -sdk macosx -configuration Release CODE_SIGN_IDENTITY="" CODE_SIGN_REQUIRED=NO | xcpretty -c
================================================
FILE: LICENSE
================================================
The MIT License
Copyright (c) 2019 Jianing Wang
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"filename" : "icon_editor_light_16.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"filename" : "icon_editor_light_16@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"filename" : "icon_editor_light_32.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"filename" : "icon_editor_light_32@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"filename" : "icon_editor_light_128.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"filename" : "icon_editor_light_128@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"filename" : "icon_editor_light_256.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"filename" : "icon_editor_light _256@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"filename" : "icon_editor_light_512.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"filename" : "icon_editor_light_512@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/Assets.xcassets/Contents.json
================================================
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/Error.swift
================================================
//
// Error.swift
// OpenInEditor-Lite
//
// Created by Jianing Wang on 2019/6/25.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Foundation
enum OITLError: Error {
case cannotGetEditor
}
extension OITLError : CustomStringConvertible {
var description: String {
switch self {
case .cannotGetEditor:
return "There is no default editor. And user did not pick a editor."
}
}
}
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIconFile</key>
<string></string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSUIElement</key>
<true/>
<key>NSAppleEventsUsageDescription</key>
<string>Please give permissions to access your Finder & Terminal</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2019 Jianing Wang. All rights reserved.</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/OpenInEditor-Lite.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.automation.apple-events</key>
<true/>
</dict>
</plist>
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/OpenInEditor_Lite.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>com.apple.systemevents</string>
<string>com.apple.Terminal</string>
<string>com.apple.Finder</string>
<string>com.googlecode.iterm2</string>
<string>co.zeit.hyper</string>
<string>io.alacritty</string>
<string>com.github.wez.wezterm</string>
<string>org.tabby</string>
<string>com.microsoft.VSCode</string>
<string>com.github.atom</string>
<string>com.sublimetext.3</string>
<string>com.barebones.bbedit</string>
<string>com.microsoft.VSCodeInsiders</string>
<string>com.macromates.TextMate</string>
</array>
</dict>
</plist>
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/de.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "Okay";
"general.cancel" = "Abbrechen";
"general.yes" = "Ja";
"alert.pick_editor_title" = "Öffnen mit?";
"alert.pick_editor_description" = "Bitte wählen Sie eines der folgenden Editoren als Standard zum Öffnen.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/en.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "OK";
"general.cancel" = "Cancel";
"general.yes" = "Yes";
"alert.pick_editor_title" = "Open In?";
"alert.pick_editor_description" = "Please select one of the following editors as the default editor to open.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/es.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "OK";
"general.cancel" = "Cancelar";
"general.yes" = "Sí";
"alert.pick_editor_title" = "Abrir en?";
"alert.pick_editor_description" = "Seleccione uno de los siguientes editores como editor predeterminado.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/fr.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "OK";
"general.cancel" = "Annuler";
"general.yes" = "Oui";
"alert.pick_editor_title" = "Ouvrir avec?";
"alert.pick_editor_description" = "Veuillez sélectionner l’un de ses éditeurs ci-dessous pour être utilisé comme éditeur par défaut.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/it.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by arendruni on 2020/4/9.
Copyright © 2020 arendruni. All rights reserved.
*/
"general.ok" = "OK";
"general.cancel" = "Annulla";
"general.yes" = "Sì";
"alert.pick_editor_title" = "Apri con?";
"alert.pick_editor_description" = "Seleziona uno dei seguenti editor per impostarlo come editor di default.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/ko.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Fernando on 2019/11/23.
Copyright © 2019 Fernando. All rights reserved.
*/
"general.ok" = "확인";
"general.cancel" = "닫기";
"general.yes" = "네";
"alert.pick_editor_title" = "여시겠습니까?";
"alert.pick_editor_description" = "다음 리스트에서 기본이 될 에디터 프로그램을 선택해주세요.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/main.swift
================================================
//
// main.swift
// OpenInEditor-Lite
//
// Created by Jianing Wang on 2019/6/25.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Foundation
import OpenInTerminalCore
do {
if let editorName = DefaultsManager.shared.liteDefaultEditor {
let editor = App(name: editorName, type: .editor)
try editor.openOutsideSandbox()
} else {
guard let selectedEditor = AppManager.shared.pickEditorAlert() else {
throw OITLError.cannotGetEditor
}
DefaultsManager.shared.liteDefaultEditor = selectedEditor.name
try selectedEditor.openOutsideSandbox()
}
} catch {
logw(error.localizedDescription)
}
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/ru.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "OK";
"general.cancel" = "Отменить";
"general.yes" = "Да";
"alert.pick_terminal_title" = "Открыть в?";
"alert.pick_terminal_description" = "Пожалуйста, выберите один из доступных редакторе для установки по-умолчанию.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/tr.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "Tamam";
"general.cancel" = "İptal";
"general.yes" = "Evet";
"alert.pick_editor_title" = "Şununla Aç?";
"alert.pick_editor_description" = "Lütfen gösterilen düzenleyicilerden birini varsayılan düzenleyici olarak seçin.";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite/zh-Hans.lproj/Localizable.strings
================================================
/*
Localizable.strings
OpenInEditor-Lite
Created by Jianing Wang on 2019/6/25.
Copyright © 2019 Jianing Wang. All rights reserved.
*/
"general.ok" = "好";
"general.cancel" = "取消";
"general.yes" = "是的";
"alert.pick_editor_title" = "打开?";
"alert.pick_editor_description" = "请在下面的编辑器中选择一个作为默认编辑器。";
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite.xcodeproj/project.pbxproj
================================================
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objects = {
/* Begin PBXBuildFile section */
95A0744D22C2083E00A42BC8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 95A0744C22C2083E00A42BC8 /* Assets.xcassets */; };
95A0745922C2140700A42BC8 /* OpenInTerminalCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95A0745822C2140700A42BC8 /* OpenInTerminalCore.framework */; };
95A0745A22C2140700A42BC8 /* OpenInTerminalCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 95A0745822C2140700A42BC8 /* OpenInTerminalCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
95A0745D22C2141700A42BC8 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A0745C22C2141700A42BC8 /* main.swift */; };
95A0745F22C2155800A42BC8 /* Error.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95A0745E22C2155800A42BC8 /* Error.swift */; };
95A0746222C217E800A42BC8 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 95A0746422C217E800A42BC8 /* Localizable.strings */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
95A0745B22C2140800A42BC8 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
95A0745A22C2140700A42BC8 /* OpenInTerminalCore.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
2594E99827EF396F00AF84D5 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
82AE667823896C4E00F4DB4D /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
9561BB4324C1F3ED001DE0A9 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/Localizable.strings; sourceTree = "<group>"; };
9595D2A223BAD7EE006CBB36 /* OpenInEditor-Lite.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "OpenInEditor-Lite.entitlements"; sourceTree = "<group>"; };
95A0744722C2083E00A42BC8 /* OpenInEditor-Lite.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenInEditor-Lite.app"; sourceTree = BUILT_PRODUCTS_DIR; };
95A0744C22C2083E00A42BC8 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
95A0745122C2083E00A42BC8 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
95A0745222C2083E00A42BC8 /* OpenInEditor_Lite.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OpenInEditor_Lite.entitlements; sourceTree = "<group>"; };
95A0745822C2140700A42BC8 /* OpenInTerminalCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = OpenInTerminalCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
95A0745C22C2141700A42BC8 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = "<group>"; };
95A0745E22C2155800A42BC8 /* Error.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Error.swift; sourceTree = "<group>"; };
95A0746322C217E800A42BC8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
95A0746522C217EC00A42BC8 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
95A0746622C217EF00A42BC8 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = "<group>"; };
95B0614027AFAD1E009C2B4E /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/Localizable.strings; sourceTree = "<group>"; };
95DD629D243B4694003550B3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/Localizable.strings; sourceTree = "<group>"; };
C3135D9E243F4CFA003323CF /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
95A0744422C2083E00A42BC8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
95A0745922C2140700A42BC8 /* OpenInTerminalCore.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
95A0743E22C2083E00A42BC8 = {
isa = PBXGroup;
children = (
95A0745822C2140700A42BC8 /* OpenInTerminalCore.framework */,
95A0744922C2083E00A42BC8 /* OpenInEditor-Lite */,
95A0744822C2083E00A42BC8 /* Products */,
);
sourceTree = "<group>";
};
95A0744822C2083E00A42BC8 /* Products */ = {
isa = PBXGroup;
children = (
95A0744722C2083E00A42BC8 /* OpenInEditor-Lite.app */,
);
name = Products;
sourceTree = "<group>";
};
95A0744922C2083E00A42BC8 /* OpenInEditor-Lite */ = {
isa = PBXGroup;
children = (
9595D2A223BAD7EE006CBB36 /* OpenInEditor-Lite.entitlements */,
95A0745C22C2141700A42BC8 /* main.swift */,
95A0745E22C2155800A42BC8 /* Error.swift */,
95A0744C22C2083E00A42BC8 /* Assets.xcassets */,
95A0745122C2083E00A42BC8 /* Info.plist */,
95A0745222C2083E00A42BC8 /* OpenInEditor_Lite.entitlements */,
95A0746422C217E800A42BC8 /* Localizable.strings */,
);
path = "OpenInEditor-Lite";
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
95A0744622C2083E00A42BC8 /* OpenInEditor-Lite */ = {
isa = PBXNativeTarget;
buildConfigurationList = 95A0745522C2083E00A42BC8 /* Build configuration list for PBXNativeTarget "OpenInEditor-Lite" */;
buildPhases = (
95A0744322C2083E00A42BC8 /* Sources */,
95A0744422C2083E00A42BC8 /* Frameworks */,
95A0744522C2083E00A42BC8 /* Resources */,
95A0745B22C2140800A42BC8 /* Embed Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = "OpenInEditor-Lite";
productName = "OpenInEditor-Lite";
productReference = 95A0744722C2083E00A42BC8 /* OpenInEditor-Lite.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
95A0743F22C2083E00A42BC8 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1020;
LastUpgradeCheck = 1330;
ORGANIZATIONNAME = "Jianing Wang";
TargetAttributes = {
95A0744622C2083E00A42BC8 = {
CreatedOnToolsVersion = 10.2.1;
SystemCapabilities = {
com.apple.Sandbox = {
enabled = 0;
};
};
};
};
};
buildConfigurationList = 95A0744222C2083E00A42BC8 /* Build configuration list for PBXProject "OpenInEditor-Lite" */;
compatibilityVersion = "Xcode 9.3";
developmentRegion = en;
hasScannedForEncodings = 0;
knownRegions = (
en,
Base,
"zh-Hans",
fr,
ko,
ru,
it,
es,
tr,
de,
);
mainGroup = 95A0743E22C2083E00A42BC8;
productRefGroup = 95A0744822C2083E00A42BC8 /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
95A0744622C2083E00A42BC8 /* OpenInEditor-Lite */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
95A0744522C2083E00A42BC8 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
95A0744D22C2083E00A42BC8 /* Assets.xcassets in Resources */,
95A0746222C217E800A42BC8 /* Localizable.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
95A0744322C2083E00A42BC8 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
95A0745F22C2155800A42BC8 /* Error.swift in Sources */,
95A0745D22C2141700A42BC8 /* main.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
95A0746422C217E800A42BC8 /* Localizable.strings */ = {
isa = PBXVariantGroup;
children = (
95A0746322C217E800A42BC8 /* en */,
95A0746522C217EC00A42BC8 /* zh-Hans */,
95A0746622C217EF00A42BC8 /* fr */,
82AE667823896C4E00F4DB4D /* ko */,
95DD629D243B4694003550B3 /* ru */,
C3135D9E243F4CFA003323CF /* it */,
9561BB4324C1F3ED001DE0A9 /* es */,
95B0614027AFAD1E009C2B4E /* tr */,
2594E99827EF396F00AF84D5 /* de */,
);
name = Localizable.strings;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
95A0745322C2083E00A42BC8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
};
name = Debug;
};
95A0745422C2083E00A42BC8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
CLANG_CXX_LIBRARY = "libc++";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_ARC = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
CODE_SIGN_IDENTITY = "Mac Developer";
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_C_LANGUAGE_STANDARD = gnu11;
GCC_NO_COMMON_BLOCKS = YES;
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
GCC_WARN_UNDECLARED_SELECTOR = YES;
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.14;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
};
name = Release;
};
95A0745622C2083E00A42BC8 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "OpenInEditor-Lite/OpenInEditor-Lite.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = Q33U8R4U57;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = "OpenInEditor-Lite/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 1.2.7;
PRODUCT_BUNDLE_IDENTIFIER = "wang.jianing.app.OpenInEditor-Lite";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
};
name = Debug;
};
95A0745722C2083E00A42BC8 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CODE_SIGN_ENTITLEMENTS = "OpenInEditor-Lite/OpenInEditor-Lite.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
COMBINE_HIDPI_IMAGES = YES;
DEVELOPMENT_TEAM = Q33U8R4U57;
ENABLE_HARDENED_RUNTIME = YES;
INFOPLIST_FILE = "OpenInEditor-Lite/Info.plist";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/../Frameworks",
);
MACOSX_DEPLOYMENT_TARGET = 10.13;
MARKETING_VERSION = 1.2.7;
PRODUCT_BUNDLE_IDENTIFIER = "wang.jianing.app.OpenInEditor-Lite";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
95A0744222C2083E00A42BC8 /* Build configuration list for PBXProject "OpenInEditor-Lite" */ = {
isa = XCConfigurationList;
buildConfigurations = (
95A0745322C2083E00A42BC8 /* Debug */,
95A0745422C2083E00A42BC8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
95A0745522C2083E00A42BC8 /* Build configuration list for PBXNativeTarget "OpenInEditor-Lite" */ = {
isa = XCConfigurationList;
buildConfigurations = (
95A0745622C2083E00A42BC8 /* Debug */,
95A0745722C2083E00A42BC8 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 95A0743F22C2083E00A42BC8 /* Project object */;
}
================================================
FILE: OpenInEditor-Lite/OpenInEditor-Lite.xcodeproj/xcshareddata/xcschemes/OpenInEditor-Lite.xcscheme
================================================
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1330"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "95A0744622C2083E00A42BC8"
BuildableName = "OpenInEditor-Lite.app"
BlueprintName = "OpenInEditor-Lite"
ReferencedContainer = "container:OpenInEditor-Lite.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "95A0744622C2083E00A42BC8"
BuildableName = "OpenInEditor-Lite.app"
BlueprintName = "OpenInEditor-Lite"
ReferencedContainer = "container:OpenInEditor-Lite.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "95A0744622C2083E00A42BC8"
BuildableName = "OpenInEditor-Lite.app"
BlueprintName = "OpenInEditor-Lite"
ReferencedContainer = "container:OpenInEditor-Lite.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
================================================
FILE: OpenInTerminal/AppDelegate.swift
================================================
//
// AppDelegate.swift
// OpenInTerminal
//
// Created by Cameron Ingham on 4/17/19.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Cocoa
import OpenInTerminalCore
import ShortcutRecorder
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
// MARK: - Properties
let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
@IBOutlet weak var statusBarMenu: NSMenu!
// MARK: - Lifecycle
func applicationDidFinishLaunching(_ notification: Notification) {
DefaultsManager.shared.firstSetup()
addObserver()
terminateOpenInTerminalHelper()
setStatusItemIcon()
setStatusItemVisible()
setStatusToggle()
logw("")
logw("App launched")
logw("macOS \(ProcessInfo().operatingSystemVersionString)")
logw("OpenInTerminal Version \(Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "")")
// bind global shortcuts
bindShortcuts()
do {
// check scripts and install them if needed
try checkScripts()
} catch {
logw(error.localizedDescription)
}
}
func applicationWillTerminate(_ notification: Notification) {
NSStatusBar.system.removeStatusItem(statusItem)
removeObserver()
logw("App terminated")
}
func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
if !flag {
showPreferencesWindow()
}
return true
}
}
extension AppDelegate {
// MARK: - Status Bar Item
func setStatusItemIcon() {
let icon = NSImage(assetIdentifier: .StatusBarIcon)
icon.isTemplate = true // Support Dark Mode
DispatchQueue.main.async {
self.statusItem.button?.image = icon
}
}
func setStatusItemVisible() {
let isHideStatusItem = DefaultsManager.shared.isHideStatusItem
statusItem.isVisible = !isHideStatusItem
}
func setStatusToggle() {
let isQuickToogle = DefaultsManager.shared.isQuickToggle
if isQuickToogle {
statusItem.menu = nil
if let button = statusItem.button {
button.action = #selector(statusBarButtonClicked)
button.sendAction(on: [.leftMouseUp, .leftMouseDown,
.rightMouseUp, .rightMouseDown])
}
} else {
statusItem.menu = statusBarMenu
}
}
@objc func statusBarButtonClicked(sender: NSStatusBarButton) {
let event = NSApp.currentEvent!
if event.type == .rightMouseDown || event.type == .rightMouseUp
|| event.modifierFlags.contains(.control)
{
statusItem.menu = statusBarMenu
statusItem.button?.performClick(self)
statusItem.menu = nil
} else if event.type == .leftMouseUp {
if let quickToggleType = DefaultsManager.shared.quickToggleType {
switch quickToggleType {
case .openWithDefaultTerminal:
openDefaultTerminal()
case .openWithDefaultEditor:
openDefaultEditor()
case .copyPathToClipboard:
copyPathToClipboard()
}
}
}
}
func terminateOpenInTerminalHelper() {
let isRunning = NSWorkspace.shared.runningApplications.contains {
$0.bundleIdentifier == Constants.Id.LauncherApp
}
if isRunning {
LaunchNotifier.postNotification(.terminateApp, object: Bundle.main.bundleIdentifier!)
}
}
func showPreferencesWindow() {
NSApp.setActivationPolicy(.regular) // show icon in Dock
let preferencesWindowController: PreferencesWindowController = {
let storyboard = NSStoryboard(storyboardIdentifier: .Preferences)
let windowController = storyboard.instantiateInitialController() as? PreferencesWindowController ?? PreferencesWindowController()
return windowController
}()
preferencesWindowController.window?.delegate = self
NSApp.activate(ignoringOtherApps: true)
preferencesWindowController.showWindow(self)
preferencesWindowController.window?.makeKeyAndOrderFront(self)
}
// MARK: - Notification
func addObserver() {
OpenNotifier.addObserver(observer: self,
selector: #selector(openDefaultTerminal),
notification: .openDefaultTerminal)
OpenNotifier.addObserver(observer: self,
selector: #selector(openDefaultEditor),
notification: .openDefaultEditor)
OpenNotifier.addObserver(observer: self,
selector: #selector(copyPathToClipboard),
notification: .copyPathToClipboard)
}
func removeObserver() {
OpenNotifier.removeObserver(observer: self, notification: .openDefaultTerminal)
OpenNotifier.removeObserver(observer: self, notification: .openDefaultEditor)
OpenNotifier.removeObserver(observer: self, notification: .copyPathToClipboard)
}
// MARK: Notification Actions
@objc func openDefaultTerminal() {
var defaultTerminal: App
if let terminal = DefaultsManager.shared.defaultTerminal {
defaultTerminal = terminal
} else {
// if there is no defualt terminal, then pick one
guard let selectedTerminal = AppManager.shared.pickTerminalAlert() else {
return
}
DefaultsManager.shared.defaultTerminal = selectedTerminal
defaultTerminal = selectedTerminal
}
do {
try defaultTerminal.openOutsideSandbox()
} catch {
logw("\(error)")
}
}
@objc func openDefaultEditor() {
var defaultEditor: App
if let editor = DefaultsManager.shared.defaultEditor {
defaultEditor = editor
} else {
// if there is no defualt editor, then pick one
guard let selectedEditor = AppManager.shared.pickEditorAlert() else {
return
}
DefaultsManager.shared.defaultEditor = selectedEditor
defaultEditor = selectedEditor
}
do {
try defaultEditor.openOutsideSandbox()
} catch {
logw("\(error)")
}
}
@objc func copyPathToClipboard() {
do {
var urls = try FinderManager.shared.getFullUrlsToFrontFinderWindowOrSelectedFile()
if urls.count == 0 {
// No Finder window and no file selected.
let homePath = NSHomeDirectory()
guard let homeUrl = URL(string: homePath) else { return }
urls.append(homeUrl.appendingPathComponent("Desktop"))
}
let paths = urls.map { $0.path }
let pathString = paths.joined(separator: "\n")
// Set string
NSPasteboard.general.clearContents()
NSPasteboard.general.setString(pathString, forType: .string)
} catch {
logw(error.localizedDescription)
}
}
// func writeimage() {
// SupportedApps.allCases.forEach {
// let path = "/Applications/\($0.name).app"
// guard FileManager.default.fileExists(atPath: path) else { return }
//
// let desktopURL = FileManager.default.urls(for: .desktopDirectory, in: .userDomainMask).first!
// let destinationURL = desktopURL.appendingPathComponent("\($0.name).png")
// let icon = AppManager.getApplicationIcon(from: path)
//
// guard let tiffRepresentation = icon.tiffRepresentation,
// let bitmapImage = NSBitmapImageRep(data: tiffRepresentation) else { return }
// let pngData = bitmapImage.representation(using: .png, properties: [:])
// do {
// try pngData?.write(to: destinationURL, options: .atomic)
// } catch {
// print("\($0.name)")
// print(error)
// }
// }
// }
}
extension AppDelegate {
// MARK: - Global Shortcuts
func bindShortcuts() {
let oitAction = ShortcutAction(keyPath: Constants.Key.defaultTerminalShortcut, of: Defaults) { _ in
let appDelegate = NSApplication.shared.delegate as! AppDelegate
appDelegate.openDefaultTerminal()
return true
}
GlobalShortcutMonitor.shared.addAction(oitAction, forKeyEvent: .down)
let oieAction = ShortcutAction(keyPath: Constants.Key.defaultEditorShortcut, of: Defaults) { _ in
let appDelegate = NSApplication.shared.delegate as! AppDelegate
appDelegate.openDefaultEditor()
return true
}
GlobalShortcutMonitor.shared.addAction(oieAction, forKeyEvent: .down)
let copyPathAction = ShortcutAction(keyPath: Constants.Key.copyPathShortcut, of: Defaults) { _ in
let appDelegate = NSApplication.shared.delegate as! AppDelegate
appDelegate.copyPathToClipboard()
return true
}
GlobalShortcutMonitor.shared.addAction(copyPathAction, forKeyEvent: .down)
}
}
extension AppDelegate: NSWindowDelegate {
func windowWillClose(_ notification: Notification) {
NSApp.setActivationPolicy(.accessory) // hide icon in Dock
}
}
================================================
FILE: OpenInTerminal/Assets.xcassets/AppIcon.appiconset/Contents.json
================================================
{
"images" : [
{
"filename" : "AppIcon-16.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "16x16"
},
{
"filename" : "AppIcon-16@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "16x16"
},
{
"filename" : "AppIcon-32.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "32x32"
},
{
"filename" : "AppIcon-32@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "32x32"
},
{
"filename" : "AppIcon-128.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "128x128"
},
{
"filename" : "AppIcon-128@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "128x128"
},
{
"filename" : "AppIcon-256.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "256x256"
},
{
"filename" : "AppIcon-256@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "256x256"
},
{
"filename" : "AppIcon-512.png",
"idiom" : "mac",
"scale" : "1x",
"size" : "512x512"
},
{
"filename" : "AppIcon-512@2x.png",
"idiom" : "mac",
"scale" : "2x",
"size" : "512x512"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Assets.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Assets.xcassets/StatusBarIcon.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "status_bar_icon.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "status_bar_icon@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "status_bar_icon@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Assets.xcassets/ToolbarCustomize.imageset/Contents.json
================================================
{
"images" : [
{
"idiom" : "universal",
"filename" : "ToolbarCustomize.png",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
}
}
================================================
FILE: OpenInTerminal/Assets.xcassets/logo.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "AppIcon-256.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Constants.swift
================================================
//
// Config.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/4/20.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Cocoa
import Foundation
import OpenInTerminalCore
struct Constants {
struct Id {
static let LauncherApp = "wang.jianing.app.OpenInTerminalHelper"
static let FinderExtension = "wang.jianing.app.OpenInTerminal.OpenInTerminalFinderExtension"
static let CustomAppCell = NSUserInterfaceItemIdentifier(rawValue: "customAppCell")
static let CustomMenuCell = NSUserInterfaceItemIdentifier(rawValue: "customMenuCell")
static let CustomInputViewController = "CustomInputViewController"
}
static let none = "None"
struct Key {
static let defaultTerminalShortcut = "OIT_DefaultTerminalShortcut"
static let defaultEditorShortcut = "OIT_DefaultEditorShortcut"
static let copyPathShortcut = "OIT_CopyPathShortcut"
}
static let PreferencesStoryboard = NSStoryboard(name: "Preferences", bundle: nil)
}
extension NSImage {
enum AssetIdentifier: String {
case StatusBarIcon
}
convenience init(assetIdentifier: AssetIdentifier) {
self.init(named: assetIdentifier.rawValue)!
}
}
extension NSStoryboard {
enum StoryboardIdentifier: String {
case Preferences
}
convenience init(storyboardIdentifier: StoryboardIdentifier) {
self.init(name: storyboardIdentifier.rawValue, bundle: nil)
}
}
================================================
FILE: OpenInTerminal/Error.swift
================================================
//
// Error.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/10/15.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Foundation
enum OITMError: Error {
case cannotAccessPath(_ path: String)
}
extension OITMError : CustomStringConvertible {
var description: String {
switch self {
case .cannotAccessPath(let path):
return "Cannot access path: \(path)"
}
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Alacritty.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Alacritty.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Android Studio.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Android Studio.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/AppCode.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "AppCode.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Atom.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Atom.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/BBEdit.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "BBEdit.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/CLion.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "CLion.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Contents.json
================================================
{
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/CotEditor.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "CotEditor.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Cursor.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Cursor.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Fleet.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Fleet.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Fork.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Fork.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Ghostty.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Ghostty.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/GitHub Desktop.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "GitHub Desktop.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/GoLand.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "GoLand.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/IntelliJ IDEA.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "IntelliJ IDEA.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/MacVim.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "MacVim.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Nova.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Nova.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/PhpStorm.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "PhpStorm.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/PyCharm.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "PyCharm.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/RubyMine.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "RubyMine.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Sublime Text.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Sublime Text.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Tabby.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "tabby.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Terminal.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Terminal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/TextEdit.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "TextEdit.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/TextMate.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "TextMate.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Typora.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Typora.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/VSCodium.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "VSCodium.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Visual Studio Code - Insiders.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Visual Studio Code - Insiders.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Visual Studio Code.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Visual Studio Code.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Warp.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Warp.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/WebStorm.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "WebStorm.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/WezTerm.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "wezterm.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Xcode.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Xcode.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/Zed.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "Zed.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/context_menu_icon_color_editor.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "context_menu_icon_color_editor.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "context_menu_icon_color_editor@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "context_menu_icon_color_editor@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/context_menu_icon_color_path.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "context_menu_icon_color_path.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "context_menu_icon_color_path@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "context_menu_icon_color_path@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/context_menu_icon_color_terminal.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "context_menu_icon_color_terminal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "context_menu_icon_color_terminal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "context_menu_icon_color_terminal@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/context_menu_icon_editor.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "context_menu_icon_editor-1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "context_menu_icon_editor.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "context_menu_icon_editor_light.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "context_menu_icon_editor@2x-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "context_menu_icon_editor@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "context_menu_icon_editor_light@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "context_menu_icon_editor@3x.png",
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/context_menu_icon_path.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "context_menu_icon_path-1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "context_menu_icon_path.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "context_menu_icon_path_light.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "context_menu_icon_path@2x-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "context_menu_icon_path@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "context_menu_icon_path_light@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "context_menu_icon_path@3x.png",
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/context_menu_icon_terminal.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "context_menu_icon_terminal-1.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "context_menu_icon_terminal.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "context_menu_icon_terminal_light.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "context_menu_icon_terminal@2x-1.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"filename" : "context_menu_icon_terminal@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"filename" : "context_menu_icon_terminal_light@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "context_menu_icon_terminal@3x.png",
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "light"
}
],
"idiom" : "universal",
"scale" : "3x"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/hyper.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "hyper.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/iTerm.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "iTerm.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/kitty.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "kitty.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Icons.xcassets/neovim.imageset/Contents.json
================================================
{
"images" : [
{
"filename" : "neovim.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"idiom" : "universal",
"scale" : "2x"
},
{
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
================================================
FILE: OpenInTerminal/Info.plist
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>$(DEVELOPMENT_LANGUAGE)</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>$(PRODUCT_NAME)</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>$(MARKETING_VERSION)</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.utilities</string>
<key>LSMinimumSystemVersion</key>
<string>$(MACOSX_DEPLOYMENT_TARGET)</string>
<key>LSUIElement</key>
<string>YES</string>
<key>NSAppleEventsUsageDescription</key>
<string>Please give permissions to access your Finder & Terminal</string>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict/>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.FinderSync</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).FinderSync</string>
</dict>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2019 Jianing Wang. All rights reserved.</string>
<key>NSMainNibFile</key>
<string>MainMenu</string>
<key>NSPrincipalClass</key>
<string>NSApplication</string>
</dict>
</plist>
================================================
FILE: OpenInTerminal/MainMenu.xib
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="23504" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23504"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
<connections>
<outlet property="delegate" destination="c7U-hO-KhD" id="6aq-AV-TWP"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customObject id="YLy-65-1bz" customClass="NSFontManager"/>
<customObject id="xFr-z9-DsJ" customClass="StatusMenuController" customModule="OpenInTerminal" customModuleProvider="target">
<connections>
<outlet property="copyPathMenuItem" destination="qAr-jJ-wpJ" id="c6N-Ea-YRn"/>
<outlet property="defaultEditorMenuItem" destination="Zth-1M-1Lo" id="bw4-82-Mty"/>
<outlet property="defaultTerminalMenuItem" destination="bMb-Lp-IHe" id="bew-Bk-lA6"/>
<outlet property="preferencesMenuItem" destination="UPk-SM-iWa" id="ca5-kt-bXJ"/>
<outlet property="quitMenuItem" destination="h2a-ug-O2T" id="hvL-68-064"/>
<outlet property="statusMenu" destination="Hp5-zS-8KF" id="0Nh-0E-UKl"/>
</connections>
</customObject>
<customObject id="c7U-hO-KhD" userLabel="Delegate" customClass="AppDelegate" customModule="OpenInTerminal" customModuleProvider="target">
<connections>
<outlet property="statusBarMenu" destination="Hp5-zS-8KF" id="Fp9-eh-hpZ"/>
</connections>
</customObject>
<menu id="Hp5-zS-8KF">
<items>
<menuItem title="Open in Terminal" id="bMb-Lp-IHe">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="openDefaultTerminal:" target="xFr-z9-DsJ" id="AiG-rU-N3Y"/>
</connections>
</menuItem>
<menuItem title="Open in Editor" id="Zth-1M-1Lo">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="openDefaultEditor:" target="xFr-z9-DsJ" id="McZ-8S-4C0"/>
</connections>
</menuItem>
<menuItem title="Copy path to Clipboard" id="qAr-jJ-wpJ">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="copyPathToClipboard:" target="xFr-z9-DsJ" id="g3F-O4-Ydf"/>
</connections>
</menuItem>
<menuItem isSeparatorItem="YES" id="s0I-d5-G8a"/>
<menuItem title="Preferences..." id="UPk-SM-iWa">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="showPreferences:" target="xFr-z9-DsJ" id="ePD-XV-Rfn"/>
</connections>
</menuItem>
<menuItem title="Quit" id="h2a-ug-O2T">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="quit:" target="xFr-z9-DsJ" id="fn6-gp-8xq"/>
</connections>
</menuItem>
</items>
<point key="canvasLocation" x="-698" y="-192"/>
</menu>
</objects>
</document>
================================================
FILE: OpenInTerminal/Notifier/LaunchNotifier.swift
================================================
//
// LaunchNotifier.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/4/27.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Foundation
public class LaunchNotifier: Notifier {
public enum Notification: String {
case terminateApp
}
}
================================================
FILE: OpenInTerminal/Notifier/Notifier.swift
================================================
//
// Notifier.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/4/19.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Foundation
public protocol Notifier {
associatedtype Notification: RawRepresentable
}
public extension Notifier where Notification.RawValue == String {
// MARK: - Static Computed Variables
private static func nameFor(notification: Notification) -> String {
return "\(self).\(notification.rawValue)"
}
// MARK: - Instance Methods
// Post
func postNotification(notification: Notification, object: String? = nil) {
Self.postNotification(notification, object: object)
}
func postNotification(notification: Notification, object: String? = nil, userInfo: [String : AnyObject]? = nil) {
Self.postNotification(notification, object: object, userInfo: userInfo)
}
// MARK: - Static Function
// Post
static func postNotification(_ notification: Notification, object: String? = nil, userInfo: [AnyHashable : Any]? = nil) {
let name = nameFor(notification: notification)
DistributedNotificationCenter.default()
.postNotificationName(NSNotification.Name(rawValue: name), object: object, userInfo: userInfo, deliverImmediately: true)
}
// Add
static func addObserver(observer: AnyObject, selector: Selector, notification: Notification, object: String? = nil) {
let name = nameFor(notification: notification)
DistributedNotificationCenter.default()
.addObserver(observer, selector: selector, name: NSNotification.Name(rawValue: name), object: object)
}
// Remove
static func removeObserver(observer: AnyObject, notification: Notification, object: String? = nil) {
let name = nameFor(notification: notification)
DistributedNotificationCenter.default()
.removeObserver(observer, name: NSNotification.Name(rawValue: name), object: object)
}
}
================================================
FILE: OpenInTerminal/Notifier/OpenNotifier.swift
================================================
//
// OpenManager.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/4/19.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Foundation
public class OpenNotifier: Notifier {
public enum Notification: String {
case openDefaultTerminal
case openDefaultEditor
case copyPathToClipboard
}
}
================================================
FILE: OpenInTerminal/OpenInTerminal.entitlements
================================================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.wang.jianing.app.OpenInTerminal</string>
</array>
<key>com.apple.security.automation.apple-events</key>
<true/>
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>com.apple.systemevents</string>
<string>com.apple.Terminal</string>
<string>com.apple.Finder</string>
<string>com.googlecode.iterm2</string>
<string>co.zeit.hyper</string>
<string>io.alacritty</string>
<string>com.github.wez.wezterm</string>
<string>org.tabby</string>
<string>com.microsoft.VSCode</string>
<string>com.github.atom</string>
<string>com.sublimetext.3</string>
<string>com.barebones.bbedit</string>
<string>com.microsoft.VSCodeInsiders</string>
<string>com.macromates.TextMate</string>
<string>net.kovidgoyal.kitty</string>
</array>
</dict>
</plist>
================================================
FILE: OpenInTerminal/PreferencesWindow/AboutPreferencesViewController.swift
================================================
//
// AboutPreferencesViewController.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/5/1.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Cocoa
class AboutPreferencesViewController: PreferencesViewController {
@IBOutlet weak var versionLabel: NSTextField!
override func viewDidLoad() {
super.viewDidLoad()
let versionObject = Bundle.main.infoDictionary?["CFBundleShortVersionString"]
versionLabel.stringValue = versionObject as? String ?? ""
}
@IBAction func githubButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://github.com/Ji4n1ng/OpenInTerminal") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func contactButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "mailto:contact@jianing.wang?subject=OpenInTerminal%20Feedback") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func twitterButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://twitter.com/Ji4n1ng") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func githubSponsorsButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://github.com/sponsors/Ji4n1ng") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func paypalButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://paypal.me/ji4ning") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func alipayButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://github.com/Ji4n1ng/OpenInTerminal/blob/master/Resources/Support-Alipay.jpg") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func weChatPayButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://github.com/Ji4n1ng/OpenInTerminal/blob/master/Resources/Support-WeChatPay.jpg") else { return }
NSWorkspace.shared.open(url)
}
@IBAction func camji55ButtonClicked(_ sender: NSButton) {
guard let url = URL(string: "https://github.com/Camji55") else { return }
NSWorkspace.shared.open(url)
}
}
class LinkButton: NSButton {
required init?(coder: NSCoder) {
super.init(coder: coder)
}
override func resetCursorRects() {
addCursorRect(self.bounds, cursor: .pointingHand)
}
}
================================================
FILE: OpenInTerminal/PreferencesWindow/AdvancedPreferencesViewController.swift
================================================
//
// AdvancedPreferencesViewController.swift
// OpenInTerminal
//
// Created by Jianing Wang on 2019/5/5.
// Copyright © 2019 Jianing Wang. All rights reserved.
//
import Cocoa
import OpenInTerminalCore
import ServiceManagement
import ShortcutRecorder
class AdvancedPreferencesViewController: PreferencesViewController {
@IBOutlet weak var defaultTerminalShortcut: RecorderControl!
@IBOutlet weak var defaultEditorShortcut: RecorderControl!
@IBOutlet weak var copyPathShortcut: RecorderControl!
@IBOutlet weak var resetPreferencesButton: NSButton!
// MARK: Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
defaultTerminalShortcut.bind(.value, to: Defaults, withKeyPath: Constants.Key.defaultTerminalShortcut)
defaultEditorShortcut.bind(.value, to: Defaults, withKeyPath: Constants.Key.defaultEditorShortcut)
copyPathShortcut.bind(.value, to: Defaults, withKeyPath: Constants.Key.copyPathShortcut)
}
// MARK: Button Actions
@IBAction func resetPreferencesButtonClicked(_ sender: NSButton) {
let alert = NSAlert()
alert.messageText = NSLocalizedString("alert.reset_preferences_title", comment: "Reset User Preferences?")
alert.informativeText = NSLocalizedString("alert.reset_preferences_description", comment: "⚠️ Note that this will reset all user preferences")
// Add button and avoid the focus ring
let cancelString = NSLocalizedString("general.cancel", comment: "Cancel")
alert.addButton(withTitle: cancelString).refusesFirstResponder = true
let yesString = NSLocalizedString("general.yes", comment: "Yes")
alert.addButton(withTitle: yesString).refusesFirstResponder = true
let modalResult = alert.runModal()
switch modalResult {
case .alertFirstButtonReturn:
print("Cancel Resetting User Preferences")
case .alertSecondButtonReturn:
logw("Reset User Preferences")
SMLoginItemSetEnabled(Constants.Id.LauncherApp as CFString, false)
DefaultsManager.shared.removeAllUserDefaults()
DefaultsManager.shared.firstSetup()
let appDelegate = NSApplication.shared.delegate as! AppDelegate
appDelegate.setStatusToggle()
default:
print("Cancel Resetting User Preferences")
}
}
@IBAction func quitButtonClicked(_ sender: NSButton) {
LaunchNotifier.postNotification(.terminateApp, object: Bundle.main.bundleIdentifier!)
NSApp.terminate(self)
}
}
================================================
FILE: OpenInTerminal/PreferencesWindow/Base.lproj/Preferences.storyboard
================================================
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="23504" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="oOf-8k-ODW">
<dependencies>
<deployment version="101304" identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="23504"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--Window Controller-->
<scene sceneID="HW7-s8-hqp">
<objects>
<customObject id="ov8-72-M4k" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
<windowController id="oOf-8k-ODW" customClass="PreferencesWindowController" customModule="OpenInTerminal" customModuleProvider="target" sceneMemberID="viewController">
<window key="window" title="Preferences" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" frameAutosaveName="" animationBehavior="default" id="5f3-UK-Rft">
<windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES"/>
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
<rect key="contentRect" x="425" y="461" width="350" height="270"/>
<rect key="screenRect" x="0.0" y="0.0" width="2560" height="1417"/>
<connections>
<outlet property="delegate" destination="oOf-8k-ODW" id="NBT-Aq-4Qd"/>
</connections>
</window>
<connections>
<segue destination="yBJ-jB-chi" kind="relationship" relationship="window.shadowedContentViewController" id="EQ5-V4-wnd"/>
</connections>
</windowController>
</objects>
<point key="canvasLocation" x="-730" y="449"/>
</scene>
<!--Tab View Controller-->
<scene sceneID="gky-gQ-lB6">
<objects>
<tabViewController selectedTabViewItemIndex="0" tabStyle="toolbar" id="yBJ-jB-chi" sceneMemberID="viewController">
<tabViewItems>
<tabViewItem identifier="" image="NSPreferencesGeneral" id="87n-1W-bcb"/>
<tabViewItem image="ToolbarCustomize" id="nuJ-iU-x7x"/>
<tabViewItem image="NSAdvanced" id="gmA-Me-2UL"/>
<tabViewItem image="logo" id="F6w-SR-MIp"/>
</tabViewItems>
<viewControllerTransitionOptions key="transitionOptions" allowUserInteraction="YES"/>
<tabView key="tabView" type="noTabsNoBorder" id="L0t-Of-tQY">
<rect key="frame" x="0.0" y="0.0" width="400" height="300"/>
<autoresizingMask key="autoresizingMask"/>
<font key="font" metaFont="system"/>
<connections>
<outlet property="delegate" destination="yBJ-jB-chi" id="yO6-lB-wYs"/>
</connections>
</tabView>
<connections>
<outlet property="tabView" destination="L0t-Of-tQY" id="PaA-k2-tlX"/>
<segue destination="Gn1-zC-bzB" kind="relationship" relationship="tabItems" id="kJo-Dr-36g"/>
<segue destination="s5W-qL-1Xs" kind="relationship" relationship="tabItems" id="VpS-dg-hMc"/>
<segue destination="H3q-JS-Bu4" kind="relationship" relationship="tabItems" id="rqi-WK-zvU"/>
<segue destination="k6X-N1-mVu" kind="relationship" relationship="tabItems" id="1b4-g9-rGj"/>
</connections>
</tabViewController>
<customObject id="VVe-AG-gU7" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-37" y="441"/>
</scene>
<!--General-->
<scene sceneID="lyQ-BP-dP2">
<objects>
<viewController title="General" id="Gn1-zC-bzB" customClass="GeneralPreferencesViewController" customModule="OpenInTerminal" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" focusRingType="none" id="T7Z-PU-Qyb">
<rect key="frame" x="0.0" y="0.0" width="382" height="356"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="mA5-EO-f9U">
<rect key="frame" x="20" y="140" width="342" height="196"/>
<subviews>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Sat-kH-K8O">
<rect key="frame" x="-2" y="179" width="220" height="18"/>
<buttonCell key="cell" type="check" title="Launch OpenInTerminal at Login" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="ZbK-xW-anT">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="launchButtonClicked:" target="Gn1-zC-bzB" id="e8e-Xt-vgc"/>
</connections>
</button>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="ct1-0Y-gVn">
<rect key="frame" x="18" y="158" width="262" height="14"/>
<textFieldCell key="cell" selectable="YES" title="OpenInTerminal will automatically launch at login." id="ngT-lX-vFA">
<font key="font" metaFont="menu" size="11"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="VGA-Ho-z5c">
<rect key="frame" x="-2" y="133" width="106" height="18"/>
<buttonCell key="cell" type="check" title="Quick Toggle" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="gy9-lb-m8d">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="quickToggleButtonClicked:" target="Gn1-zC-bzB" id="fef-kU-b94"/>
</connections>
</button>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Kdm-9l-2u4">
<rect key="frame" x="17" y="102" width="329" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="Bct-qW-a6h">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="message"/>
<menu key="menu" id="5wI-2k-ZrL"/>
</popUpButtonCell>
</popUpButton>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="ybg-LK-qWi">
<rect key="frame" x="18" y="70" width="326" height="28"/>
<textFieldCell key="cell" title="If enabled, click the Menu Bar icon to toggle the action you choose. Right click to open the menu." id="592-4p-Ybh">
<font key="font" metaFont="menu" size="11"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="r3V-mR-QUG">
<rect key="frame" x="-2" y="45" width="150" height="18"/>
<buttonCell key="cell" type="check" title="Hide Status Bar Icon" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="BUH-CU-WBW">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="hideStatusItemButtonTapped:" target="Gn1-zC-bzB" id="AHM-dd-Yts"/>
</connections>
</button>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="6Fo-aC-2Mp">
<rect key="frame" x="18" y="24" width="273" height="14"/>
<textFieldCell key="cell" title="You need to reopen the app to display Preferences." id="Upf-HU-iaN">
<font key="font" metaFont="menu" size="11"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button horizontalHuggingPriority="1000" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ahb-Ye-oiL">
<rect key="frame" x="-2" y="-1" width="180" height="18"/>
<buttonCell key="cell" type="check" title="Hide Context Menu Items" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="sG4-nK-ghj">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="hideContextMenuItemsButtonTapped:" target="Gn1-zC-bzB" id="dK0-f3-OU3"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="ct1-0Y-gVn" firstAttribute="leading" secondItem="mA5-EO-f9U" secondAttribute="leading" constant="20" id="662-zn-0gM"/>
<constraint firstItem="6Fo-aC-2Mp" firstAttribute="leading" secondItem="mA5-EO-f9U" secondAttribute="leading" constant="20" id="8uS-S9-Jls"/>
<constraint firstAttribute="trailing" secondItem="Kdm-9l-2u4" secondAttribute="trailing" id="ZCx-ja-8mJ"/>
<constraint firstItem="Kdm-9l-2u4" firstAttribute="leading" secondItem="mA5-EO-f9U" secondAttribute="leading" constant="20" id="cZR-9S-S5P"/>
<constraint firstItem="ybg-LK-qWi" firstAttribute="leading" secondItem="mA5-EO-f9U" secondAttribute="leading" constant="20" id="tX6-7b-1oR"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<box titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="siD-hz-NIk">
<rect key="frame" x="20" y="16" width="342" height="106"/>
<view key="contentView" id="JZS-d4-7Et">
<rect key="frame" x="4" y="5" width="334" height="98"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Mkc-zC-sfG">
<rect key="frame" x="40" y="61" width="107" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Default Terminal:" id="aRo-sy-WpK">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0O8-UX-yZT">
<rect key="frame" x="27" y="20" width="120" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Default Text Editor:" id="Xfc-rf-FkX">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="AaU-k8-Gb7">
<rect key="frame" x="160" y="55" width="158" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="vl7-Er-jal">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="message"/>
<menu key="menu" id="hTS-Lg-LKV"/>
</popUpButtonCell>
<connections>
<action selector="defaultTerminalButtonClicked:" target="Gn1-zC-bzB" id="KuC-2Y-YvG"/>
</connections>
</popUpButton>
<popUpButton verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="R8D-f0-J22">
<rect key="frame" x="160" y="13" width="158" height="25"/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="sHo-F2-jzK">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="message"/>
<menu key="menu" id="9Kd-Lm-gKf"/>
</popUpButtonCell>
<constraints>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="151" id="frh-4C-o9Z"/>
</constraints>
<connections>
<action selector="defaultEditorButtonClicked:" target="Gn1-zC-bzB" id="FGq-Du-JmR"/>
</connections>
</popUpButton>
</subviews>
<constraints>
<constraint firstItem="AaU-k8-Gb7" firstAttribute="width" relation="greaterThanOrEqual" secondItem="R8D-f0-J22" secondAttribute="width" id="03y-qV-z2A"/>
<constraint firstAttribute="trailing" secondItem="AaU-k8-Gb7" secondAttribute="trailing" constant="20" id="4Ta-hP-Jfs"/>
<constraint firstAttribute="bottom" secondItem="R8D-f0-J22" secondAttribute="bottom" constant="17" id="MKz-9b-cJa"/>
<constraint firstItem="0O8-UX-yZT" firstAttribute="top" secondItem="Mkc-zC-sfG" secondAttribute="bottom" constant="25" id="Nam-5l-lnw"/>
<constraint firstItem="R8D-f0-J22" firstAttribute="leading" secondItem="0O8-UX-yZT" secondAttribute="trailing" constant="18" id="OIZ-DU-GT2"/>
<constraint firstItem="Mkc-zC-sfG" firstAttribute="leading" secondItem="JZS-d4-7Et" secondAttribute="leading" constant="42" id="PAf-H7-e9s"/>
<constraint firstAttribute="trailing" secondItem="R8D-f0-J22" secondAttribute="trailing" constant="20" id="PKj-Tn-BmO"/>
<constraint firstItem="Mkc-zC-sfG" firstAttribute="top" secondItem="JZS-d4-7Et" secondAttribute="top" constant="21" id="Snn-pq-Jsx"/>
<constraint firstItem="0O8-UX-yZT" firstAttribute="leading" secondItem="JZS-d4-7Et" secondAttribute="leading" constant="29" id="kgA-RI-dDU"/>
<constraint firstItem="R8D-f0-J22" firstAttribute="top" secondItem="AaU-k8-Gb7" secondAttribute="bottom" constant="22" id="n9y-4Q-TEc"/>
<constraint firstAttribute="bottom" secondItem="0O8-UX-yZT" secondAttribute="bottom" constant="20" id="rKm-p9-tMC"/>
<constraint firstItem="AaU-k8-Gb7" firstAttribute="leading" secondItem="Mkc-zC-sfG" secondAttribute="trailing" constant="18" id="yNv-Os-FkI"/>
</constraints>
</view>
</box>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="siD-hz-NIk" secondAttribute="bottom" constant="20" id="5aW-FJ-t4i"/>
<constraint firstItem="mA5-EO-f9U" firstAttribute="top" secondItem="T7Z-PU-Qyb" secondAttribute="top" constant="20" id="E81-CE-vQp"/>
<constraint firstAttribute="trailing" secondItem="mA5-EO-f9U" secondAttribute="trailing" constant="20" id="b3h-DF-hEc"/>
<constraint firstItem="mA5-EO-f9U" firstAttribute="leading" secondItem="T7Z-PU-Qyb" secondAttribute="leading" constant="20" id="it4-1i-mzk"/>
<constraint firstItem="siD-hz-NIk" firstAttribute="leading" secondItem="T7Z-PU-Qyb" secondAttribute="leading" constant="23" id="sDM-Za-QeF"/>
<constraint firstAttribute="trailing" secondItem="siD-hz-NIk" secondAttribute="trailing" constant="23" id="skE-Qw-EmW"/>
<constraint firstItem="siD-hz-NIk" firstAttribute="top" secondItem="mA5-EO-f9U" secondAttribute="bottom" constant="20" id="w4h-PB-niL"/>
</constraints>
</view>
<connections>
<outlet property="chooseToggleActionButton" destination="Kdm-9l-2u4" id="FlA-5C-clg"/>
<outlet property="defaultEditorButton" destination="R8D-f0-J22" id="krg-qv-BAe"/>
<outlet property="defaultTerminalButton" destination="AaU-k8-Gb7" id="bmA-od-3vf"/>
<outlet property="hideContextMemuItemsButton" destination="ahb-Ye-oiL" id="pGz-wd-uOe"/>
<outlet property="hideStatusItemButton" destination="r3V-mR-QUG" id="dcb-ua-B4X"/>
<outlet property="launchButton" destination="Sat-kH-K8O" id="ULF-Ao-sZa"/>
<outlet property="quickToggleButton" destination="VGA-Ho-z5c" id="Z2a-fo-5GU"/>
</connections>
</viewController>
<customObject id="7th-7A-0Xc" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-616" y="1117"/>
</scene>
<!--Custom-->
<scene sceneID="75c-0T-1MT">
<objects>
<viewController title="Custom" id="s5W-qL-1Xs" customClass="CustomPreferencesViewController" customModule="OpenInTerminal" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" focusRingType="none" id="jOR-Px-swx">
<rect key="frame" x="0.0" y="0.0" width="429" height="510"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="pxi-dF-LO8">
<rect key="frame" x="20" y="20" width="389" height="470"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="YWa-Sl-b4M">
<rect key="frame" x="0.0" y="432" width="207" height="38"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="btg-Vx-4Pl">
<rect key="frame" x="-2" y="22" width="211" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Installed Supported Applications" id="bT7-LU-sov">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="7kH-Hl-lwO">
<rect key="frame" x="18" y="0.0" width="32" height="14"/>
<textFieldCell key="cell" title="None" id="G69-k2-hgn">
<font key="font" metaFont="message" size="11"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="7kH-Hl-lwO" firstAttribute="leading" secondItem="YWa-Sl-b4M" secondAttribute="leading" constant="20" id="lf8-DG-xJ4"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="rUc-r1-QAo">
<rect key="frame" x="0.0" y="386" width="163" height="38"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Mx4-aq-XS9">
<rect key="frame" x="-2" y="22" width="167" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Not Installed Applications" id="bCi-r8-MrK">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="e8s-z7-dmZ">
<rect key="frame" x="18" y="0.0" width="32" height="14"/>
<textFieldCell key="cell" title="None" id="Dyx-zg-hYe">
<font key="font" metaFont="message" size="11"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="e8s-z7-dmZ" firstAttribute="leading" secondItem="rUc-r1-QAo" secondAttribute="leading" constant="20" id="3dN-g5-OO0"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="a3k-yj-yxK">
<rect key="frame" x="0.0" y="306" width="197" height="72"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="wVI-dH-WOK">
<rect key="frame" x="-2" y="56" width="40" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="iTerm" id="yIW-2a-15A">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="40" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="04S-wL-cdO">
<rect key="frame" x="20" y="22" width="159" height="26"/>
<subviews>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="2Jp-pe-FCb">
<rect key="frame" x="-2" y="9" width="75" height="18"/>
<buttonCell key="cell" type="radio" title="Window" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="mTs-8c-pgj">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="iTermWindowButtonClicked:" target="s5W-qL-1Xs" id="Xei-BB-oHW"/>
</connections>
</button>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Lmz-5e-p2j">
<rect key="frame" x="111" y="9" width="48" height="18"/>
<buttonCell key="cell" type="radio" title="Tab" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="nYS-rF-JCL">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="iTermTabButtonClicked:" target="s5W-qL-1Xs" id="eEz-5u-OOJ"/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="dIs-mN-a0t">
<rect key="frame" x="18" y="0.0" width="181" height="14"/>
<textFieldCell key="cell" title="Open a new window or a new tab." id="BrI-hE-Mff">
<font key="font" metaFont="message" size="11"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="dIs-mN-a0t" firstAttribute="leading" secondItem="a3k-yj-yxK" secondAttribute="leading" constant="20" id="0h7-fh-Zzi"/>
<constraint firstItem="04S-wL-cdO" firstAttribute="leading" secondItem="a3k-yj-yxK" secondAttribute="leading" constant="20" id="o3f-5r-RyI"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="h8Y-qc-B2O">
<rect key="frame" x="-2" y="282" width="145" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Custom Menu Options" id="nWc-SM-Kes">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="vertical" alignment="leading" spacing="-1" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5GI-nM-TKa">
<rect key="frame" x="20" y="120" width="349" height="154"/>
<subviews>
<scrollView ambiguous="YES" autohidesScrollers="YES" horizontalLineScroll="19" horizontalPageScroll="10" verticalLineScroll="19" verticalPageScroll="10" usesPredominantAxisScrolling="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ymk-Rc-U1A">
<rect key="frame" x="0.0" y="19" width="349" height="135"/>
<clipView key="contentView" id="pm8-fV-hD7">
<rect key="frame" x="1" y="1" width="347" height="133"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<tableView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" alternatingRowBackgroundColors="YES" columnSelection="YES" columnResizing="NO" multipleSelection="NO" autosaveColumns="NO" rowSizeStyle="automatic" viewBased="YES" id="zAU-AM-qPB">
<rect key="frame" x="0.0" y="0.0" width="347" height="133"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<size key="intercellSpacing" width="3" height="2"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
<color key="gridColor" name="gridColor" catalog="System" colorSpace="catalog"/>
<tableColumns>
<tableColumn width="277" minWidth="40" maxWidth="1000" id="gC5-IH-xRm">
<tableHeaderCell key="headerCell" lineBreakMode="truncatingTail" borderStyle="border">
<color key="textColor" name="headerTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="headerColor" catalog="System" colorSpace="catalog"/>
</tableHeaderCell>
<textFieldCell key="dataCell" lineBreakMode="truncatingTail" selectable="YES" editable="YES" title="Text Cell" id="kAa-36-ubl">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
<tableColumnResizingMask key="resizingMask" resizeWithTable="YES" userResizable="YES"/>
<prototypeCellViews>
<tableCellView identifier="customMenuCell" id="tqd-6Z-w2A">
<rect key="frame" x="1" y="1" width="286" height="17"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="fek-hL-jVI">
<rect key="frame" x="0.0" y="0.0" width="286" height="17"/>
<constraints>
<constraint firstAttribute="height" constant="17" id="HNz-wX-fSY"/>
</constraints>
<textFieldCell key="cell" lineBreakMode="truncatingTail" sendsActionOnEndEditing="YES" title="Table View Cell" id="keg-OV-uLJ">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<constraints>
<constraint firstItem="fek-hL-jVI" firstAttribute="centerY" secondItem="tqd-6Z-w2A" secondAttribute="centerY" id="Flr-w8-Tym"/>
<constraint firstItem="fek-hL-jVI" firstAttribute="leading" secondItem="tqd-6Z-w2A" secondAttribute="leading" constant="2" id="sbk-x5-pAP"/>
<constraint firstItem="fek-hL-jVI" firstAttribute="centerX" secondItem="tqd-6Z-w2A" secondAttribute="centerX" id="ulA-Qx-voD"/>
</constraints>
<connections>
<outlet property="textField" destination="fek-hL-jVI" id="N93-9r-gFg"/>
</connections>
</tableCellView>
</prototypeCellViews>
</tableColumn>
</tableColumns>
</tableView>
</subviews>
</clipView>
<scroller key="horizontalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="YES" id="f8o-Hv-7Co">
<rect key="frame" x="1" y="119" width="223" height="15"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
<scroller key="verticalScroller" hidden="YES" wantsLayer="YES" verticalHuggingPriority="750" horizontal="NO" id="LY8-1j-sew">
<rect key="frame" x="224" y="17" width="15" height="102"/>
<autoresizingMask key="autoresizingMask"/>
</scroller>
</scrollView>
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="-1" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="aac-5a-K7e">
<rect key="frame" x="0.0" y="0.0" width="39" height="20"/>
<subviews>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="krU-9a-aOM">
<rect key="frame" x="0.0" y="-1" width="20" height="22"/>
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSAddTemplate" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="UdO-uG-lx3">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="20" id="Ng7-fR-hex"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="20" id="oDR-08-4wm"/>
</constraints>
<connections>
<action selector="addMenuOptionButtonClicked:" target="s5W-qL-1Xs" id="Tnq-8R-LKI"/>
</connections>
</button>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Zcu-Kl-9MZ">
<rect key="frame" x="19" y="-1" width="20" height="22"/>
<buttonCell key="cell" type="smallSquare" bezelStyle="smallSquare" image="NSRemoveTemplate" imagePosition="overlaps" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="i7k-ZG-pfT">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<constraints>
<constraint firstAttribute="height" constant="20" id="OXV-aV-NqZ"/>
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="20" id="WXR-wb-F1Q"/>
</constraints>
<connections>
<action selector="removeMenuOptionButtonClicked:" target="s5W-qL-1Xs" id="bAi-VK-ZcG"/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="ymk-Rc-U1A" secondAttribute="trailing" id="4F5-6p-q0d"/>
<constraint firstItem="ymk-Rc-U1A" firstAttribute="leading" secondItem="5GI-nM-TKa" secondAttribute="leading" id="Uwd-l1-iFC"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jia-nD-S9J">
<rect key="frame" x="18" y="95" width="205" height="18"/>
<buttonCell key="cell" type="check" title="Apply to Finder Toolbar Menu" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="2we-f7-s2N">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="applyToToolbarButtonClicked:" target="s5W-qL-1Xs" id="P7k-7z-2dk"/>
</connections>
</button>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="teH-Uy-YOq" userLabel="Apply to Context Memu">
<rect key="frame" x="18" y="71" width="207" height="18"/>
<buttonCell key="cell" type="check" title="Apply to Finder Context Menu" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="RhP-R5-Wwt">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="applyToContextButtonClicked:" target="s5W-qL-1Xs" id="hiv-kz-pHw"/>
</connections>
</button>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4us-6x-3pQ">
<rect key="frame" x="20" y="48" width="260" height="16"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="hH5-GT-YX7">
<rect key="frame" x="-2" y="0.0" width="67" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Icon Type:" id="CP0-Xv-uYl">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="B10-NC-B1J">
<rect key="frame" x="69" y="-1" width="42" height="18"/>
<buttonCell key="cell" type="radio" title="no" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="x6U-9Q-ujh">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="noIconButtonClicked:" target="s5W-qL-1Xs" id="PWv-GP-uiE"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="Lag-Yy-a4i">
<rect key="frame" x="117" y="-1" width="66" height="18"/>
<buttonCell key="cell" type="radio" title="simple" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="yrq-LZ-XDr">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="simpleIconButtonClicked:" target="s5W-qL-1Xs" id="f5N-hS-WxG"/>
</connections>
</button>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qzh-XC-5Ni">
<rect key="frame" x="189" y="-1" width="71" height="18"/>
<buttonCell key="cell" type="radio" title="original" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="uok-iD-wXY">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="originalIconButtonClicked:" target="s5W-qL-1Xs" id="GtB-7O-X8R"/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zKo-P5-oOk">
<rect key="frame" x="0.0" y="0.0" width="148" height="40"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="UJr-Lw-s6i">
<rect key="frame" x="-2" y="24" width="147" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Path Escaping Options" id="lRl-dd-P8P">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="40" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" ambiguous="YES" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Z4g-0A-uOd">
<rect key="frame" x="20" y="0.0" width="128" height="16"/>
<subviews>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="M2J-AU-iO9">
<rect key="frame" x="-2" y="-1" width="44" height="18"/>
<buttonCell key="cell" type="radio" title="No" bezelStyle="regularSquare" imagePosition="left" alignment="left" state="on" inset="2" id="OET-MK-jpV">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="pathNoButtonClicked:" target="s5W-qL-1Xs" id="0p9-VV-Jde"/>
</connections>
</button>
<button verticalHuggingPriority="750" ambiguous="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vhd-Cy-Io7">
<rect key="frame" x="80" y="-1" width="48" height="18"/>
<buttonCell key="cell" type="radio" title="Yes" bezelStyle="regularSquare" imagePosition="left" alignment="left" inset="2" id="eYl-05-W7a">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="pathYesButtonClicked:" target="s5W-qL-1Xs" id="mOy-50-CcR"/>
</connections>
</button>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstItem="Z4g-0A-uOd" firstAttribute="leading" secondItem="zKo-P5-oOk" secondAttribute="leading" constant="20" id="yR2-yY-F8i"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstItem="4us-6x-3pQ" firstAttribute="leading" secondItem="pxi-dF-LO8" secondAttribute="leading" constant="20" id="CRm-C6-eJK"/>
<constraint firstItem="5GI-nM-TKa" firstAttribute="leading" secondItem="pxi-dF-LO8" secondAttribute="leading" constant="20" id="Erw-fg-klC"/>
<constraint firstItem="teH-Uy-YOq" firstAttribute="leading" secondItem="pxi-dF-LO8" secondAttribute="leading" constant="20" id="hcZ-Kv-8Sj"/>
<constraint firstAttribute="trailing" secondItem="5GI-nM-TKa" secondAttribute="trailing" constant="20" id="kNC-OB-Jgy"/>
<constraint firstItem="jia-nD-S9J" firstAttribute="leading" secondItem="pxi-dF-LO8" secondAttribute="leading" constant="20" id="wim-XS-cz0"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="pxi-dF-LO8" secondAttribute="trailing" constant="20" id="QRT-xy-dCb"/>
<constraint firstAttribute="bottom" secondItem="pxi-dF-LO8" secondAttribute="bottom" constant="20" id="Sfp-OB-lgB"/>
<constraint firstItem="pxi-dF-LO8" firstAttribute="top" secondItem="jOR-Px-swx" secondAttribute="top" constant="20" id="bPE-SW-J0S"/>
<constraint firstItem="pxi-dF-LO8" firstAttribute="leading" secondItem="jOR-Px-swx" secondAttribute="leading" constant="20" id="j2y-7X-cS6"/>
</constraints>
</view>
<connections>
<outlet property="addMenuOptionButton" destination="krU-9a-aOM" id="Mha-o5-VDh"/>
<outlet property="applyToContextButton" destination="teH-Uy-YOq" id="W1V-mC-hRa"/>
<outlet property="applyToToolbarButton" destination="jia-nD-S9J" id="Rfo-00-9Ss"/>
<outlet property="customMenuTableView" destination="zAU-AM-qPB" id="TAv-cq-hfF"/>
<outlet property="iTermTabButton" destination="Lmz-5e-p2j" id="Vr0-XJ-pnx"/>
<outlet property="iTermTextField" destination="wVI-dH-WOK" id="oeJ-Rq-h9e"/>
<outlet property="iTermWindowButton" destination="2Jp-pe-FCb" id="weB-Ix-KHl"/>
<outlet property="installedApplicationsTextField" destination="7kH-Hl-lwO" id="cZL-QZ-EcN"/>
<outlet property="noIconButton" destination="B10-NC-B1J" id="2P9-Ma-BMt"/>
<outlet property="notInstalledApplicationsTextField" destination="e8s-z7-dmZ" id="g9m-4p-nHb"/>
<outlet property="originalIconButton" destination="qzh-XC-5Ni" id="dpl-2W-ZJn"/>
<outlet property="pathNoButton" destination="M2J-AU-iO9" id="cCz-pG-pfn"/>
<outlet property="pathYesButton" destination="vhd-Cy-Io7" id="8se-Hp-u2x"/>
<outlet property="simpleIconButton" destination="Lag-Yy-a4i" id="HWS-9U-Hbk"/>
</connections>
</viewController>
<customObject id="mlw-wX-Yfn" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-148.5" y="1091"/>
</scene>
<!--Advanced-->
<scene sceneID="X6j-fK-tNl">
<objects>
<viewController title="Advanced" id="H3q-JS-Bu4" customClass="AdvancedPreferencesViewController" customModule="OpenInTerminal" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" id="pw0-CT-Gco">
<rect key="frame" x="0.0" y="0.0" width="380" height="263"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="cTF-y0-mpo">
<rect key="frame" x="20" y="20" width="340" height="223"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="9fR-JD-Uqd">
<rect key="frame" x="-2" y="207" width="67" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Shortcuts" id="FpP-Q9-flS">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Blx-CX-ALw">
<rect key="frame" x="0.0" y="180" width="340" height="19"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="ZQn-nx-aAX">
<rect key="frame" x="-2" y="3" width="196" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Open with default Terminal:" id="Mqt-Fp-Ssl">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="9ud-I5-Kam" customClass="SRRecorderControl">
<rect key="frame" x="200" y="0.0" width="140" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="140" id="Nge-TH-6NC"/>
<constraint firstAttribute="height" constant="19" id="e9T-gA-by7"/>
</constraints>
</customView>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bEn-Ey-rPa">
<rect key="frame" x="0.0" y="153" width="340" height="19"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PV3-X0-nd3">
<rect key="frame" x="-2" y="3" width="196" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Open with default Editor:" id="bvy-v3-hhf">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="TL3-ol-bGi" customClass="SRRecorderControl">
<rect key="frame" x="200" y="0.0" width="140" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="140" id="7Si-YW-rx9"/>
<constraint firstAttribute="height" constant="19" id="hWF-28-jML"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="TL3-ol-bGi" secondAttribute="bottom" id="3bT-Dc-ra9"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="jFP-BA-QYL">
<rect key="frame" x="0.0" y="126" width="340" height="19"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="2f4-ck-NPM">
<rect key="frame" x="-2" y="3" width="196" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" alignment="right" title="Copy path in Clipboard:" id="Xd9-iA-emU">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<customView translatesAutoresizingMaskIntoConstraints="NO" id="WBc-IR-x3y" customClass="SRRecorderControl">
<rect key="frame" x="200" y="0.0" width="140" height="19"/>
<constraints>
<constraint firstAttribute="width" constant="140" id="CZo-Ks-W7J"/>
<constraint firstAttribute="height" constant="19" id="Nov-wR-q8h"/>
</constraints>
</customView>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="WBc-IR-x3y" secondAttribute="bottom" id="wTJ-nE-lKl"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="0uu-e7-m1W">
<rect key="frame" x="-2" y="102" width="40" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Reset" id="jcs-Ou-OZ2">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="qri-L6-ZRL">
<rect key="frame" x="-1" y="72" width="127" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Reset preferences" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="jyI-H7-qN3">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="resetPreferencesButtonClicked:" target="H3q-JS-Bu4" id="bEV-WK-RrH"/>
</connections>
</button>
<textField focusRingType="none" verticalHuggingPriority="750" horizontalCompressionResistancePriority="250" translatesAutoresizingMaskIntoConstraints="NO" id="3HK-ud-hMQ">
<rect key="frame" x="-2" y="52" width="252" height="14"/>
<textFieldCell key="cell" selectable="YES" title="⚠️ Note that this will reset all user preferences" id="2Rg-te-FPU">
<font key="font" metaFont="message" size="11"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="REt-4o-a6D">
<rect key="frame" x="-2" y="28" width="31" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="Quit" id="FBK-9S-cZf">
<font key="font" metaFont="systemSemibold" size="13"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="EdD-oU-b1n">
<rect key="frame" x="-1" y="-2" width="139" height="23"/>
<buttonCell key="cell" type="roundTextured" title="Quit OpenInTerminal" bezelStyle="texturedRounded" alignment="center" lineBreakMode="truncatingTail" state="on" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="ofD-rA-gib">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<connections>
<action selector="quitButtonClicked:" target="H3q-JS-Bu4" id="Grs-f0-G4d"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="bEn-Ey-rPa" firstAttribute="width" secondItem="cTF-y0-mpo" secondAttribute="width" id="NeD-er-BKB"/>
<constraint firstItem="Blx-CX-ALw" firstAttribute="width" secondItem="cTF-y0-mpo" secondAttribute="width" id="ajG-zO-m9g"/>
<constraint firstItem="jFP-BA-QYL" firstAttribute="width" secondItem="cTF-y0-mpo" secondAttribute="width" id="b5p-C1-FRS"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
</subviews>
<constraints>
<constraint firstAttribute="trailing" secondItem="cTF-y0-mpo" secondAttribute="trailing" constant="20" id="66z-SA-rLl"/>
<constraint firstItem="cTF-y0-mpo" firstAttribute="top" secondItem="pw0-CT-Gco" secondAttribute="top" constant="20" id="7LV-eG-3yO"/>
<constraint firstAttribute="bottom" secondItem="cTF-y0-mpo" secondAttribute="bottom" constant="20" id="9AS-iQ-E7g"/>
<constraint firstItem="cTF-y0-mpo" firstAttribute="leading" secondItem="pw0-CT-Gco" secondAttribute="leading" constant="20" id="9zU-5K-5al"/>
</constraints>
</view>
<connections>
<outlet property="copyPathShortcut" destination="WBc-IR-x3y" id="tBb-rV-Cyb"/>
<outlet property="defaultEditorShortcut" destination="TL3-ol-bGi" id="F42-pz-UNZ"/>
<outlet property="defaultTerminalShortcut" destination="9ud-I5-Kam" id="l0e-EE-0qn"/>
<outlet property="resetPreferencesButton" destination="qri-L6-ZRL" id="cHB-aG-Whi"/>
</connections>
</viewController>
<customObject id="aPm-8i-YIB" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="319" y="1022.5"/>
</scene>
<!--About-->
<scene sceneID="pky-u0-lts">
<objects>
<viewController title="About" id="k6X-N1-mVu" customClass="AboutPreferencesViewController" customModule="OpenInTerminal" customModuleProvider="target" sceneMemberID="viewController">
<view key="view" id="rHs-sx-r6F">
<rect key="frame" x="0.0" y="0.0" width="386" height="224"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<stackView distribution="fill" orientation="vertical" alignment="leading" spacing="15" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4es-k1-K2c">
<rect key="frame" x="20" y="20" width="346" height="184"/>
<subviews>
<stackView distribution="fill" orientation="horizontal" alignment="top" spacing="12" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="yY2-Uz-6lI">
<rect key="frame" x="0.0" y="155" width="197" height="29"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="PJu-EB-sSS">
<rect key="frame" x="-2" y="5" width="148" height="24"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="OpenInTerminal" id="mOB-su-ZM1">
<font key="font" metaFont="systemSemibold" size="20"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="GS4-or-3hj">
<rect key="frame" x="154" y="5" width="45" height="24"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="0.1.0" id="Jnf-AX-bIr">
<font key="font" metaFont="system" size="20"/>
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
</subviews>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="F5k-92-BmU">
<rect key="frame" x="0.0" y="124" width="298" height="16"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="FCw-yO-sfT">
<rect key="frame" x="-2" y="0.0" width="73" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="👨💻 GitHub:" id="How-dP-tcX">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="dIe-6O-Ujs" customClass="LinkButton" customModule="OpenInTerminal" customModuleProvider="target">
<rect key="frame" x="77" y="0.0" width="221" height="16"/>
<buttonCell key="cell" type="bevel" title="github.com/Ji4n1ng/OpenInTerminal" bezelStyle="regularSquare" alignment="center" inset="2" id="f2V-P5-pQI">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="contentTintColor" name="systemBlueColor" catalog="System" colorSpace="catalog"/>
<connections>
<action selector="githubButtonClicked:" target="k6X-N1-mVu" id="Mzi-ik-Xj4"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="FCw-yO-sfT" secondAttribute="bottom" id="9uS-ez-Vc0"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="GIc-KW-yw5">
<rect key="frame" x="0.0" y="93" width="220" height="16"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="if3-nE-vHb">
<rect key="frame" x="-2" y="0.0" width="79" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="✉️ Contact:" id="Vu4-Wz-Agk">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="adH-E1-vuZ" customClass="LinkButton" customModule="OpenInTerminal" customModuleProvider="target">
<rect key="frame" x="83" y="0.0" width="137" height="16"/>
<buttonCell key="cell" type="bevel" title="contact@jianing.wang" bezelStyle="regularSquare" alignment="center" inset="2" id="IPL-yO-Vkp">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="contentTintColor" name="systemBlueColor" catalog="System" colorSpace="catalog"/>
<connections>
<action selector="contactButtonClicked:" target="k6X-N1-mVu" id="PM2-Zb-G4X"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstAttribute="bottom" secondItem="if3-nE-vHb" secondAttribute="bottom" id="ZgR-Rx-1oi"/>
</constraints>
<visibilityPriorities>
<integer value="1000"/>
<integer value="1000"/>
</visibilityPriorities>
<customSpacing>
<real value="3.4028234663852886e+38"/>
<real value="3.4028234663852886e+38"/>
</customSpacing>
</stackView>
<stackView distribution="fill" orientation="horizontal" alignment="top" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" detachesHiddenViews="YES" translatesAutoresizingMaskIntoConstraints="NO" id="0TM-Nh-KHG">
<rect key="frame" x="0.0" y="62" width="140" height="16"/>
<subviews>
<textField focusRingType="none" horizontalHuggingPriority="251" verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="nS3-Ad-fSA">
<rect key="frame" x="-2" y="0.0" width="73" height="16"/>
<textFieldCell key="cell" lineBreakMode="clipping" title="🐦 Twitter:" id="NZE-zU-6ss">
<font key="font" usesAppearanceFont="YES"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="eGl-Wl-oil" customClass="LinkButton" customModule="OpenInTerminal" customModuleProvider="target">
<rect key="frame" x="77" y="0.0" width="63" height="16"/>
<buttonCell key="cell" type="bevel" title="@Ji4n1ng" bezelStyle="regularSquare" alignment="center" inset="2" id="tR5-me-DTK">
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
<color key="contentTintColor" name="systemBlueColor" catalog="System" colorSpace="catalog"/>
<connections>
<action selector="twitterButtonClicked:" target="k6X-N1-mVu" id="chC
gitextract_lq_yxf02/
├── .gitattributes
├── .github/
│ ├── FUNDING.yml
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report_issue_template.md
│ │ └── feature_request_issue_template.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .travis.yml
├── LICENSE
├── OpenInEditor-Lite/
│ ├── OpenInEditor-Lite/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Error.swift
│ │ ├── Info.plist
│ │ ├── OpenInEditor-Lite.entitlements
│ │ ├── OpenInEditor_Lite.entitlements
│ │ ├── de.lproj/
│ │ │ └── Localizable.strings
│ │ ├── en.lproj/
│ │ │ └── Localizable.strings
│ │ ├── es.lproj/
│ │ │ └── Localizable.strings
│ │ ├── fr.lproj/
│ │ │ └── Localizable.strings
│ │ ├── it.lproj/
│ │ │ └── Localizable.strings
│ │ ├── ko.lproj/
│ │ │ └── Localizable.strings
│ │ ├── main.swift
│ │ ├── ru.lproj/
│ │ │ └── Localizable.strings
│ │ ├── tr.lproj/
│ │ │ └── Localizable.strings
│ │ └── zh-Hans.lproj/
│ │ └── Localizable.strings
│ └── OpenInEditor-Lite.xcodeproj/
│ ├── project.pbxproj
│ └── xcshareddata/
│ └── xcschemes/
│ └── OpenInEditor-Lite.xcscheme
├── OpenInTerminal/
│ ├── AppDelegate.swift
│ ├── Assets.xcassets/
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── StatusBarIcon.imageset/
│ │ │ └── Contents.json
│ │ ├── ToolbarCustomize.imageset/
│ │ │ └── Contents.json
│ │ └── logo.imageset/
│ │ └── Contents.json
│ ├── Constants.swift
│ ├── Error.swift
│ ├── Icons.xcassets/
│ │ ├── Alacritty.imageset/
│ │ │ └── Contents.json
│ │ ├── Android Studio.imageset/
│ │ │ └── Contents.json
│ │ ├── AppCode.imageset/
│ │ │ └── Contents.json
│ │ ├── Atom.imageset/
│ │ │ └── Contents.json
│ │ ├── BBEdit.imageset/
│ │ │ └── Contents.json
│ │ ├── CLion.imageset/
│ │ │ └── Contents.json
│ │ ├── Contents.json
│ │ ├── CotEditor.imageset/
│ │ │ └── Contents.json
│ │ ├── Cursor.imageset/
│ │ │ └── Contents.json
│ │ ├── Fleet.imageset/
│ │ │ └── Contents.json
│ │ ├── Fork.imageset/
│ │ │ └── Contents.json
│ │ ├── Ghostty.imageset/
│ │ │ └── Contents.json
│ │ ├── GitHub Desktop.imageset/
│ │ │ └── Contents.json
│ │ ├── GoLand.imageset/
│ │ │ └── Contents.json
│ │ ├── IntelliJ IDEA.imageset/
│ │ │ └── Contents.json
│ │ ├── MacVim.imageset/
│ │ │ └── Contents.json
│ │ ├── Nova.imageset/
│ │ │ └── Contents.json
│ │ ├── PhpStorm.imageset/
│ │ │ └── Contents.json
│ │ ├── PyCharm.imageset/
│ │ │ └── Contents.json
│ │ ├── RubyMine.imageset/
│ │ │ └── Contents.json
│ │ ├── Sublime Text.imageset/
│ │ │ └── Contents.json
│ │ ├── Tabby.imageset/
│ │ │ └── Contents.json
│ │ ├── Terminal.imageset/
│ │ │ └── Contents.json
│ │ ├── TextEdit.imageset/
│ │ │ └── Contents.json
│ │ ├── TextMate.imageset/
│ │ │ └── Contents.json
│ │ ├── Typora.imageset/
│ │ │ └── Contents.json
│ │ ├── VSCodium.imageset/
│ │ │ └── Contents.json
│ │ ├── Visual Studio Code - Insiders.imageset/
│ │ │ └── Contents.json
│ │ ├── Visual Studio Code.imageset/
│ │ │ └── Contents.json
│ │ ├── Warp.imageset/
│ │ │ └── Contents.json
│ │ ├── WebStorm.imageset/
│ │ │ └── Contents.json
│ │ ├── WezTerm.imageset/
│ │ │ └── Contents.json
│ │ ├── Xcode.imageset/
│ │ │ └── Contents.json
│ │ ├── Zed.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_color_editor.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_color_path.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_color_terminal.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_editor.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_path.imageset/
│ │ │ └── Contents.json
│ │ ├── context_menu_icon_terminal.imageset/
│ │ │ └── Contents.json
│ │ ├── hyper.imageset/
│ │ │ └── Contents.json
│ │ ├── iTerm.imageset/
│ │ │ └── Contents.json
│ │ ├── kitty.imageset/
│ │ │ └── Contents.json
│ │ └── neovim.imageset/
│ │ └── Contents.json
│ ├── Info.plist
│ ├── MainMenu.xib
│ ├── Notifier/
│ │ ├── LaunchNotifier.swift
│ │ ├── Notifier.swift
│ │ └── OpenNotifier.swift
│ ├── OpenInTerminal.entitlements
│ ├── PreferencesWindow/
│ │ ├── AboutPreferencesViewController.swift
│ │ ├── AdvancedPreferencesViewController.swift
│ │ ├── Base.lproj/
│ │ │ └── Preferences.storyboard
│ │ ├── CustomInputViewController.swift
│ │ ├── CustomPreferencesViewController.swift
│ │ ├── GeneralPreferencesViewController.swift
│ │ ├── PreferencesViewController.swift
│ │ ├── PreferencesWindowController.swift
│ │ ├── de.lproj/
│ │ │ └── Preferences.strings
│ │ ├── en.lproj/
│ │ │ └── Preferences.strings
│ │ ├── es.lproj/
│ │ │ └── Preferences.strings
│ │ ├── fr.lproj/
│ │ │ └── Preferences.strings
│ │ ├── it.lproj/
│ │ │ └── Preferences.strings
│ │ ├── ko.lproj/
│ │ │ └── Preferences.strings
│ │ ├── mul.lproj/
│ │ │ └── Preferences.xcstrings
│ │ ├── ru.lproj/
│ │ │ └── Preferences.strings
│ │ ├── tr.lproj/
│ │ │ └── Preferences.strings
│ │ └── zh-Hans.lproj/
│ │ └── Preferences.strings
│ ├── ScriptGenerator.swift
│ ├── StatusMenuController.swift
│ ├── de.lproj/
│ │ └── Localizable.strings
│ ├── en.lproj/
│ │ └── Localizable.strings
│ ├── es.lproj/
│ │ └── Localizable.strings
│ ├── fr.lproj/
│ │ └── Localizable.strings
│ ├── it.lproj/
│ │ └── Localizable.strings
│ ├── ko.lproj/
│ │ └── Localizable.strings
│ ├── ru.lproj/
│ │ └── Localizable.strings
│ ├── tr.lproj/
│ │ └── Localizable.strings
│ └── zh-Hans.lproj/
│ └── Localizable.strings
├── OpenInTerminal-Lite/
│ ├── OpenInTerminal-Lite/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Error.swift
│ │ ├── Info.plist
│ │ ├── OpenInTerminal-Lite.entitlements
│ │ ├── OpenInTerminal_Lite.entitlements
│ │ ├── de.lproj/
│ │ │ └── Localizable.strings
│ │ ├── en.lproj/
│ │ │ └── Localizable.strings
│ │ ├── es.lproj/
│ │ │ └── Localizable.strings
│ │ ├── fr.lproj/
│ │ │ └── Localizable.strings
│ │ ├── it.lproj/
│ │ │ └── Localizable.strings
│ │ ├── ko.lproj/
│ │ │ └── Localizable.strings
│ │ ├── main.swift
│ │ ├── ru.lproj/
│ │ │ └── Localizable.strings
│ │ ├── tr.lproj/
│ │ │ └── Localizable.strings
│ │ └── zh-Hans.lproj/
│ │ └── Localizable.strings
│ └── OpenInTerminal-Lite.xcodeproj/
│ ├── project.pbxproj
│ └── xcshareddata/
│ └── xcschemes/
│ └── OpenInTerminal-Lite.xcscheme
├── OpenInTerminal.xcodeproj/
│ └── project.pbxproj
├── OpenInTerminalCore/
│ ├── App.swift
│ ├── AppManager.swift
│ ├── Constants.swift
│ ├── Defaults.swift
│ ├── DefaultsManager.swift
│ ├── Error.swift
│ ├── Extensions/
│ │ ├── ArrayExtensions.swift
│ │ └── PathExtensions.swift
│ ├── FinderManager.swift
│ ├── Info.plist
│ ├── Log.swift
│ ├── OpenInTerminalCore.h
│ ├── ScriptManager.swift
│ ├── ScriptingBridge/
│ │ ├── Finder.swift
│ │ └── Terminal.swift
│ └── SupportedApps.swift
├── OpenInTerminalFinderExtension/
│ ├── FinderAssets.xcassets/
│ │ ├── Contents.json
│ │ └── Icon.imageset/
│ │ └── Contents.json
│ ├── FinderSync.swift
│ ├── Info.plist
│ └── OpenInTerminalFinderExtension.entitlements
├── OpenInTerminalHelper/
│ ├── AppDelegate.swift
│ ├── Assets.xcassets/
│ │ ├── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ └── Contents.json
│ ├── Base.lproj/
│ │ └── Main.storyboard
│ ├── Info.plist
│ └── OpenInTerminalHelper.entitlements
├── README.md
└── Resources/
├── README-Config-zh.md
├── README-Config.md
├── README-Lite-de.md
├── README-Lite-zh.md
├── README-Lite.md
├── README-de.md
├── README-tr.md
└── README-zh.md
Condensed preview — 168 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (841K chars).
[
{
"path": ".gitattributes",
"chars": 28,
"preview": "*.h linguist-language=Swift\n"
},
{
"path": ".github/FUNDING.yml",
"chars": 743,
"preview": "# These are supported funding model platforms\n\ngithub: Ji4n1ng\n#patreon: # Replace with a single Patreon username\n#open_"
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report_issue_template.md",
"chars": 196,
"preview": "---\nname: 'Bug report'\nlabels: bug\nabout: 'Report a bug'\n---\n\n## What is the issue?\n\n## How does one reproduce the issue"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request_issue_template.md",
"chars": 178,
"preview": "---\nname: 'Feature request'\nlabels: enhancement\nabout: 'Request a new feature'\n---\n\n## Summarize this feature\n\n## Why sh"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 162,
"preview": "## Summary of this pull request\n\n## Does this solve an existing issue? If so, add a link to it\n\n## Steps to test this fe"
},
{
"path": ".gitignore",
"chars": 2852,
"preview": "\n# Created by https://www.gitignore.io/api/macos,xcode,swift\n# Edit at https://www.gitignore.io/?templates=macos,xcode,s"
},
{
"path": ".travis.yml",
"chars": 495,
"preview": "language: objective-c\nmatrix:\n include:\n - osx_image: xcode11\nbranches:\n only:\n - master\n #- develop\nenv:\n g"
},
{
"path": "LICENSE",
"chars": 1073,
"preview": "The MIT License\n\nCopyright (c) 2019 Jianing Wang\n\nPermission is hereby granted, free of charge, to any person obtaining "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 1396,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"icon_editor_light_16.png\",\n \"idiom\" : \"mac\",\n \"scale\" : \"1x\",\n "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/Error.swift",
"chars": 484,
"preview": "//\n// Error.swift\n// OpenInEditor-Lite\n//\n// Created by Jianing Wang on 2019/6/25.\n// Copyright © 2019 Jianing Wang."
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/Info.plist",
"chars": 1255,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/OpenInEditor-Lite.entitlements",
"chars": 252,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/OpenInEditor_Lite.entitlements",
"chars": 807,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/de.lproj/Localizable.strings",
"chars": 374,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/en.lproj/Localizable.strings",
"chars": 370,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/es.lproj/Localizable.strings",
"chars": 368,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/fr.lproj/Localizable.strings",
"chars": 399,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/it.lproj/Localizable.strings",
"chars": 363,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by arendruni on 2020/4/9.\n Copyright © 2020 arendruni. All rig"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/ko.lproj/Localizable.strings",
"chars": 315,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Fernando on 2019/11/23.\n Copyright © 2019 Fernando. All rig"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/main.swift",
"chars": 689,
"preview": "//\n// main.swift\n// OpenInEditor-Lite\n//\n// Created by Jianing Wang on 2019/6/25.\n// Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/ru.lproj/Localizable.strings",
"chars": 380,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/tr.lproj/Localizable.strings",
"chars": 382,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite/zh-Hans.lproj/Localizable.strings",
"chars": 307,
"preview": "/* \n Localizable.strings\n OpenInEditor-Lite\n\n Created by Jianing Wang on 2019/6/25.\n Copyright © 2019 Jianing Wang. "
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite.xcodeproj/project.pbxproj",
"chars": 16230,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "OpenInEditor-Lite/OpenInEditor-Lite.xcodeproj/xcshareddata/xcschemes/OpenInEditor-Lite.xcscheme",
"chars": 2930,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1330\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "OpenInTerminal/AppDelegate.swift",
"chars": 9812,
"preview": "//\n// AppDelegate.swift\n// OpenInTerminal\n//\n// Created by Cameron Ingham on 4/17/19.\n// Copyright © 2019 Jianing Wa"
},
{
"path": "OpenInTerminal/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 1295,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"AppIcon-16.png\",\n \"idiom\" : \"mac\",\n \"scale\" : \"1x\",\n \"size\" : "
},
{
"path": "OpenInTerminal/Assets.xcassets/Contents.json",
"chars": 63,
"preview": "{\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\n"
},
{
"path": "OpenInTerminal/Assets.xcassets/StatusBarIcon.imageset/Contents.json",
"chars": 403,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"status_bar_icon.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n }"
},
{
"path": "OpenInTerminal/Assets.xcassets/ToolbarCustomize.imageset/Contents.json",
"chars": 313,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"universal\",\n \"filename\" : \"ToolbarCustomize.png\",\n \"scale\" : \"1x\"\n "
},
{
"path": "OpenInTerminal/Assets.xcassets/logo.imageset/Contents.json",
"chars": 309,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"AppIcon-256.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "OpenInTerminal/Constants.swift",
"chars": 1511,
"preview": "//\n// Config.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/20.\n// Copyright © 2019 Jianing Wang. A"
},
{
"path": "OpenInTerminal/Error.swift",
"chars": 456,
"preview": "//\n// Error.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/10/15.\n// Copyright © 2019 Jianing Wang. A"
},
{
"path": "OpenInTerminal/Icons.xcassets/Alacritty.imageset/Contents.json",
"chars": 307,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Alacritty.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Android Studio.imageset/Contents.json",
"chars": 312,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Android Studio.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },"
},
{
"path": "OpenInTerminal/Icons.xcassets/AppCode.imageset/Contents.json",
"chars": 305,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"AppCode.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n"
},
{
"path": "OpenInTerminal/Icons.xcassets/Atom.imageset/Contents.json",
"chars": 302,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Atom.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/BBEdit.imageset/Contents.json",
"chars": 304,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"BBEdit.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/CLion.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"CLion.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Contents.json",
"chars": 63,
"preview": "{\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\n"
},
{
"path": "OpenInTerminal/Icons.xcassets/CotEditor.imageset/Contents.json",
"chars": 307,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"CotEditor.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Cursor.imageset/Contents.json",
"chars": 304,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Cursor.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Fleet.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Fleet.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Fork.imageset/Contents.json",
"chars": 302,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Fork.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Ghostty.imageset/Contents.json",
"chars": 305,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Ghostty.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n"
},
{
"path": "OpenInTerminal/Icons.xcassets/GitHub Desktop.imageset/Contents.json",
"chars": 312,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"GitHub Desktop.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },"
},
{
"path": "OpenInTerminal/Icons.xcassets/GoLand.imageset/Contents.json",
"chars": 304,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"GoLand.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/IntelliJ IDEA.imageset/Contents.json",
"chars": 311,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"IntelliJ IDEA.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n"
},
{
"path": "OpenInTerminal/Icons.xcassets/MacVim.imageset/Contents.json",
"chars": 304,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"MacVim.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Nova.imageset/Contents.json",
"chars": 302,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Nova.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/PhpStorm.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"PhpStorm.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/PyCharm.imageset/Contents.json",
"chars": 305,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"PyCharm.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n"
},
{
"path": "OpenInTerminal/Icons.xcassets/RubyMine.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"RubyMine.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/Sublime Text.imageset/Contents.json",
"chars": 310,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Sublime Text.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Tabby.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"tabby.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Terminal.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Terminal.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/TextEdit.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"TextEdit.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/TextMate.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"TextMate.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/Typora.imageset/Contents.json",
"chars": 304,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Typora.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/VSCodium.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"VSCodium.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/Visual Studio Code - Insiders.imageset/Contents.json",
"chars": 327,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Visual Studio Code - Insiders.png\",\n \"idiom\" : \"universal\",\n \"scale"
},
{
"path": "OpenInTerminal/Icons.xcassets/Visual Studio Code.imageset/Contents.json",
"chars": 316,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Visual Studio Code.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Warp.imageset/Contents.json",
"chars": 302,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Warp.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/WebStorm.imageset/Contents.json",
"chars": 306,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"WebStorm.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {"
},
{
"path": "OpenInTerminal/Icons.xcassets/WezTerm.imageset/Contents.json",
"chars": 305,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"wezterm.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n"
},
{
"path": "OpenInTerminal/Icons.xcassets/Xcode.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Xcode.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/Zed.imageset/Contents.json",
"chars": 301,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Zed.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/context_menu_icon_color_editor.imageset/Contents.json",
"chars": 448,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"context_menu_icon_color_editor.png\",\n \"idiom\" : \"universal\",\n \"scal"
},
{
"path": "OpenInTerminal/Icons.xcassets/context_menu_icon_color_path.imageset/Contents.json",
"chars": 442,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"context_menu_icon_color_path.png\",\n \"idiom\" : \"universal\",\n \"scale\""
},
{
"path": "OpenInTerminal/Icons.xcassets/context_menu_icon_color_terminal.imageset/Contents.json",
"chars": 454,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"context_menu_icon_color_terminal.png\",\n \"idiom\" : \"universal\",\n \"sc"
},
{
"path": "OpenInTerminal/Icons.xcassets/context_menu_icon_editor.imageset/Contents.json",
"chars": 1751,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"context_menu_icon_editor-1.png\",\n \"idiom\" : \"universal\",\n \"scale\" :"
},
{
"path": "OpenInTerminal/Icons.xcassets/context_menu_icon_path.imageset/Contents.json",
"chars": 1737,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"context_menu_icon_path-1.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \""
},
{
"path": "OpenInTerminal/Icons.xcassets/context_menu_icon_terminal.imageset/Contents.json",
"chars": 1765,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"context_menu_icon_terminal-1.png\",\n \"idiom\" : \"universal\",\n \"scale\""
},
{
"path": "OpenInTerminal/Icons.xcassets/hyper.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"hyper.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/iTerm.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"iTerm.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/kitty.imageset/Contents.json",
"chars": 303,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"kitty.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Icons.xcassets/neovim.imageset/Contents.json",
"chars": 304,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"neovim.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n {\n "
},
{
"path": "OpenInTerminal/Info.plist",
"chars": 1531,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminal/MainMenu.xib",
"chars": 3901,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion"
},
{
"path": "OpenInTerminal/Notifier/LaunchNotifier.swift",
"chars": 294,
"preview": "//\n// LaunchNotifier.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/27.\n// Copyright © 2019 Jianing"
},
{
"path": "OpenInTerminal/Notifier/Notifier.swift",
"chars": 2069,
"preview": "//\n// Notifier.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/19.\n// Copyright © 2019 Jianing Wang."
},
{
"path": "OpenInTerminal/Notifier/OpenNotifier.swift",
"chars": 356,
"preview": "//\n// OpenManager.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/19.\n// Copyright © 2019 Jianing Wa"
},
{
"path": "OpenInTerminal/OpenInTerminal.entitlements",
"chars": 1037,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminal/PreferencesWindow/AboutPreferencesViewController.swift",
"chars": 2469,
"preview": "//\n// AboutPreferencesViewController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/5/1.\n// Copyright"
},
{
"path": "OpenInTerminal/PreferencesWindow/AdvancedPreferencesViewController.swift",
"chars": 2651,
"preview": "//\n// AdvancedPreferencesViewController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/5/5.\n// Copyri"
},
{
"path": "OpenInTerminal/PreferencesWindow/Base.lproj/Preferences.storyboard",
"chars": 135072,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" t"
},
{
"path": "OpenInTerminal/PreferencesWindow/CustomInputViewController.swift",
"chars": 2230,
"preview": "//\n// CustomInputViewController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2021/1/14.\n// Copyright © 2"
},
{
"path": "OpenInTerminal/PreferencesWindow/CustomPreferencesViewController.swift",
"chars": 17471,
"preview": "//\n// CustomPreferencesViewController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/21.\n// Copyrig"
},
{
"path": "OpenInTerminal/PreferencesWindow/GeneralPreferencesViewController.swift",
"chars": 9295,
"preview": "//\n// GeneralPreferencesViewController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/21.\n// Copyri"
},
{
"path": "OpenInTerminal/PreferencesWindow/PreferencesViewController.swift",
"chars": 756,
"preview": "//\n// PreferenceViewController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/20.\n// Copyright © 20"
},
{
"path": "OpenInTerminal/PreferencesWindow/PreferencesWindowController.swift",
"chars": 315,
"preview": "//\n// PreferencesWindowController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/29.\n// Copyright ©"
},
{
"path": "OpenInTerminal/PreferencesWindow/de.lproj/Preferences.strings",
"chars": 7958,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Bes"
},
{
"path": "OpenInTerminal/PreferencesWindow/en.lproj/Preferences.strings",
"chars": 7808,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Spe"
},
{
"path": "OpenInTerminal/PreferencesWindow/es.lproj/Preferences.strings",
"chars": 8055,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Agr"
},
{
"path": "OpenInTerminal/PreferencesWindow/fr.lproj/Preferences.strings",
"chars": 6767,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Spé"
},
{
"path": "OpenInTerminal/PreferencesWindow/it.lproj/Preferences.strings",
"chars": 6941,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Un "
},
{
"path": "OpenInTerminal/PreferencesWindow/ko.lproj/Preferences.strings",
"chars": 7410,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ 특별히"
},
{
"path": "OpenInTerminal/PreferencesWindow/mul.lproj/Preferences.xcstrings",
"chars": 94883,
"preview": "{\n \"sourceLanguage\" : \"en\",\n \"strings\" : {\n \"0Gy-jf-q6v.title\" : {\n \"comment\" : \"Class = \\\"NSTextFieldCell\\\"; "
},
{
"path": "OpenInTerminal/PreferencesWindow/ru.lproj/Preferences.strings",
"chars": 6654,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Осо"
},
{
"path": "OpenInTerminal/PreferencesWindow/tr.lproj/Preferences.strings",
"chars": 7789,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ Öze"
},
{
"path": "OpenInTerminal/PreferencesWindow/zh-Hans.lproj/Preferences.strings",
"chars": 7220,
"preview": "\n/* Class = \"NSTextFieldCell\"; title = \"❤️ Special thanks to:\"; ObjectID = \"0Gy-jf-q6v\"; */\n\"0Gy-jf-q6v.title\" = \"❤️ 特别致"
},
{
"path": "OpenInTerminal/ScriptGenerator.swift",
"chars": 2373,
"preview": "//\n// ScriptGenerator.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/10/15.\n// Copyright © 2019 Jiani"
},
{
"path": "OpenInTerminal/StatusMenuController.swift",
"chars": 4157,
"preview": "//\n// StatusMenuController.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/30.\n// Copyright © 2019 J"
},
{
"path": "OpenInTerminal/de.lproj/Localizable.strings",
"chars": 1509,
"preview": "/*\n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All "
},
{
"path": "OpenInTerminal/en.lproj/Localizable.strings",
"chars": 1414,
"preview": "/* \n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All"
},
{
"path": "OpenInTerminal/es.lproj/Localizable.strings",
"chars": 1145,
"preview": "/*\n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All "
},
{
"path": "OpenInTerminal/fr.lproj/Localizable.strings",
"chars": 1267,
"preview": "/* \n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All"
},
{
"path": "OpenInTerminal/it.lproj/Localizable.strings",
"chars": 1131,
"preview": "/*\n Localizable.strings\n OpenInTerminal\n\n Created by arendruni on 2020/4/8.\n Copyright © 2020 arendruni. All rights "
},
{
"path": "OpenInTerminal/ko.lproj/Localizable.strings",
"chars": 1181,
"preview": "/* \n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All"
},
{
"path": "OpenInTerminal/ru.lproj/Localizable.strings",
"chars": 1169,
"preview": "/* \n Localizable.strings\n OpenInTerminal\n\n Created by Egor Lazarev on 2020/1/30.\n Copyright © 2019 Egor Lazarev. All"
},
{
"path": "OpenInTerminal/tr.lproj/Localizable.strings",
"chars": 1460,
"preview": "/* \n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All"
},
{
"path": "OpenInTerminal/zh-Hans.lproj/Localizable.strings",
"chars": 1103,
"preview": "/* \n Localizable.strings\n OpenInTerminal\n\n Created by Jianing Wang on 2019/4/22.\n Copyright © 2019 Jianing Wang. All"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 1413,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"icon_terminal_light_16.png\",\n \"idiom\" : \"mac\",\n \"scale\" : \"1x\",\n "
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/Assets.xcassets/Contents.json",
"chars": 63,
"preview": "{\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\n"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/Error.swift",
"chars": 493,
"preview": "//\n// Error.swift\n// OpenInTerminal-Lite\n//\n// Created by Jianing Wang on 2019/4/21.\n// Copyright © 2019 Jianing Wan"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/Info.plist",
"chars": 1255,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/OpenInTerminal-Lite.entitlements",
"chars": 252,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/OpenInTerminal_Lite.entitlements",
"chars": 676,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/de.lproj/Localizable.strings",
"chars": 381,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/en.lproj/Localizable.strings",
"chars": 380,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/es.lproj/Localizable.strings",
"chars": 378,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/fr.lproj/Localizable.strings",
"chars": 407,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/it.lproj/Localizable.strings",
"chars": 372,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by arendruni on 2020/4/9.\n Copyright © 2020 arendruni. All r"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/ko.lproj/Localizable.strings",
"chars": 321,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Fernando on 2019/11/23.\n Copyright © 2019 Fernando. All r"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/main.swift",
"chars": 715,
"preview": "//\n// main.swift\n// OpenInTerminal-Lite\n//\n// Created by Jianing Wang on 2019/4/19.\n// Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/ru.lproj/Localizable.strings",
"chars": 383,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/tr.lproj/Localizable.strings",
"chars": 382,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite/zh-Hans.lproj/Localizable.strings",
"chars": 311,
"preview": "/* \n Localizable.strings\n OpenInTerminal-Lite\n\n Created by Jianing Wang on 2019/5/16.\n Copyright © 2019 Jianing Wang"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite.xcodeproj/project.pbxproj",
"chars": 16274,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 50;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "OpenInTerminal-Lite/OpenInTerminal-Lite.xcodeproj/xcshareddata/xcschemes/OpenInTerminal-Lite.xcscheme",
"chars": 3341,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1330\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "OpenInTerminal.xcodeproj/project.pbxproj",
"chars": 56226,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 60;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "OpenInTerminalCore/App.swift",
"chars": 7265,
"preview": "//\n// App.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2020/12/5.\n// Copyright © 2020 Jianing Wang. "
},
{
"path": "OpenInTerminalCore/AppManager.swift",
"chars": 4310,
"preview": "//\n// AppManager.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2020/12/18.\n// Copyright © 2020 Jianin"
},
{
"path": "OpenInTerminalCore/Constants.swift",
"chars": 2240,
"preview": "//\n// Config.swift\n// OpenInTerminal\n//\n// Created by Jianing Wang on 2019/4/17.\n// Copyright © 2019 Jianing Wang. A"
},
{
"path": "OpenInTerminalCore/Defaults.swift",
"chars": 3993,
"preview": "//\n// Defaults.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2019/4/21.\n// Copyright © 2019 Jianing W"
},
{
"path": "OpenInTerminalCore/DefaultsManager.swift",
"chars": 8396,
"preview": "//\n// DefaultsManager.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2019/10/14.\n// Copyright © 2019 J"
},
{
"path": "OpenInTerminalCore/Error.swift",
"chars": 998,
"preview": "//\n// Error.swift\n// cd2swiftTest\n//\n// Created by Jianing Wang on 2019/4/10.\n// Copyright © 2019 Jianing Wang. All "
},
{
"path": "OpenInTerminalCore/Extensions/ArrayExtensions.swift",
"chars": 1754,
"preview": "//\n// ArrayExtensions.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2020/4/6.\n// Copyright © 2020 Jia"
},
{
"path": "OpenInTerminalCore/Extensions/PathExtensions.swift",
"chars": 2104,
"preview": "//\n// PathExtensions.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 11/22/24.\n// Copyright © 2024 Jian"
},
{
"path": "OpenInTerminalCore/FinderManager.swift",
"chars": 9989,
"preview": "//\n// FinderManager.swift\n// OpenInTerminalCore\n//\n// Created by Cameron Ingham on 4/17/19.\n// Copyright © 2019 Came"
},
{
"path": "OpenInTerminalCore/Info.plist",
"chars": 850,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminalCore/Log.swift",
"chars": 4959,
"preview": "//\n// log.swift\n// cd2swiftTest\n//\n// Created by Jianing Wang on 2019/4/10.\n// Copyright © 2019 Jianing Wang. All ri"
},
{
"path": "OpenInTerminalCore/OpenInTerminalCore.h",
"chars": 562,
"preview": "//\n// OpenInTerminalCore.h\n// OpenInTerminalCore\n//\n// Created by Cameron Ingham on 4/17/19.\n// Copyright © 2019 Jia"
},
{
"path": "OpenInTerminalCore/ScriptManager.swift",
"chars": 9196,
"preview": "//\n// ScriptManager.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2020/12/7.\n// Copyright © 2020 Jian"
},
{
"path": "OpenInTerminalCore/ScriptingBridge/Finder.swift",
"chars": 41040,
"preview": "import AppKit\nimport ScriptingBridge\n\n@objc public protocol SBObjectProtocol: NSObjectProtocol {\n func get() -> Any!\n"
},
{
"path": "OpenInTerminalCore/ScriptingBridge/Terminal.swift",
"chars": 14259,
"preview": "import AppKit\nimport ScriptingBridge\n\n// MARK: TerminalSaveOptions\n@objc public enum TerminalSaveOptions : AEKeyword {\n "
},
{
"path": "OpenInTerminalCore/SupportedApps.swift",
"chars": 4829,
"preview": "//\n// SupportedApps.swift\n// OpenInTerminalCore\n//\n// Created by Jianing Wang on 2020/12/5.\n// Copyright © 2020 Jian"
},
{
"path": "OpenInTerminalFinderExtension/FinderAssets.xcassets/Contents.json",
"chars": 63,
"preview": "{\n \"info\" : {\n \"author\" : \"xcode\",\n \"version\" : 1\n }\n}\n"
},
{
"path": "OpenInTerminalFinderExtension/FinderAssets.xcassets/Icon.imageset/Contents.json",
"chars": 490,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"Finder_extension_icon.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\""
},
{
"path": "OpenInTerminalFinderExtension/FinderSync.swift",
"chars": 10232,
"preview": "//\n// FinderSync.swift\n// OpenInTerminalFinderExtension\n//\n// Created by Cameron Ingham on 4/17/19.\n// Copyright © 2"
},
{
"path": "OpenInTerminalFinderExtension/Info.plist",
"chars": 1338,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminalFinderExtension/OpenInTerminalFinderExtension.entitlements",
"chars": 500,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminalHelper/AppDelegate.swift",
"chars": 1619,
"preview": "//\n// AppDelegate.swift\n// OpenInTerminalHelper\n//\n// Created by Jianing Wang on 2019/5/5.\n// Copyright © 2019 Jiani"
},
{
"path": "OpenInTerminalHelper/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 903,
"preview": "{\n \"images\" : [\n {\n \"idiom\" : \"mac\",\n \"size\" : \"16x16\",\n \"scale\" : \"1x\"\n },\n {\n \"idiom\" : "
},
{
"path": "OpenInTerminalHelper/Assets.xcassets/Contents.json",
"chars": 62,
"preview": "{\n \"info\" : {\n \"version\" : 1,\n \"author\" : \"xcode\"\n }\n}"
},
{
"path": "OpenInTerminalHelper/Base.lproj/Main.storyboard",
"chars": 58434,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB\" version=\"3.0\" t"
},
{
"path": "OpenInTerminalHelper/Info.plist",
"chars": 1195,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "OpenInTerminalHelper/OpenInTerminalHelper.entitlements",
"chars": 416,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "README.md",
"chars": 9101,
"preview": "<div align=\"center\">\n <img width=\"80%\" src=\"https://user-images.githubusercontent.com/11001224/104892170-d18f2b80-59ac-"
},
{
"path": "Resources/README-Config-zh.md",
"chars": 3613,
"preview": "# OpenInTerminal 配置\n\n## Finder 扩展配置\n\n要启用 Finder 扩展,请右键单击 Finder 工具栏,然后选择 自定义工具栏...,如下图所示:\n\n<div>\n <img src=\"https://git"
},
{
"path": "Resources/README-Config.md",
"chars": 5094,
"preview": "# OpenInTerminal Configurations\n\n## Finder Extension Configuration\n\nTo enable Finder Extension, right click on Finder to"
},
{
"path": "Resources/README-Lite-de.md",
"chars": 12170,
"preview": "<p align=\"center\">\n <img width=\"100%\" src=\"https://user-images.githubusercontent.com/11001224/104892184-d522b280-59ac-1"
},
{
"path": "Resources/README-Lite-zh.md",
"chars": 8944,
"preview": "<div align=\"center\">\n <img width=\"100%\" src=\"https://user-images.githubusercontent.com/11001224/104892184-d522b280-59ac"
},
{
"path": "Resources/README-Lite.md",
"chars": 15156,
"preview": "<div align=\"center\">\n <img width=\"100%\" src=\"https://user-images.githubusercontent.com/11001224/104892184-d522b280-59ac"
},
{
"path": "Resources/README-de.md",
"chars": 8844,
"preview": "<p align=\"center\">\n <img width=\"80%\" src=\"https://user-images.githubusercontent.com/11001224/104892170-d18f2b80-59ac-11"
},
{
"path": "Resources/README-tr.md",
"chars": 8085,
"preview": "<p align=\"center\">\n <img width=\"80%\" src=\"https://user-images.githubusercontent.com/11001224/104892170-d18f2b80-59ac-11"
},
{
"path": "Resources/README-zh.md",
"chars": 3165,
"preview": "<div align=\"center\">\n <img width=\"80%\" src=\"https://user-images.githubusercontent.com/11001224/104892170-d18f2b80-59ac-"
}
]
About this extraction
This page contains the full source code of the Ji4n1ng/OpenInTerminal GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 168 files (756.1 KB), approximately 203.2k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.