デフォルトブラウザを5秒に1回変える人に便利な Swift スクリプト書いた (Mac)
| #!/usr/bin/xcrun swift | |
| import Cocoa | |
| struct ProgramOption { | |
| var list : Bool = false | |
| var set : String? = nil | |
| var help : Bool = false | |
| } | |
| func getInstalledBrowsers () -> [ NSBundle ] { | |
| var browsers = [ NSBundle ]() | |
| let array = LSCopyAllHandlersForURLScheme("http").takeRetainedValue() | |
| for var i = 0, len = CFArrayGetCount(array); i < len; i++ { | |
| let bundleId = unsafeBitCast(CFArrayGetValueAtIndex(array, i), CFString.self) as String | |
| if let path = NSWorkspace.sharedWorkspace().absolutePathForAppBundleWithIdentifier(bundleId) { | |
| if let bundle = NSBundle(path: path) { | |
| // let name: String = bundle.infoDictionary!["CFBundleName"] as String | |
| browsers.append(bundle) | |
| } | |
| } | |
| } | |
| return browsers | |
| } | |
| func setDefaultBrowser (bundleId : String) -> Bool { | |
| let httpResult = LSSetDefaultHandlerForURLScheme("http", bundleId) | |
| let httpsResult = LSSetDefaultHandlerForURLScheme("https", bundleId) | |
| if httpResult == noErr && httpsResult == noErr { | |
| return true | |
| } else { | |
| return false | |
| } | |
| } | |
| var option = ProgramOption() | |
| for var i = 0, len = Process.arguments.count; i < len; i++ { | |
| let arg = Process.arguments[i] | |
| switch arg { | |
| case "-h", "--help": | |
| option.help = true | |
| case "-l", "--list": | |
| option.list = true | |
| case "-s", "--set": | |
| option.set = Process.arguments[++i] | |
| default: | |
| break | |
| } | |
| } | |
| if option.help { | |
| println("-h, --help: Show help (this)") | |
| println("-l, --list: Show installed browser list") | |
| println("-s [bundleId], --set [bundleId]: Set default browser to specified browser") | |
| exit(0) | |
| } | |
| if option.list { | |
| let browsers = getInstalledBrowsers() | |
| for browser in browsers { | |
| let bundleId = browser.bundleIdentifier! | |
| let path = browser.bundlePath | |
| println("\(bundleId)") | |
| println("\t\(path)") | |
| } | |
| } | |
| if let bundleId = option.set { | |
| if setDefaultBrowser(bundleId) { | |
| exit(0) | |
| } else { | |
| exit(1) | |
| } | |
| } | |
| exit(0) | |
peco る
set_default_browser.swift --set $( set_default_browser.swift -l | grep -v "\t" | peco )
雑にpecoれる
経緯
関連エントリー
- Mac でウェブカメラの定期撮影を Swift で書く macOS 用にウェブカメラからjpgを取得するコマンドラインツールにimagesnapというのがある。単発で使うには問題ないんだけど、イン...
- Let's encrypt の自動更新 以下のようなスクリプトを置いて月イチの cron で更新するようにしました。証明書を更新したあと h2o を restart しています。 ...
- LAN 内の mDNS に応答するホストを列挙したい PTR _services._dns-sd._udp.local. A/AAAA [ソースアドレス].in-addr.arpa. をやりたい...
- Shortcut Recorder がうまく動かなかった Xcode 6.1.1 で Shortcut Recorder の 440a3d18e688142cd00fc88e4dc36ff35544...
- golang で websocket websocket.JSON を使った場合 JSON をやりとりする場合専用の方法がある (JSON-RPC ライクな実装を書いてみた場合)...