Skip to content

Instantly share code, notes, and snippets.

@hitode909
Created November 30, 2023 01:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hitode909/e1e1592086159cdc71aa94e74cbba57c to your computer and use it in GitHub Desktop.
Save hitode909/e1e1592086159cdc71aa94e74cbba57c to your computer and use it in GitHub Desktop.
Continuous Screen Capture Script for xbar
#! /usr/bin/ruby
require 'logger'
require 'json'
LOGGER = Logger.new(STDOUT)
if ENV['DEBUG']
LOGGER.level = Logger::Severity::DEBUG
else
LOGGER.level = Logger::Severity::WARN
end
OUTPUT_DIR=File.join(Dir.home, 'Desktop', 'continuous-screen-capture')
MAX_AGE=3600 * 24 * 7
unless File.exists?(OUTPUT_DIR)
LOGGER.debug "Creating output directory: #{OUTPUT_DIR}"
Dir.mkdir(OUTPUT_DIR)
end
def capture_screenshot
display_info = `system_profiler SPDisplaysDataType -json`
display_ids = JSON.parse(display_info)['SPDisplaysDataType'].first['spdisplays_ndrvs'].map{|display| display['_spdisplays_displayID'] }
output_filenames = display_ids.map { | display_id|
File.join(OUTPUT_DIR, "#{Time.now.strftime('%Y%m%d-%H%M%S')}-#{display_id}.jpg")
}
LOGGER.debug "Capturing screenshot to #{output_filenames.join(' ')}"
system "screencapture", "-x", "-t", "jpg", "-T", "0", *output_filenames
end
def delete_old_screenshots
all_files = Dir.glob("#{OUTPUT_DIR}/*.jpg").sort
all_files.each{|file|
enough_old = (Time.now - File.mtime(file)) > MAX_AGE
if enough_old
LOGGER.debug "Deleting old file: #{file}"
File.delete(file)
end
}
end
capture_screenshot
delete_old_screenshots
puts "📸 #{Time.now.strftime('%H:%M:%S')}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment