Skip to content

Instantly share code, notes, and snippets.

View mminer's full-sized avatar

Matthew Miner mminer

View GitHub Profile
@mminer
mminer / ScreenshotManager.swift
Last active May 23, 2018 22:28
Saves screenshots in a Cocoa application (wrapper around screencapture).
import AppKit
struct ScreenshotManager {
/// Matches macOS' screenshot filename format.
private static let filenameFormatter: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "'Screen Shot' yyyy-MM-dd 'at' HH.mm.ss"
return formatter
}()
@mminer
mminer / URLSchemeHandler.swift
Last active October 18, 2017 04:53
Registers a Cocoa application to handle a custom URL scheme (e.g. someapp://action).
import Foundation
class URLSchemeHandler {
private let urlHandler: (URL) -> Void
init(urlHandler: @escaping (URL) -> Void) {
self.urlHandler = urlHandler
NSAppleEventManager.shared().setEventHandler(
@mminer
mminer / SparkleCleanup.swift
Last active December 14, 2016 01:30
Removes old Sparkle updates that weren't removed properly.
import Foundation
struct SparkleCleanup {
private static let oldDownloadAge: TimeInterval = 86400 // 24 hours
/// The location where Sparkle caches file downloads.
private static var cacheURL: URL {
guard let bundleIdentifier = Bundle.main.bundleIdentifier else {
fatalError("Unable to get bundle identifier.")
@mminer
mminer / homeDirectory.swift
Last active September 17, 2016 19:15
Finds the user's home directory inside a sandboxed Cocoa application.
import Foundation
let homeDirectory: String = {
let home = getpwuid(getuid()).pointee.pw_dir!
return FileManager.default.string(withFileSystemRepresentation: home, length: Int(strlen(home)))
}()
@mminer
mminer / EventMonitor.swift
Last active October 18, 2017 04:54
Wrapper around NSEvent's global event monitor.
import AppKit
class EventMonitor {
private let handler: (NSEvent) -> Void
private let mask: NSEvent.EventTypeMask
private var monitor: Any?
init(mask: NSEvent.EventTypeMask, handler: @escaping (NSEvent) -> Void) {
self.handler = handler
@mminer
mminer / PreferencesViewController.swift
Last active May 19, 2024 05:06
NSTabViewController for preferences window that resizes itself to fit activated tab view.
import AppKit
class PreferencesViewController: NSTabViewController {
private lazy var tabViewSizes: [NSTabViewItem: NSSize] = [:]
override func tabView(_ tabView: NSTabView, didSelect tabViewItem: NSTabViewItem?) {
super.tabView(tabView, didSelect: tabViewItem)
if let tabViewItem = tabViewItem {
@mminer
mminer / postMainThreadNotification.swift
Last active October 18, 2017 04:54
Swift function for posting notifications on main thread.
// NSNotificationCenter isn't thread-safe, so this ensures that notifications are posted on the main thread.
func postMainThreadNotification(notification: Notification) {
DispatchQueue.main.async { NotificationCenter.default.post(notification) }
}
@mminer
mminer / cachedecorator.py
Created January 12, 2015 23:57
An example of a Python decorator to simplify caching a function's result.
"""An example of a cache decorator."""
import json
from functools import wraps
from redis import StrictRedis
redis = StrictRedis()
def cached(func):
@mminer
mminer / socketadapter.py
Created January 5, 2015 17:30
Connection adapter for Requests that allows it to talk with raw UNIX sockets.
"""
Connection adapter for Requests that allows it to talk with raw UNIX sockets.
Adapted from requests-unixsocket, which itself was adapted from docker-py.
https://github.com/msabramo/requests-unixsocket
https://github.com/docker/docker-py/blob/master/docker/unixconn/unixconn.py
"""
import socket
from urllib.parse import unquote, urlparse
@mminer
mminer / gitgraph
Created December 2, 2014 00:48
My preferred Git log format.
git log --graph --all --oneline --decorate