Skip to content

Instantly share code, notes, and snippets.

@dillonhafer
Last active May 5, 2022 02:18
Show Gist options
  • Save dillonhafer/24db0b3cd1fc7952a0d0e276021218ea to your computer and use it in GitHub Desktop.
Save dillonhafer/24db0b3cd1fc7952a0d0e276021218ea to your computer and use it in GitHub Desktop.

Forelady

forelady is from 1867 in reference to juries, 1888 of shops

Installation

cp forelady.rb /usr/local/bin/forelady
chmod u+x /usr/local/bin/forelady

Usage

cd my-project
forelady
#!/usr/bin/env ruby
require "tempfile"
class Tab
attr_reader :title, :command
def initialize(title, command)
@title = title.strip.chomp
@command = command.strip.chomp
end
def template(project_dir)
<<~OSA
set #{tab} to (create tab with default profile)
tell sessions[1] of #{tab} to write text "echo -ne '\\\\033]0;#{title}\\\\007'"
tell sessions[1] of #{tab} to write text "cd #{project_dir}; #{command}"
OSA
end
def tab
object_id.to_s.chars.map { |c| (65 + c.to_i).chr }.join
end
def self.try_files(*file_names)
file = file_names.detect { |f| File.exist?(f) }
if file.nil?
puts "Could not find #{file_names.join(" or ")}"
exit(1)
end
file
end
def self.generate_osascript
project_dir = Dir.pwd
filename = try_files("./Procfile.dev", "./Procfile")
tabs = File.readlines(filename).map { |l| Tab.new(*l.split(":", 2)) }
<<~OSA
tell application "iTerm2"
tell current window
#{tabs.map { |t| t.template(project_dir) }.join("\n ")}
select first tab
end tell
end tell
OSA
end
end
file = Tempfile.new("osascript")
begin
file.write(Tab.generate_osascript)
file.close
command = "/usr/bin/osascript <#{file.path}"
system(command)
ensure
file.close
file.unlink
end
🍄: bin/rails server
💨: bin/rails tailwindcss:watch
🔥: firebase emulators:start --project firebase-project-id --import=./emulator-data
☕️: yarn build --watch
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment